본문 바로가기
개발/Spring

ConnectionPool과 JPA HikariCP 개념

by meanjung 2023. 7. 9.

먼저, ConnectionPool

- 커넥션 풀은 데이터베이스와 연결된 커넥션을 미리 만들어 놓고 이를 pool로 관리하는 것이다. 즉, 필요할 때마다 커넥션 풀의 커넥션을 이용하고 반환하는 기법이다.

- WAS는 데이터베이스 커넥션이 필요할 때 직접 커넥션을 생성하지 않고, ConnectionPool Container로부터 커넥션을 하나 건네받고, 사용을 마치면 반납한다. -> DB 연결을 열고 닫는 비용을 절약할 수 있다.

 

 

ConnectionPool 장점

- 미리 커넥션을 생성하여 저장하므로, 항상 연결을 열린 상태로 유지하기 때문에 커넥션이 필요한 시점에 생성하는 시간을 소비하지 않는다.

- 커넥션 수를 제한할 수 있어서 과도한 접속으로 인한 서버 자원 고갈을 방지할 수 있다.

- 생성된 Connection을 계속 재사용하여 생성되는 커넥션의 수가 많지 않다.

 

 

ConnectionPool 동작원리 - HikariCP

- 가벼운 용량과 빠른 속도를 갖는 JDBC의 커넥션 풀 프레임워크

-  springboot는 커넥션 풀을 관리하기 위해 HikariCP를 사용한다.

- HikariCP의 동작법을 통해 커넥션 풀이 다음과 같이 동작한다.

  • Thread가 커넥션을 요청했을 때 유휴 커넥션이 존재한다면 해당 커넥션을 반환해준다.
  • 만약 유휴 커넥션이 존재하지 않는다면, HandOffQueue를 Polling하면서 다른 Thread가 커넥션을 반납하기를 기다린다.
  • 다른 Thread가 커넥션 풀에 커넥션을 반납하면 커넥션 풀은 HandOffQueue에 반납된 커넥션을 삽입하고, HandOffQueue를 Polling하던 Thread는 커넥션을 획득하게 된다.

 

ConnectionPool의 크기와 성능

- Thread 개수 < ConnectionPool 크기 -> 사용되지 않고 남는 커넥션이 생겨 메모리 낭비가 발생한다.

- WAS의 Thread의 개수 > DB의 Connection Pool의 개수 이어야 한다.

  • 애플리케이션에 대한 모든 요청이 DB에 접근하는 것이 아니기 때문이다.

- MySQL 공식 레퍼런스에서 600여명 유저를 대응하는데 15~20개의 커넥션 풀만으로도 충분하다고 언급하고 있다.

- 실제 운영 환경에서의 성능 테스트를 진행해 시스템 환경에 최적화된 값을 찾아내는 게좋다.

 

 

 

참고

https://code-lab1.tistory.com/209

댓글