H2 데이터베이스 연결하기
connectionCosnt라는 클래스 만들어서 연결 정보를 입력하자
데이터베이스에 접속하는데 필요한 기본 정보를 편리하게 사용할 수 있도록 상수로 만들었다.
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
@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);
}
}
}
데이터베이스에 연결하려면 JDBC가 제공하는 DriverManager.getConnection(..) 를 사용하면 된다
이렇게 하면 라이브러리에 있는 데이터베이스 드라이버를 찾아서 해당 드라이버가 제공하는 커넥션을 반환해준다
여기서는 H2 데이터베이스 드라이버가 작동해서 실제 데이터베이스와 커넥션을 맺고 그 결과를 반환해준다
연결이 잘 되었는지 테스트를 통해 확인해보자
DBConnectionUtilTest
@Slf4j
class DBConnectionUtilTest {
@Test
void connection() {
Connection connection = DBConnectionUtil.getConnection();
assertThat(connection).isNotNull();
}
}
실행 결과를 보면 class=class org.h2.jdbc.JdbcConnection 부분을 확인할 수 있다. 이것이 바로 H2 데이터베이스 드라이버가 제공하는 H2 전용 커넥션이다.
JDBC DriverManager 연결이해
JDBC는 java.sql.Connection 표준 커넥션 인터페이스를 정의한다.
H2 데이터베이스 드라이버는 JDBC Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection 구현체를 제공한다
DriverManager 커넥션 요청 흐름
JDBC가 제공하는 DriverManager 는 라이브러리에 등록된 DB 드라이버들을 관리하고, 커넥션을 획득하는 기능을 제공한다
- 애플리케이션 로직에서 커넥션이 필요하면 DriverManager.getConnection() 을 호출한다
- . DriverManager 는 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다. 이 드라이버들에게 순서대 로 다음 정보를 넘겨서 커넥션을 획득할 수 있는지 확인한다.
- URL: 예) jdbc:h2:tcp://localhost/~/test
- 이름, 비밀번호 등 접속에 필요한 추가 정보
- 여기서 각각의 드라이버는 URL 정보를 체크해서 본인이 처리할 수 있는 요청인지 확인한다. 예를 들어 서 URL이 jdbc:h2 로 시작하면 이것은 h2 데이터베이스에 접근하기 위한 규칙이다. 따라서 H2 드라 이버는 본인이 처리할 수 있으므로 실제 데이터베이스에 연결해서 커넥션을 획득하고 이 커넥션을 클라이언트에 반환한다
- 이렇게 찾은 커넥션 구현체가 클라이언트에 반환된다.
build.gradle에 보면 아래 코드가 적혀 있다. 스프링 프로젝트 생성할 때 H2 데이터베이스를 추가해줘서 H2 데이터베이스 드라이버 라이브러리가 제공됐다.
runtimeOnly 'com.h2database:h2' //h2-x.x.xxx.jar
'Spring > Spring DB' 카테고리의 다른 글
JDBC에 의존하는 트랜잭션을 적용하면서 나타나는 문제점 (0) | 2023.10.03 |
---|---|
트랜잭션 (1) | 2023.10.02 |
커넥션 풀과 데이터소스 이해 (0) | 2023.09.29 |
JDBC 개발 - 등록, 수정, 조회, 삭제 (0) | 2023.09.24 |
JDBC의 이해 (0) | 2023.09.24 |