데이터베이스 연결

Minseo Kang·2023년 3월 15일
0
post-thumbnail

애플리케이션과 데이터베이스 연결


H2 데이터베이스 서버를 실행해놔야 함

  • cd 경로명 : 다운받은 h2 폴더의 bin 폴더로 이동
  • ./h2.sh : MAC 기준 H2 서버를 실행




01. ConnectionConst 클래스 작성 - connection 패키지


  • 객체를 생성하지 못하도록 abstract 로 선언
  • 데이터베이스에 접속하는데 필요한 기본 정보를 편리하게 사용할 수 있도록 상수로 선언
  • 상수는 public static final 로 선언
  • 규약이므로 지켜야 함

package hello.jdbc.connection;

public abstract class ConnectionConst {
    public static final String URL = "jdbc:h2:tcp://localhost/~/test"; // 규약
    public static final String USERNAME = "sa";
    public static final String PASSWORD = "";
}



02. DBConnectionUtil 클래스 작성 - connection 패키지


  • Connection import 시 java.sql.Connection
  • DriverManagergetConnection을 사용해 데이터베이스와 연결
  • 라이브러리에 있는 데이터베이스 드라이버를 찾아서 해당 드라이버가 제공하는 커넥션 반환
  • 여기서는 H2 데이터베이스 드라이버가 작동하여 실제 데이터베이스와 커넥션을 맺고 결과 반환

package hello.jdbc.connection;


import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import static hello.jdbc.connection.ConnectionConst.*;

@Slf4j
public class DBConnectionUtil {

    public static Connection getConnection() {
        try {
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            log.info("get connection={}, class={}", connection, connection.getClass());
            return connection;
        } catch (SQLException e) {
            throw new IllegalStateException(e);
        }
    }

}



03. DBConnectionUtilTest (테스트 코드) 작성


  • Assersions import 시 org.assertj.core.api
  • 가져온 connection은 JdbcConnection
package hello.jdbc.connection;

import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import java.sql.Connection;

@Slf4j
class DBConnectionUtilTest {

    @Test
    void connections() {
        Connection connection = DBConnectionUtil.getConnection();
        Assertions.assertThat(connection).isNotNull();
    }

}

테스트 코드 실행 결과

11:38:44.762 [Test worker] INFO hello.jdbc.connection.DBConnectionUtil - get connection=conn0: url=jdbc:h2:tcp://localhost/~/test user=SA, class=class org.h2.jdbc.JdbcConnection



04. JDBC DriverManager 연결 이해


JDBC 커넥션 인터페이스와 구현

  • JDBC는 java.sql.Connection 표준 커넥션 인터페이스를 정의
  • H2 데이터베이스 드라이버는 JDBC Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection 구현체 제공

DriverManager

  • JDBC가 제공
  • 라이브러리에 등록된 DB 드라이버들을 관리
  • 커넥션을 획득하는 기능 제공

DriverManager 커넥션 요청 흐름

  1. 커넥션 필요 시 DriverManager.getConnection() 호출
  2. DriverManager는 라이브러리에 등록된 드라이버 목록을 자동 인식
    • 순서대로 정보를 넘겨서 커넥션 획득 가능한지 확인
    • URL, 이름, 비밀번호 등 접속에 필요한 정보
    • ex. jdbc:h2:tcp://localhost/~/test
    • 각각의 드라이버는 URL 정보를 체크하여 본인이 처리할 수 있는 요청인지 확인
    • ex. URL이 jdbc:h2로 시작하면 이것은 h2 데이터베이스에 접근하기 위한 규칙
    • 실제 데이터베이스에 연결해서 커넥션 획득 후 이 커넥션을 클라이언트에 반환
    • 다음 드라이버에게 순서가 넘어감
  3. 이렇게 찾은 커넥션 구현체가 클라이언트에 반환됨

  • 우리는 H2 데이터베이스 드라이버만 라이브러리에 등록함
  • 따라서 H2 드라이버가 제공하는 H2 커넥션을 제공받음
  • 이 컨넥션은 java.sql.Connection 인터페이스를 구현함

H2 데이터베이스 드라이버 라이브러리

runtimeOnly 'com.h2database:h2' // h2~.jar

0개의 댓글