자바프레임워크 1~3일차

2026. 3. 17. 12:18대우개발원 수업 내용/spring boot, framework

반응형

JDBC 프로그래밍 준비

  • JDBC(Java Database Connectivity): 자바에서 DB에 접속할 수 있도록 하는 API
  • 핵심 개념: Connection을 맺고 SQL을 실행하여 DB와 연동하는 프로그램 작성

DML (Data Manipulation Language)

  • INSERT / UPDATE / DELETE
    • UPDATE: SET으로 컬럼 값 수정, WHERE로 대상 지정
      update tbl_todo set finished = 0, title = 'not yet...' where tno = 2;
      
    • DELETE: WHERE 조건에 맞는 데이터 삭제
      delete from tbl_todo where tno > 2;
      
  • 특징: 결과로 “몇 건이 영향을 받았는지” 반환
  • SELECT (쿼리): 결과 집합(ResultSet)을 반환, 커서를 이동하며 데이터 추출

JDBC 주요 API

  • Connection: DB와의 연결, 반드시 close() 필요
  • Statement / PreparedStatement: SQL 실행 객체
    • 보안상 PreparedStatement 권장 (SQL Injection 방지)
  • ResultSet: SELECT 결과를 담는 객체, next()로 커서 이동

close()의 의미

  • Connection/Statement/ResultSet은 사용 후 반드시 close()
  • 자원 해제를 위해 try~catch~finally, try-with-resources, Lombok @Cleanup 활용

Connection Pool & DataSource

  • Connection Pool: 미리 연결을 만들어두고 필요할 때 꺼내 쓰는 방식(사용 후 반납) → 성능 향상
  • javax.sql.DataSource: Connection Pool 인터페이스
  • 대표 라이브러리: DBCP, C3PO, HikariCP(이걸 사용할 예정)

DAO (Data Access Object)

  • DB 연동을 전담하는 객체
  • 비즈니스 로직과 분리, DB 작업 메서드로 구성
  • DTO/VO 사용
    • VO(Value Object): 데이터 자체를 담는 객체, 주로 getter만 있는 읽기 전용

요약:

  • JDBC는 Connection → Statement/PreparedStatement → ResultSet → close() 흐름이 기본
  • DML은 영향받은 행 수를 반환, SELECT는 ResultSet 반환
  • Connection Pool로 성능 최적화, DAO로 구조화
  • VO/DTO로 데이터 전달을 깔끔하게 관리

프로젝트내 JDBC 구현

Lombok 라이브러리

  • 역할: 반복적으로 작성해야 하는 코드(getter/setter, 생성자, toString, equals 등)를 컴파일 시점에 자동 생성
  • 사용 방식: 어노테이션 기반 (@Getter, @Setter, @AllArgsConstructor, @ToString 등)
  • 주의 사항:
    • 프로젝트에 Lombok 라이브러리 추가 필요
    • IDE 설정 지원 필요 (특히 Eclipse는 별도 설정 필수)

 HikariCP의 설정


JUnit

  • 역할: 자바에서 가장 많이 쓰이는 테스트 프레임워크
  • 버전: JUnit 5 (자바 8 이상 필요)
  • 구성:
    • JUnit Platform: 테스트 발견 및 실행 계획(TestEngine API 제공)
    • JUnit Jupiter: JUnit 5의 새로운 테스트 API와 실행 엔진
      • junit-jupiter-api (테스트 작성용)
      • junit-jupiter-engine (테스트 실행용)
    • JUnit Vintage: JUnit 3/4 테스트 실행 지원 (하위 호환성)

JUnit 테스트 어노테이션

  • 테스트 클래스 조건: 추상 클래스 불가, 기본 생성자 필요
  • 테스트 메서드:
    • @Test: 일반 테스트 메서드
    • @ParameterizedTest: 매개변수 있는 테스트
    • @RepeatedTest: 반복 테스트 (@RepeatedTest(3))
  • 라이프사이클 메서드:
    • @BeforeAll: 모든 테스트 시작 전 1회 실행 (static 필요)
    • @BeforeEach: 각 테스트 실행 전 실행
    • @AfterAll: 모든 테스트 종료 후 1회 실행 (static 필요)
    • @AfterEach: 각 테스트 실행 후 실행

JUnit 기타 어노테이션

  • @Tag: 테스트 그룹 태깅
  • @Disabled: 테스트 비활성화
  • @Timeout: 실행 시간 제한
  • @ExtendWith: 확장 등록
  • @TempDir: 임시 디렉토리 제공
  • @DisplayName: 테스트 이름 지정

Lombok @Cleanup

  • 역할: close() 호출을 자동으로 생성 → 자원 해제 코드 간결화
  • 장점: trycatchfinally 없이 자원 정리 가능
  • 단점: Lombok 라이브러리에 종속적

요약:

  • Lombok은 반복 코드 자동 생성, @Cleanup으로 자원 관리 간소화
  • JUnit 5는 Platform/Jupiter/Vintage로 구성, 다양한 어노테이션으로 테스트 작성 및 관리
  • 테스트 클래스/메서드 조건과 라이프사이클 메서드 활용이 중요