Connection Pool이란?

유경록·2025년 3월 25일

데이터베이스

목록 보기
1/5
post-thumbnail

대량 트래픽 환경에서 데이터베이스와의 연결을 매번 새로 생성하고 종료하는 것은 비효율이다. 이때 Connection Pool(커넥션 풀)을 사용하면, 미리 일정 수의 DB 연결을 만들어두고 애플리케이션이 필요할 때마다 가져다 쓰는 구조로 효율을 크게 높일 수 있다.


🔁 Connection Pool 동작 방식

  • 애플리케이션이 시작될 때 미리 여러 개의 DB connection을 생성하여 pool에 저장

  • 요청이 들어오면 pool에서 하나의 connection을 꺼내 사용

  • 사용이 끝나면 close 하는 것이 아니라 다시 pool에 반납

  • 새로운 요청이 오면 반납된 connection을 재사용

  • 즉, DB 연결을 재사용함으로써 생성/종료 비용을 줄이고 성능을 향상시킴.


📌 장점

  • 매 요청마다 DB 연결을 생성/해제하지 않아도 되어 성능 향상

  • 자원을 효율적으로 관리 가능

  • 동시에 많은 요청을 처리할 수 있음


⚠️ 단점 및 주의점
1.정해진 pool 내에서만 connection 사용 가능

  • 동시 접속자가 많을 경우 pool이 부족해지는 상황 발생 가능

2.MySQL에선 connection이 close되어도 IDLE 상태로 남음

  • IDLE 상태의 커넥션이 여전히 리소스를 잡아먹을 수 있음

  • 재연결 시에도 이 connection이 재사용될 수 있으나, 문제가 발생할 수 있음

3.MySQL 서버 재시작 시

  • 기존 connection pool은 모두 무효화됨

  • pool 재생성이 필요함

4.쿼리의 크기를 제한할 수 없음

  • connection 단에서 실행되는 쿼리의 "규모"는 미리 알 수 없음

  • 지나치게 무거운 쿼리가 실행되면 해당 connection이 점유되어 병목 발생 가능


JPA 설정

spring.jpa.hibernate.ddl-auto=update # 엔티티 기반 테이블 자동 생성/수정
spring.jpa.show-sql=true # 실행되는 SQL 로그 출력

HikariCP 설정

spring.datasource.hikari.maximum-pool-size=10 # 최대 커넥션 수
spring.datasource.hikari.minimum-idle=5 # 최소 유지 커넥션 수
spring.datasource.hikari.idle-timeout=30000 # Idle 커넥션 유지 시간 (30초)
spring.datasource.hikari.connection-timeout=30000 # 커넥션 요청 대기 최대 시간 (30초)
spring.datasource.hikari.max-lifetime=1800000 # 커넥션 최대 생존 시간 (30분)


profile
작은 문제도 끝까지 파고들며, 꾸준히 성장하는 백엔드 개발자를 지향합니다.

0개의 댓글