MySQL_04 JDBC, JUnit

aggapang·2025년 6월 6일

kb IT's Your Life

목록 보기
16/20

JDBC

  • Java Database Connectivity
  • 데이터베이스와 연결해서 입출력 지원
  • 데이터베이스 관리시스템(DBMS) 종류와 상관 없이 사용할 수 있는 클래스와 인터페이스로 구성


  • CUD return 값 : 실행된 row의 개수
  • R return 값 : 실행된 테이블 형태 (컬럼 + 인스턴스)

JDBC 드라이버(driver)

  • 자바에서 데이터베이스에 접속하고 SQL을 실행할 수 있게 해주는 중간 계층 소프트웨어
  • 데이터베이스마다 제공하는 드라이버가 다름
  • MySQL: com.mysql.cj.jdbc.Driver
  • Oracle: oracle.jdbc.driver.OracleDriver
  • PostgreSQL: org.postgresql.Driver
  • SQLite: org.sqlite.JDBC

DAO

  • Data Access Object
  • DB 접근해서 처리하는 클래스
  • 하는 일 : Create, Read, Update, Delete(CRUD)

VO

  • Value Object
  • Data Transfer Object (DTO)
  • 입력한 데이터를 DB로 전송하기 위한 데이터를 묶는 가방 역할하는 클래스
  • 자바 클래스 객체 처럼 사용하면 됨!

JDBC 핵심 인터페이스/클래스

JDBC 개발 절차

1. DB 드라이버 설정

Class.forName("");
  • 드라이버를 메모리에 로딩되면서 등록
    • 없으면ClassNotFoundException 발생

2. DB 연결

Connection con = DriverManager.getConnection(url,user,pw);
  • Connection 객체
    • 데이터베이스에 연결 세션 생성
  • url은 연결 문자열
  • "jdbc:mysql://[host]:[포트]/[db이름]"

3. SQL 문 객체 생성

String sql = "";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,pw);
...

4. DB로 보내 실행 / 결과처리

int result = pstmt.executeUpdate();

JDBCUtil

  • 데이터베이스 연결 및 닫기 작업은 항상 필요해서 클래스를 따로 만들어 놓음
  • resources::/application.properties
    • driver, url, id, pw 따로 파일로 저장
    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3306/jdbc_ex
    id=scoula
    pw=1234
  • common.JDBCUtil
    • Properties : 키-값 형태로 설정 파일이나 환경설정 정보를 읽고 쓸대 사용
    • Statememt : SQL 문 실행 클래스, Connection 객체를 통해 생성
      • ResultSet executeQuery(SQL문) : select 문 실행
      • int executeUpdate(SQL문) : insert, update, delete 문 실행
    • PrepatedStatement : SQL문에 값을 넣을 때 ?을 이용해 파라이터화 해서 처리
      • pstmt.setXxxx(파라미터번호, 값) : 파라미터 설정
      • pstmt.executeUpdate() : SQL문 실행
static Connection conn = null;
    public static Connection getConnection() {
        if(conn != null) return conn;
        try {
            Properties properties = new Properties();
            // load() : .properies 파일로 부터 키-값 설정 읽어옴
            properties.load(JDBCUtil.class.getResourceAsStream("/application.properties"));

            // getProperty() : 키에 대한 값을 문자열로 반환
            String driver = properties.getProperty("driver");
            String url = properties.getProperty("url");
            String id = properties.getProperty("id");
            String password = properties.getProperty("password");

            // Class.forName() : 해당 드라이버를 메모리에 로딩
            Class.forName(driver);

            // DriverManager가 connection
            try(conn = DriverManager.getConnection(url, id, password)){
            // try(예외처리 대상코드) -> 자동해제
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

JUnit

  • 기능 단위 별 테스트 라이브러리
  • gradle 빌드 시스템일 경우 JUnit5가 단위 테스트 라이브러리로 설정됨
  • test 폴더에 실제 프로젝트 코드 폴더 양식으로 자동 생성됨

  • 테스트 클래스
  • 테스트 메서드
  • 어노테이션 사용

@

  • @DisplayName("테스트이름") : 테스트 이름 설정
  • @Test : 테스트 메서드 지정

주요 어노테이션

  • @BeforeAll : 전체 테스트 전에 1회 호출, static 메서드
  • @BeforeEach : 각 테스트 케이스 마다 실행 전에 호출
  • @AfterEach : 각 테스트 케이스 마다 실행 후에 호출
  • @AfterAll : 전체 테스트 후에 1회 호출, static 메서드
  • @Disabled : 테스트에서 제외

Assertions

  • 여러가지 static 메서드 제공
  • assertEquals(실제값, 기대값) : 실제값과 기대값이 다르면 테스트 실패 -> 예외 발생
@Test
@DisplayName("1+2=3")
public void junitTest(){
  int a = 1;
  int b = 2;
  int sum = 3;
  Assertions.assertEquals(a+b,sum); // 다르면 에러 발생
} 

AssertJ

메서드 이름설명
isEqualTo(A)A 값과 같은지 검증
isNotEqualTo(A)A 값과 다른지 검증
contains(A)A 값을 포함하는지 검증
doesNotContain(A)A 값을 포함하지 않는지 검증
startsWith(A)접두사가 A인지 검증
endsWith(A)접미사가 A인지 검증
isEmpty()비어있는 값인지 검증
isNotEmpty()비어있지 않은 값인지 검증
isPositive()양수인지 검증
isNegative()음수인지 검증
isGreaterThan(1)1보다 큰 값인지 검증
isLessThan(1)1보다 작은 값인지 검증

TDD

  • Test-Driven Develop
  • 소프트웨어 개발 프로세스에서 테스트 코드 -> 기능 개발
  • 주요 과정
    • Red 단계(실패 테스트 작성)
    • Green 단계 (기능 구현)
    • Refactor 단계 (리팩토링)

0개의 댓글