프로그래밍/spring
커넥션 풀과 데이터 소스
승민아
2024. 5. 5. 09:32
우리가 DB 커넥션을 획득할때 어떤 과정을 거칠까?
- 애플리케이션은 DB 드라이버를 통해 커넥션을 조회.
- DB 드라이버는 DB와 TCP/IP 커넥션 연결을하며 이때 3-way-handshake 같은 동작들이 발생.
- DB 드라이버는 TCP/IP 커넥션 연결되면 ID/PW 같은 부가 정보들을 DB에 전달.
- DB에서 ID/PW를 통해 내부 인증을 거치며 내부에 DB 세션을 생성한다.
- DB는 DB 드라이버에게 커넥션 생성 완료를 응답.
- DB 드라이버는 커넥션 객체를 생성해서 애플리케이션(클라이언트)에 반환.
DB가 필요할때 마다 커넥션을 맺고 끊음의 반복은 시간이 많이 드는 일이다.
그래서 커넥션을 미리 생성해서 두고두고 사용하는 방법이 커넥션 풀이다.
커넥션 풀에 커넥션들은 DB와 TCP/IP 커넥션이 맺어진 상태로 보관되어 있다.
이 커넥션들을 언제든 꺼내 사용할 수 있는 상태이다.
우리는 이 커넥션을 사용하고 다시 반환하면 된다.
커넥션 풀 오픈소스에 commons-dbcp2, hikariCP등이 있으며
스프링부트 2.0부터는 커넥션 풀로 hikariCP를 사용한다.
커넥션을 획득하는 방법으로 DriverManager, 커넥션 풀을 사용하는 방법처럼 다양한 방법이 존재한다.
예를들어,
DriverManager를 통해 커넥션 획득하다가 커넥션풀을 사용하고싶다면 로직 변경이 필요하다.
이때, 코드 변경이 일어나지 않게 커넥션을 획득하는 방법을 추상화 해둔것이 DataSource(데이터 소스)이다.
HikariDataSource dataSource = new HikariDataSource();
위와 같이 HikariCP 커넥션 풀을 사용할 수 있다.
HikariDataSource는 DataSource 인터페이스를 구현하고 있다.