부트캠프

[멋쟁이사자] 백엔드 - 31일차 회고록

planting grass 2025. 4. 15. 18:05
728x90

31일차

학습 목표

  1. MySQL emp 및 dept 테이블 데이터베이스 연동 및 기본 CRUD (Create, Read, Update, Delete) 작업을 수행할 수 있다.
  2. 두 개 이상의 테이블(emp, dept)을 조인하여 필요한 정보를 효과적으로 조회하고, 그 결과를 DTO (EmpDeptDTO.java) 객체에 매핑하여 활용할 수 있다.
  3. 자바에서 스레드를 생성하는 두 가지 주요 방법(Thread 클래스 상속, Runnable 인터페이스 구현)을 이해하고, 각 방법의 특징과 사용 방법을 설명할 수 있다.

개발한 기능 요약

  • JDBC 연결 및 쿼리 실행
  • PreparedStatement 활용한 SQL Injection 방어
  • ResultSetMetaData, ParameterMetaData 사용
  • MVC 구조 도입 (Model, View, Controller)
  • DAO + Service 계층 분리
  • 트랜잭션 수동 제어 및 롤백 처리

디렉토리 구조

MySQLApp
├── lib
│   └── mysql-connector-j-9.1.0.jar
└──    src
    └── com
        └── mysqlapp
            ├── Main.java
            ├── controller             -----------[6]
            │   ├── DeptController.java
            │   └── EmpController.java
            ├── dao                    -----------[4]
            │   ├── DeptDAO.java (I)
            │   ├── DeptDAOImpl.java (C)
            │   ├── EmpDAO.java (I)
            │   └── EmpDAOImpl.java (C)
            ├── model                  -----------[3]
            │   ├── Dept.java
            │   ├── Emp.java
            │   └── EmpDeptDTO.java
            ├── service                -----------[5]
            │   ├── DeptService.java (I)
            │   ├── DeptServiceImpl.java (C)
            │   ├── EmpService.java (I)
            │   └── EmpServiceImpl.java (C)
            ├── view                   -----------[7]
            │   ├── DeptView.java
            │   └── EmpView.java
            └── common
                └── JDBCTemplate.java  -----------[2]
    └── db.properties                 -- [1]
  • (I) : Interface
  • (C) : Class 구현체

주요 클래스 설명

Main

  • 애플리케이션의 진입점
  • EmpDeptControllerrun() 메서드를 호출하여 전체 로직 시작

Controller

  • 메뉴 선택 및 사용자 흐름 제어
  • EmpService, DeptService를 호출하여 View와 Model을 연결

Service

  • DAO 호출을 담당하며 비즈니스 로직 분기 가능성 확보
  • 부서 추가/조회/삭제/수정 기능 제공
  • DAO의 결과를 그대로 전달

DAO

  • emp,dept 테이블 대상 CRUD 수행
  • join, between 조건 포함한 SELECT 처리

Model

  • 사원, 부서, 정보를 표현하는 DTO
  • 사원의 급여와 등급을 나타내는 조인 DTO

View

  • 사원 출력 관련 로직 담당

Connon

  • JDBC 연결 및 트랜잭션 유틸 클래스

학습 회고

이전에 만들었던 JDBC를 이용한 MVC 패턴을 통해 CRUD한 코드와 유사한 기능을 구현했다.

둘 다 MVC 패턴에 맞게 계층을 분리했고, JDBC를 사용해 트랙잭션을 활용해서 DB를 제어했다.

다만, 이번에 MySQLApp의 경우에는 두 개의 도메인과, JOIN을 사용했고, DTO를 응용해봤다.

이전에 한 Person이 MVC 패턴 구조의 기초 학습이었다면, MySQLApp은 다중 도메인, 조인 처리, 트랜잭션 활용과 같은 좀 더 확장된 프로젝트라고 생각이 든다.

Person에서는 try-catch를 통해 JDBC를 연결하고 finally 처리를 해줬다면, MySQLApp에서는 try-catch-resource를 통해 finally을 통해 DB를 close하지 않더라도 연결을 자동으로 끊어지도록 했다.

Java Code 확인하기

https://github.com/lold2424/bootCamp/tree/main/Java%20Code/MySQLApp

[bootCamp/Java Code/MySQLApp at main · lold2424/bootCamp

멋쟁이사자. Contribute to lold2424/bootCamp development by creating an account on GitHub.

github.com](https://github.com/lold2424/bootCamp/tree/main/Java%20Code/MySQLApp)

728x90