ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 DB - DataSource 예제1 - DriverManager
    Data Base/스프링 DB 2023. 11. 23. 09:57

    DataSource 예제 1 - DriverMnager

    예제를 통해 DataSource를 알아보자

     

    과거 스프링 DB 게시물에서 개발했던 DriverManager를 통해 터넥션을 획득하는 방법을 확인해보자

    Connection Test - 드라이버 매니저

    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 {
    
        void driverManager() throws SQLException {
        
                Connection connection1 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                Connection connection2 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                
                //connection 객체 인스턴스 ,connection이 어떤 형인지
                log.info("get connection={}, class={}",connection1,connection1.getClass());
                log.info("get connection={}, class={}",connection2,connection2.getClass());
       
        }
    }

    dataSourceDriverManager() - 실행 결과

     

    기존 코드와 비슷하지만 DriverMnagerDataSource 객체 인스턴스는 DataSource 형(Type)으로 커넥션을 획득할 수 있다. 참고로 DriverMnagerDatasource는 자바 자체가 아닌 스프링 프레임 워크가 제공하는 구체 구현 클래스이다.

     

    파라미터 차이

    기존 DriverManager를 통해서 커넥션을 획득하는 방법과 DataSource를 통해서 커넥션을 획득하는 방법에는 큰 차이가 있다.

     

    DriverManager

    DriverManager.getConnection(URL, USERNAME, PASSWORD);
    DriverManager.getConnection(URL, USERNAME, PASSWORD);

     

    DataSource 

    void dataSourceDriverManager() throws SQLException {
            //DriverMangerDataSource - 항상 새로운 커넥션을 획득한다.
            DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
            useDataSource(dataSource);
        }
    
        private void useDataSource(DataSource dataSource) throws SQLException {
    
            Connection con1= dataSource.getConnection();
            Connection con2= dataSource.getConnection();
            log.info("connection = {} , class = {}",con1, con1.getClass());
            log.info("connection = {} , class = {}",con2, con2.getClass());
        }

     

    • DriverManager는 커넥션을 획득할 때 마다 URL, USERNAME, PASSWORD 같은 파라미터를 계속 전달해야 한다. 반면에 Datasource를 사용하는 방식은 처음 객체를 생성할 때만 필요한 파라미터를 남겨두고, 커넥션을 획득할 대는 단순히 dataSource.getConnection()만 호출하면된다.

     

    설정과 사용의 분리

    • 설정 : DataSource를 만들고 필요한 속성들을 사용해서 URL,USERNAME,PASSWORD같은 부분을 입력하는 것을 말한다. 이렇게 설정과 관련된 속성들은 한곳에 있는 것이 향후 별견에 더 유연한게 대처할 수 있다.
    • 사용 : 설정은 신경쓰지 않고, DataSource의 getConnection만 호출해서 사용하면 된다.

     

    설정과 사용의 분리

    • 이 부분이 사소해 보이지만 큰 차이를 만들어 내는데, 필요한 데이터를 DataSource가 만들어지는 시점에 미리 다 넣어두게 되면, DataSource를 사용하는 곳에서는 dataSource.getConnection()만 호출하면 되므로, URL, USERNAME, PASSWORD 같은 속성들에 의존하지 않아도 된다. 그냥 DataSource만 주입받아서, getConnection()만 호출하면 된다.
    • 쉽게 이야기해서 리포지토리(Repository)는 DataSource만 의존한고 이런 속성을 몰라도 된다.
    • 애플리케이션을 개발해보면 보통 설정은 한 곳에서 하지만 사용은 수많은 곳에서 하게 된다.
    • 덕분에 객체를 설정하는 부분과, 사용하는 부분을 좀 더 명확하게 분리할 수 있다.

     

     

    [출저 - 스프링 DB 1편 - 데이터 접긎 핵심 원리, 김영한]

    https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1

    댓글

Designed by Tistory.