JDBC - 연결

박찬우·2024년 2월 1일

스프링 DB

목록 보기
2/53

라이브러리 설정

  • bulid.gradle
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'

상수 설정

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 = "";
}

DB 커넥션 클래스

@Slf4j
public class DBConnectionUtil {
    public static Connection getConnection() {

        try {
            Connection connection = DriverManager.getConnection(ConnectionConst.URL,
                    ConnectionConst.USERNAME,
                    ConnectionConst.PASSWORD
            );

            log.info("get connetcion={}, class={}", connection, connection.getClass());

            return connection;
        } catch(Exception e) {
            throw new IllegalArgumentException(e);
        }

    }
}

TEST

  • class org.h2.jdbc.JdbcConnection
    • H2 데이터베이스 드라이버가 제공하는 H2 전용 커넥션
    • JDBC 표준 커넥션 인터페이스인 java.sql.Connection 인터페이스를 구현한 것
  • JDBC는 java.sql.Connection 표준 커넥션 인터페이스를 정의한다.
  • H2 데이터베이스 드라이버는 JDBC Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection 구현체를 제공한다.
@Slf4j
class DBConnectionUtilTest {

    @Test
    void connection() {
        // get
        // connetcion=conn0: url=jdbc:h2:tcp://localhost/~/test user=SA,
        // class=class org.h2.jdbc.JdbcConnection
        Connection connection = DBConnectionUtil.getConnection();
        Assertions.assertThat(connection).isNotNull();
    }
}

연결 흐름


1. 커넥션이 필요하면 DriverManager.getConnection() 을 호출한다
2. DriverManager 는 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다. 이 드라이버들에게 순서대로 다 음 정보를 넘겨서 커넥션을 획득할 수 있는지 확인한다.

  • URL: 예) jdbc:h2:tcp://localhost/~/test
  • 이름, 비번호 등 접속에 필요한 추가 정보
  • 여기서 각각의 드라이버는 URL 정보를 체크해서 본인이 처리할 수 있는 요청인지 확인한다. 예를 들어서 URL이 jdbc:h2 로 시작하면 이것은 h2 데이터베이스에 접근하기 위한 규칙이다. 따라서 H2 드라이버는 본인이 처리할 수 있으므로 실제 데이터베이스에 연결해서 커넥션을 획득하고 이 커넥션을 클라이언트에 반환한다. 반면에 URL이 jdbc:h2 로 시작했는데 MySQL 드라이버가 먼저 실행되면 이 경우 본인이 처리 할 수 없다는 결과를 반환하게 되고, 다음 드라이버에게 순서가 넘어간다.
  1. 이렇게 찾은 커넥션 구현체가 클라이언트에 반환된다
profile
진짜 개발자가 되어보자

0개의 댓글