-
스프링 DB - DataSource 예제1 - DriverManagerData 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
'Data Base > 스프링 DB' 카테고리의 다른 글
스프링 DB - 트랜잭션 이해 (1) 2023.11.23 스프링 DB - DataSource 예제2 - 커넥션 풀 (1) 2023.11.23 스프링 DB - DataSource의 이해 (0) 2023.11.21 스프링 DB 1 - 커넥션 풀 과 데이터 소스 이해 (0) 2023.11.21 스프링 DB 1 - JDBC개발 - 수정, 삭제 (1) 2023.11.20