[Java] HikariCP | Database Connection Pool
HikariCP(Hikari Connection Pool)
JDBC DBCP(Database Connection Pool)
HikariCP는 데이터베이스 연결(Connection)을 관리해 주는 도구(라이브러리)이다.
HikariCP에서 커넥션 풀(Connection Pool)이 설정된 커넥션의 사이즈만큼 연결을 허용하며,
HTTP 요청에 대해 순차적으로 DB 커넥션을 처리해 주는 기능을 수행한다.
DBCP (Database Connection Pool)
JDBC 연결은 드라이버를 로드하고 연결하여 객체를 받아와야 하는 과정을 가진다.
이 과정은 매번 사용자가 요청할 때마다 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하는 과정이 불편하고
속도와 자원 소모에 대한 단점이 있다.
-> 이 단점을 보완하기 위해 '데이터 베이스 커넥션 풀(DBCP)'을 사용한다.
👐 커넥션 풀링 (Connection Pooling)
: 프로그램 시작 과정에서 커넥션 객체를 2개 이상 미리 생성해둔 후, 사용자 요청이 올 경우 생성해둔 객체를 바로 활용하여 요청 처리 시간을 감소시키는 방식
이러한 커넥션 풀링을 통해 효과적으로 애플리케이션의 성능을 향상시키면서 전체 리소스 접근에 대한 사용량, 부하를 줄일 수 있음
👍 데이터베이스 커넥션 풀 (DBCP: Database Connecton Pool)
: 최초 Pool 내에서 Connection들을 하여 HTTP 요청에 따라 응답을 제공하고 반환받아서 이를 재사용하는 것을 의미함
DBCP의 과정
1. 애플리케이션이 실행되면서 Pool 내에 Connection들을 생성해 둔다.
2. HTTP의 요청이 올 때 Pool 내에서 Connection 객체를 가져다가 사용한다.
3. 사용이 완료된 Connection 객체는 Pool 내에 반환한다.
HikariCP
SpringBoot는 커넥션 풀 관리를 위해 HikariCP를 사용한다.
Thread가 커넥션을 요청했을 때 유휴 커넥션이 존재한다면 해당 커넥션을 반환해준다.
만약 유휴 커넥션이 존재하지 않는다면, HandOffQueue를 Polling 하면서 다른 Thread가 커넥션을 반납하기를 기다린다. 다른 Thread가 커넥션 풀에 커넥션을 반납하면 커넥션 풀은 HandOffQueue에 반납된 커넥션을 삽입하고 HandOffQueue를 Polling 하던 Thread는 커넥션을 획득하게 된다.
https://code-lab1.tistory.com/209#google_vignette