애플리케이션과 데이터베이스를 연결해보겠습니다.
참고
H2 데이터베이스를 띄어둔 상태에서 진행해야 합니다.
ConnectionConst
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 = "";
}
데이터베이스에 접속하는데 필요한 기본 정보를 편리하게 사용할 수 있도록 상수로 만들었습니다.
이제 JDBC를 사용해서 실제 데이터베이스에 연결하는 코드를 작성해봅시다.
DBConnectionUtil
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);
return connection;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
}
데이터베이스에 연결하려면 JDBC가 제공하는 DriverManager.getConnection(...)를 사용하면 됩니다. 이렇게 하면 라이브러리에 있는 데이터베이스 드라이버를 찾아서 해당 드라이버가 제공하는 커넥션을 반환해줍니다.
여기서는 H2 데이터베이스 드라이버가 작동해서 실제 데이터베이스와 커넥션을 맺고 그 결과를 반환해줍니다.
간단한 테스트 코드를 만들어서 실행해보겠습니다.
**DBConnectionUtilTest
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 connection() {
Connection connection = DBConnectionUtil.getConnection();
Assertions.assertThat(connection).isNotNull();
}
}
실행 결과
DBConnectionUtil - get connection=conn0: url=jdbc:h2:tcp://localhost/~/test
user=SA, class=class org.h2.jdbc.JdbcConnection
실행 결과를 보면 class=class org.h2.jdbc.JdbcConnection 부분을 확인할 수 있습니다. 이것이 바로 H2 데이터베이스 드라이버가 제공하는 H2 전용 커넥션입니다.
물론 이 커넥션은 JDBC 표준 커넥션 인터페이스인 java.sql.Connection 인터페이스를 구현하고 있습니다.
지금까지 코드로 확인해본 과정을 좀 더 자세히 알아봅시다.

java.sql.Connection 표준 커넥션 인터페이스를 정의한다.org.h2.jdbc.JdbcConnection 구현체를 제공한다.
JDBC가 제공하는 DriverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고, 커넥션을 획득하 는 기능을 제공합니다.
애플리케이션 로직에서 커넥션이 필요하면 DriverManager.getConnection() 을 호출한다.
DriverManager는 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다. 이 드라이버들에게 순서대로 다음 정보를 넘겨서 커넥션을 획득할 수 있는지 확인한다.
jdbc:h2:tcp://localhost/~/testjdbc:h2로 시작하면 이것은 h2 데이터베이스에 접근하기 위한 규칙이다. 따라서 H2 드라이버는 본인이 처리할 수 있으므로 실제 데이터베이스에 연결해서 커넥션을 획득하고 이 커넥션을 클라이언트에 반환한다. 반면에 URL이 jdbc:h2 로 시작했는데 MySQL 드라이버가 먼저 실행되면 이 경우 본인이 처리할 수 없다는 결과를 반환하게 되고, 다음 드라이버에게 순서가 넘어간다.저는 H2 데이터베이스 드라이버만 라이브러리에 등록했기 때문에 H2 드라이버가 제공하는 H2 커넥션을 제공받습니다. 물론 H2 커넥션은 JDBC가 제공하는 java.sql.Connection 인터페이스를 구현하고 있습니다.
출처
스프링 DB 1편 - 데이터 접근 핵심 원리(김영한)
글의 내용과 자료는 대부분 위 강의의 자료를 사용합니다.
내용을 정리하는 깃허브 링크