728x90
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 = "";
}
JDBC를 사용하여 DB와 연결
@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);
}
}
}
- 라이브러리에 있는 데이터베이스 드라이버를 찾아서 해당 드라이버가 제공하는 커넥션을 반환해준다. 여기서는 H2 데이터베이스 드라이버가 작동해서 실제 데이터베이스와 커넥션을 맺고 그 결과를 반환해준다
Test
@Slf4j
public class DBConnectionUtilTest {
@Test
public void connection(){
Connection connection = DBConnectionUtil.getConnection(); //구현체로 DB의 구현체를 반환한다.
assertThat(connection).isNotNull();
}
}
- 실행 결과를 보면 class=class org.h2.jdbc.JdbcConnection 부분을 확인할 수 있다. 이것이 바로 H2 데이터베이스 드라이버가 제공하는 H2 전용 커넥션이다. 물론 이 커넥션은 JDBC 표준 커넥션 인터페이스인 java.sql.Connection 인터페이스를 구현하고 있다
DriverManager 커넥션 요청 흐름

JDBC가 제공하는 DriverManager는 라이브러리에 등록된 DB 드라이버들을 관리하고, 커넥션을 획득하는 기능을 제공한다
- 애플리케이션 로직에서 커넥션이 필요하면 DriverManager.getConnection() 을 호출한다.
- . DriverManager 는 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다. 이 드라이버들에게 순서대로 다음 정보를 넘겨서 커넥션을 획득할 수 있는지 확인한다.
- URL
- 이름, 비밀번호 등 접속에 필요한 추가 정보
- 여기서 각각의 드라이버는 URL 정보를 체크해서 본인이 처리할 수 있는 요청인지 확인한다
- 예를 들어서 URL이 jdbc:h2 로jdbc:h2로 시작하면 이것은 h2 데이터베이스에 접근하기 위한 규칙이다. 따라서 H2 드라이버는 본인이 처리할 수 있으므로 실제 데이터베이스에 연결해서 커넥션을 획득하고 이 커넥션을 클라이언트에 반환한다. 반면에 URL이 jdbc:h2로 시작했는데 MySQL 드라이버가 먼저 실행되면 이 경우 본인이 처리할 수 없다는 결과를 반환하게 되고, 다음 드라이버에게 순서가 넘어간다.
- 찾은 커넥션 구현체를 클라이언트에 반환한다.
728x90
'스프링 DB 1편(데이터 접근 핵심 원리)' 카테고리의 다른 글
| Ch01. JDBC 이해 - JDBC 개발(조회) (0) | 2022.04.23 |
|---|---|
| Ch01. JDBC 이해 - JDBC 개발(등록) (0) | 2022.04.23 |
| Ch01. JDBC 이해 - JDBC와 최신 데이터 접근 기술 (0) | 2022.04.23 |
| Ch01. JDBC 이해 - JDBC 이해 (0) | 2022.04.23 |
| Ch01. JDBC 이해 - 프로젝트 생성 & H2 데이터베이스 설정 (0) | 2022.04.23 |