Springboot

DB 커넥션풀

25G 2023. 8. 16. 19:13

커넥션풀

db가 커넥션을 할때의 과정

  1. 애플리케이션 로직이 db드라이버를 통해 커넥션을 조회한다.
  2. db드라이버는 db와 tcp/ip 커넥션 연결을 한다.
  3. db 드라이버는 id,pw와 기타 부가 정보를 db에 전달한다.
  4. db는 id,pw를 통해 내부인증을 완료해고 내부에 db 세션을 생성한다.
  5. db는 커넥션이 생성이 완료되었다는 응답을 보낸다.
  6. db드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다.

위와같은 과정을거치기때문에 생각보다 복잡한 과정과 많은 시간이 소모 되는 일이다.
데이터베이스마다 커넥션 시간은 다 다르다.
위 와같은 문제를 해결하기 위해 생긴 방법이 커넥션 풀이다.

커넥션 풀 이해

커넥션풀은 커넥션을 미리 생성해두고 사용하는 방법이다.
보통 기본 커넥션 값은 보통 10개이다. 미리 10개를 만들어놓고 tcp/ip로 연결돼 있는 상태로 즉시 sql을 바로 db에 전달할 수 있도록 한다.
이제 애플리케이션은 이미 생성된 커넥션을 객체 참조로 그냥 가져다 쓴다.
그리고 반환을 할때 커넥션을 종료하는것이 아니라 커넥션이 살아있는 상태로 커넥션 풀에 반환해야한다.

커넥션 풀의 문제점

  • 커넥션 풀 숫자는 서비스의 특정과 애플리케이션 서버 스펙, db서버 스펙에 따라 다르기때문에 성능 테스트를 통해서 정해야 한다.
  • 직접 구현할수도 있지만 성능이 뛰어난 오픈소스 커넥션 풀이 많다.
  • 대표적인 커넥션 풀은 HikariCp등이 있다. spring2.x의 기본 커넥션풀 오픈소스이다.