커넥션 풀
커넥션을 획득할 때는 DB 드라이버에 커넥션 조회, TCP/IP 연결, 인증 정보 전달, 내부 인증, DB 세션 생성, 응답 결과, 커넥션 객체 생성 등 복잡한 과정을 거치는데 이는 클라이언트 응답 속도에 큰 영향을 준다. 이러한 문제를 해결하기 위해 커넥션을 미리 생성해두고 사용하는 커넥션 풀이라는 방법이 있는데 애플리케이션 시작 시점에 일정 커넥션을 미리 확보해서 풀에 보관하는 것이다.
커넥션 풀에 보관중인 커넥션은 TCP/IP로 DB와 커넥션 연결이 되어 있는 상태로 애플리케이션은 커넥션 풀에 있는 커넥션을 조회해서 객체 참조로 가져다 사용하고 로직 종료 시 반환하는데 이때 커넥션은 살아있는 상태로 커넥션 풀에 반환해야 한다.
대표적인 커넥션 풀 오픈 소스로는 스프링 부트에서 기본으로 제공하는 HikariCP가 있다.
DataSource
이전 JDBC로 커넥션을 직접 획득할 때는 DriverManager를 통해 커넥션을 생성했는데 커넥션 풀을 사용할 경우 커넥션이 풀이 직접 커넥션을 생성한다. 문제는 DriverManager를 사용해서 커넥션을 획득하다가 커넥션 풀로 바꾸는 경우 의존 관계가 DriverManager에서 HikariCP로 바뀌기 때문에 애플리케이션 코드도 전부 바꿔야 되는 점이다.
자바에서는 이러한 문제를 해결하기 위해 DataSource 인터페이스를 제공하는데 DataSource는 커넥션을 획득하는 방법을 추상화한 인터페이스로 핵심 기능은 커넥션 조회 기능이다. DataSource를 생성하는 시점에 필요한 설정을 해두면 DataSource를 사용할 때는 getConnection() 만 호출하면 되기 때문에 설정과 사용을 분리할 수 있다.
HikariCP 커넥션 풀은 DataSource 인터페이스를 구현한 HikariDataSource를 사용하는데 커넥션 풀에 커넥션을 채우는 것은 상대적으로 시간이 오래 걸리기 때문에 HikariDataSource는 애플리케이션 실행 속도에 영향을 주지 않기 위해 별도의 쓰레드에서 커넥션을 생성한다.
'데이터베이스' 카테고리의 다른 글
[DB 접근 기술2] MyBatis 기본 문법 (0) | 2022.06.22 |
---|---|
[DB 접근 기술1] 스프링 데이터베이스 예외 추상화 (0) | 2022.06.19 |
[DB 접근 기술1] 스프링 트랜잭션 (0) | 2022.06.19 |
[DB 접근 기술1] 트랜젝션(Transaction) 기초 (0) | 2022.06.19 |
[DB 접근 기술1] JDBC (0) | 2022.06.18 |