본문 바로가기

강의 내용 정리/Spring DB 1

2-5. DataSource 적용

MemberRepositoryV1, MemberRepositoryV1Test 를 수정해보자.

 

 

 

 

MemberRepositoryV1

똑같이 복사하여 MemberRepositoryV1을 만들고 DataSource 를 주입받자.

 

 

 

 

getConnection 메서드를 커넥션 풀에서 가져온 커넥션을 반환하도록 변경

getConnection() 을 커넥션 풀에서 가져오게 수정하자.

 

dataSource에서 getConnection으로 커넥션을 가져와 사용하자.

 

 

 

 

close 메서드를 JdbcUtils 를 이용하여 변경

이렇게 바꿔주자! 역순으로 닫아준다.

-> 내부적으로 원래 처럼 try catch 로 짜져 있겠지?

closeResultSet 만 보자면 우리가 구현 한 것과 똑같이 구현되어있다.

 

 

 

 

 

 

 

MemberRepositoryV1Test - DriverManagerDataSource

DriverManagerDataSource를 사용했기 때문에 매번 새로운 커넥션을 맺는다.

-> 1. Creating new JDBC... 문구

-> 2. con1, con2, con3, con4 ..... 문구

로 확인가능.

 

 

DriverManagerDataSource 쓰는 방법 : 속도가 느리다. -> 커넥션 풀을 쓰자.

 

 

 

 

 

 

MemberRepositoryV1Test  - DataSource

 

이렇게 바꿨다. -> new HikariDataSource를 DataSource 인터페이스로 받을 수도 있지만 DataSource인터페이스에는 .setJdbcUrl, .setUsername, .setPassword 메서드가 없으므로 MemberRepositoryV1의 인수로 넣어줄 때 DataSource로 받는다.

 

 

히카리 프록시객체가 모두 다른 건 알겠는데 왜 감싸고 있는 Jdbc Connection이 다 conn0  이지????

 

우리가 지금 save, findById, update 메서드 에서 는 각각 마지막에 finally 구문을 통해 close 해주고 있다.

 

이때 closeConnection을 할 경우 Connection Pool의 경우 커넥션을 닫는게 아니라 Pool에 반환한다.

-> 실제 커넥션을 wrapping하고 있는 히카리 프록시 객체에 closeConnection 시 실제 커넥션 닫지않고 Pool에 반환하는 로직이 있음.

 

conn0을 썼다 반환 썼다 반환..... 반복 (히카리 객체의 주소는 다 다르다.)

왜 다르지? -> 매번 커넥션 요청에 반환할 때마다 새로 wrapping해서 반환해줌

 

 

 

 

 

 

최종 결론

 

 

 

 

 

 

 

DataSource는 "커넥션을 획득하는 방법"을 추상화

 

 

 

 

 

 

 

 

 

 

 

 

 

# 본 게시글은 인프런 김영한님의 강의를 수강 후 반복학습을 위해 정리한 내용입니다.

 

 

꾸준히 다시보자.

 

1. 221014

2. 221031

Recent Posts
Popular Posts
Recent Comments