Java

자바 jdbc로 미니 프로젝트

chaebideas77 2026. 6. 16. 10:52

자바 기초부터 제네릭, List, Set까지 다 배웠다.

그렇다고 자유롭게 사용할 능력까지는 아직은 안되는듯..

 

일단 간단하게 개발환경은 JAVA,ORACLE, JDBC를 이용해서 미니 프로젝트를 진행했다.

기본으로 알아야 할 CRUD에 대해서 학습했다.

  • 생성
  • 조회
  • 수정
  • 삭제

1. View

예전에 장고 독학 할 때도 계속 컨트롤러, 서비스 이런 개념들이 잘 정리가 안됐는데

이번 프로젝트를 하면서 확실히 코드를 직접 작성해보니까 정리가 된 기분

View는 사용자(User)가 웹을 방문할 때 가장 먼저 보는 화면

 

 

이건 임의로 콘솔에 띄우기 위해 제미나이의 도움을 받아서 만든 뷰 화면

나중에 프론트 (HTML/CSS/JS)를 배우면 색깔도 입히고 더 예쁘게 만들 수 있다.

2. Controller

컨트롤러(Controller)는 사용자가 화면(View)에서 특정 작업 번호를 선택했을 때, 이에 대응하여

어떤 비즈니스 로직(기능)을 실행할지 결정하고 제어하는 파일이다.

예를 들어서 대학전체 조회(1)를 선택하면 이런 코드가 작동이 되는데

DTO와 서비스는 뒤에서 바로 설명하겠다.

// 1. 대학 전체 조회
	private static void f_univSelectAll() {
		List<UniversityDTO> ulist = universityservice.selectAllService();
		UniversityView.printUniversityList(ulist);
	}

 

3. Service

서비스(Service)는 컨트롤러와 DAO 사이에서 요청을 연결해 주는 '비서' 역할을 하는 파일

사용자가 화면(View)에서 특정 작업(대학 전체 조회)을 선택하면, 컨트롤러는 그 요청을 서비스에게 보낸다.

서비스는 이 요청을 받아서 데이터베이스에 접근하는 DAO(Data Access Object)로 "사용자가 '대학 전체 조회' 기능을 선택했어요"라고 그대로 전달(토스)해 주는 징검다리 역할을 수행

 

현재 구조: 컨트롤러 ➡️ 서비스(단순 전달) ➡️ DAO

public List<UniversityDTO> selectAllService(){
		return universityDAO.selectAll();	
	}

 

4. DAO (Data Access Object)

DAO는 데이터베이스(DB)에 직접 접근하여 데이터를 조작하는 역할을 전담하는 파일

자바 프로그램이 데이터베이스에 직접 복잡하게 접근하기보다는, 테이블(Entity)마다 전용 DAO를 두어

안전하고 깔끔하게 데이터에 접근

 

DAO 만드는 이유

유지 보수 하기 좋다. 나중에 특정 기능이 작동 안 하면 각 파일(서비스, 컨트롤러, DAO) 거슬러 올라가면서

코드 고치기 편하다.

 

대학 전체를 조회하는 것이기 때문에 리스트(univList)를 만들었다.

  • Connection : DB 연결
  • Statement : SQL문 보내기 위한 통로
  • PreparedStatement : SQL문 보내기 위한 통로, ? 가능
  • ResultSet : select 결과를 받음

아래 코드는 sql문에 ?가 없기 때문에 Statement로 실행했다.

st = conn.createStatement()를 실행하면

DB 연결 상태가 불안정하거나, 이미 닫힌 연결을 쓸 때 프로그램이 터지는 것을 방지 하라는 의미로

Exception 처리를 해줘야한다. 그래서 try, catch문 사용.

 

makeUniversity의 목적

  • 해당 SQL문을 실행한 결과를 ResultSet (rs)로 받기
  • 대학 DTO에 있는 필드 값을 새로 받아 Setter에 넣어주는 것
  • 자바 객체가 완성 되었기 때문에 하나의 대학 객체로 반환.
public List<UniversityDTO> selectAll(){
		List<UniversityDTO> univList = new ArrayList<>();
		String sql = "select * from university";
		conn = DBUtil.dbConnect();
		try {
			st = conn.createStatement();
			rs = st.executeQuery(sql);
			while(rs.next()) {
				UniversityDTO university = makeUniversity(rs);
				univList.add(university);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBUtil.dbDisconnect(conn, st, rs);
		}
		return univList;
	}

	private UniversityDTO makeUniversity(ResultSet rs) throws SQLException {
		UniversityDTO university = new UniversityDTO();
		university.setId(rs.getInt("id"));
		university.setName(rs.getString("name"));
		university.setAddress(rs.getString("address"));
		university.setContact(rs.getString("contact"));
		university.setHomepage_url(rs.getString("homepage_url"));
		university.setAdmission_url(rs.getString("admission_url"));
		return university;
	}

 

5. DTO (Data Transfer Object)

DTO는 계층 간(View - Controller - Service - DAO) 데이터 교환을 위해 사용하는 객체

오라클에서 만든 테이블 Entity를 정의해준다고 생각했다.

 

lombok 라이브러리를 이용하여 생성자, Get, Set 함수를 하나하나 입력해주는 수고로움을 덜었다.

Builder는 예시를 통해서 보는게 편할거 같은데

UniversityDTO univ = new UniversityDTO(1, "서울대", "서울", "02-123-4567"); 
(순서가 바뀌면 버그 발생!)

 

필드가 10개 이상 되면 디버깅 시 자기가 어떤 필드 입력을 놓쳤는지 알기 어려워진다.

UniversityDTO univ = UniversityDTO.builder()
    .id(1)
    .name("서울대")
    .address("서울")
    .contact("02-123-4567")
    .build();

 

builder를 이용해 생성자를 만들면 생성자 형성에 편리함.

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@AllArgsConstructor
@NoArgsConstructor
@Getter@Setter@ToString
@Builder
public class UniversityDTO {
	private int id;
	private String name;
	private String address;
	private String contact;
	private String homepage_url;
	private String admission_url;
}

 

 

'Java' 카테고리의 다른 글

Servlet이랑 jsp  (0) 2026.06.24
스레드  (0) 2026.06.01
제네릭  (0) 2026.06.01
이것이 자바다 연습문제 Chap12  (0) 2026.06.01
참조형 변수  (1) 2026.05.19