ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 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드라이버들ㅇ을 관리하고, 커넥션을 획득하는 기능을 제공한다.

     

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

    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

     

    스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

    백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 백엔

    www.inflearn.com

     

    댓글

Designed by Tistory.