- JDBC 42022년 07월 11일
- starryeye
- 작성자
- 2022.07.11.오후10:27
반응형DriverManager를 통하여 커넥션을 획득하는 것은.. 리소스 낭비 이다.
DriverManager에 대해 다시 한번 복습해보자..
DriverManager
JDBC가 제공한다.
라이브러리에 등록된 DB 드라이버들을 관리하며, 커넥션을 획득 할 수 있는 기능을 제공한다.
(드라이버 : DB 종류별로 JDBC의 인터페이스를 구현한 구현체)커넥션을 획득 할 때마다..
0. DriverManager.getConnection() 호출
1. DriverManager는 DB 드라이버에게 DB와 TCP/IP로 커넥션을 연결
2. DB 드라이버는 ID, Password등 부가 정보를 전달한다.
3. DB는 부가정보로 인증을 하고, DB 세션을 생성한다.
4. 커넥션 생성 완료
5. DB 드라이버는 커넥션 객체를 생성하여 반환
위와 같은 작업을 하는데.. DB와 서버 모두 리소스 낭비가 상당할 거라고 생각 된다.
커넥션 풀
스레드 풀 개념과 동일하게..
커넥션을 미리 생성해놓고 사용하는 개념이다.
애플리케이션 시작 시점에 필요한 만큼 커넥션을 미리 생성해두고 하나씩 꺼내쓰고 반환 하는 방식이다.
(각 커넥션은 TCP/IP로 연결되어 있는 상태가 유지된다.)
대표적인 커넥션 풀 오픈소스 : HikariCP (스프링 부트 기본 제공)
자.. 여기서..
커넥션을 얻는 방법은
커넥션 풀을 사용하는 방식과 (오픈소스 커넥션 풀은 HikariCP 말고도 다양하다..)
직전 포스팅에서 사용한 DriverManager를 직접 사용하는 방식이 존재한다.
-> 개발자 입장에서..
-> DriverManager를 사용하다가.. 커넥션 풀 방식으로 바꾸거나
-> 다른 오픈소스를 사용하는 상황이 생길 수 있다.
그러면 또..
구현체에 의존하는 현상이 생기며... 방식을 바꿀때마다.. 코드를 많이 변경 해야한다...
이를 해결 하기 위해..
DataSource라는 인터페이스가 생겼다.
DataSource
애플리케이션 로직은 앞으로 DataSource 인터페이스를 의존하도록 하자..
기존의 DriverManager는 DriverManagerDataSource라는 구현체로 구현해두었다.
HikariCP는 DataSource를 implements하여 HikariDataSource라는 구현체를 만들었다.
...
DataSource 인터페이스 구현체
DriverManagerDataSource (기존 DriverManager를 대체할 수 있다.)
HikariDataSource
등
따라서..
보통 DataSource를 사용하는 곳은 repository이다..
repository의 생성자에 원하는 datasource 구현체를 의존주입 하는 방식으로..
사용부가 아닌.. 설정부로 분리하여 컨트롤한다.
(DI, OCP)
반응형다음글이전글이전 글이 없습니다.댓글