Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SpringBoot
- Greedy
- java
- 인프런
- kotlin
- Exception
- db
- 백준
- 자바
- 그리디
- 스프링 핵심 원리
- pointcut
- springdatajpa
- 알고리즘
- 스프링 핵심 기능
- 스프링
- Spring Boot
- 김영한
- http
- AOP
- JDBC
- Thymeleaf
- QueryDSL
- spring
- Android
- Servlet
- jpa
- Proxy
- JPQL
- transaction
Archives
- Today
- Total
개발자되기 프로젝트
DriverSource 예제1-Driver Manager 본문
ConnectionTest - 드라이버 매니저
@Test
void driverManager() throws SQLException {
Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
log.info("connection={}, class={}",con1, con1.getClass());
log.info("connection={}, class={}",con2, con2.getClass());
}
ConnectionTest - 데이터소스 드라이버 매니저 추가
스프링이 제공하는 DataSource 가 적용된 DriverManager 인 DriverManagerDataSource 를 사용
@Test
void dataSourceDriverManager() throws SQLException {
//DriverManagerDataSource = 항상 새로운 커넥션을 획득
DataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
userDataSource(dataSource);
}
private void userDataSource(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());
}
기존 코드와 비슷하지만 DriverManagerDataSource 는 DataSource 를 통해서 커넥션을 획득할 수 있다.
참고로 DriverManagerDataSource 는 스프링이 제공하는 코드이다.
파라미터 차이
기존 DriverManager 를 통해서 커넥션을 획득하는 방법과 DataSource 를 통해서 커넥션을 획득하는
방법에는 큰 차이가 있다.
드라이버 매니저
Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DataSource
@Test
void dataSourceDriverManager() throws SQLException {
//DriverManagerDataSource = 항상 새로운 커넥션을 획득
DataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
userDataSource(dataSource);
}
private void userDataSource(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의 경우 connection을 획득할 때 마다 URL, USERNAME, PASSWORD를 전달한다.
반면 DataSource를 사용하는 경우 DataSource를 생성 시에만 정보를 전달한다.
이후 Connection획득시에는 정보를 전달하지 않는다.
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편 - 데이터 접근 핵심 원리' 카테고리의 다른 글
DataSource 적용 (0) | 2022.05.29 |
---|---|
DataSource 예제2-커넥션 풀 (0) | 2022.05.29 |
Data Source 이해 (0) | 2022.05.29 |
커넥션 풀 이해 (0) | 2022.05.29 |
JDBC 개발 - 수정, 삭제 (0) | 2022.05.28 |
Comments