-
스프링 DB - 데이터베이스 연결Data Base/스프링 DB 2023. 11. 20. 13:30
데이터베이스 연결
애플리테이션과 데이터베이스를 연결해 보자
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); //connection 객체 인스턴스 ,connection이 어떤 형인지 log.info("get connection={}, class={}",connection,connection.getClass()); 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.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.sql.Connection; @Slf4j class DBConnectionUtilTest { @Test void connection(){ Connection connection = DBConnectionUtil.getConnection(); Assertions.assertNotNull(connection); } }
실행결과
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 인터페이스를 구현하고 있다.
JBDC DriverMnager연결 이해
지금까지 코드로 확인해본 과정을 좀 더 자세히 알아 보자
JDBC 커넥션 인터페이스 구현
- JDBC java.sql.Connection 표준 커넥션 인터페이스를 정의한다.
- H2 데이터베디스 드라이버는 JDBCConnection 인터페이스를 구현한 org.h2.JdbcConnection 구현제를 제공한다.
DriverManager 커넥션 요청 흐름
JDBC가 제공하는 DriverManager는 라이브러리에 등록된 DB드라이버들ㅇ을 관리하고, 커넥션을 획득하는 기능을 제공한다.
- 애플리케이션 로직에서 커넥션이 필요하면 DriverManager.getConnection()을 호출한다.
- DriverManager는 라이브러리에 등록된 드라이버 목록을 자동으로 인식한다. 이 드라이버들에게 순서대로 다음 정보를 넘겨서 커넥션을 획득할 수 있는지 확인한다.
- URL: 예) jdbc:h2:tcp://localhost/~/test
- 이름,비밀번호 등 접속에 필요한 추가 정보
- 여기서 각각의 드라이버는 URL 정보를 체크해서 본인이 처리할 수 있는 요청인지 확인한다. 예를 들어서 URL이 jdbc:h2로 시작하면 이것은 h2데이터베이스에 접근하기 위한 규칙이다. 따라서 H2 드라이버는 본인이 연결을 처리할 수 있으므로 실제 데이터베이스 연결해서 커넥션을 획득하고 이 커넥션을 클라이언트에 반환한다. 반면에 URL이 jdbc:h2로 시작했는데 MySQL 드라이버가 먼저 실행되면 이 경우 본인이 연결을 처리할 수 없다는 결과를 반환하게 되고, 다음 드라이버에게 순서가 넘어간다.
- 이렇게 찾은 커넥션 구현체가 클라이언트에게 반환된다.
H2데이터베이스 드라이버만 라이브러리에 등록했기 때문에 H2드라이버가 제공하는 H2커넥션을 제공받는다. 물론 이 H2 커넥션은 JDBC가 제공하는 java.sql.Connection 인터페이스를 구현하고 있다.
H2 데이터베이스 드라이버 라이브러리
```groovy runtimeOnly 'com.h2.database:h2' //h2-x.x.xxx.jar ```
[출저 - 스프링 DB 1편 - 데이터 접긎 핵심 원리, 김영한]
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1
'Data Base > 스프링 DB' 카테고리의 다른 글
스프링 DB 1 - JDBC개발 - 수정, 삭제 (1) 2023.11.20 스프링 DB - JDBC 개발 - 조회 (0) 2023.11.20 스프링 DB - JDBC개발 - 등록 (1) 2023.11.20 스프링 DB - JDBC와 최신 데이터 접근 기술 (1) 2023.11.20 스프링 DB1 - JDBC 이해 (1) 2023.11.20