대량 트래픽 환경에서 데이터베이스와의 연결을 매번 새로 생성하고 종료하는 것은 비효율이다. 이때 Connection Pool(커넥션 풀)을 사용하면, 미리 일정 수의 DB 연결을 만들어두고 애플리케이션이 필요할 때마다 가져다 쓰는 구조로 효율을 크게 높일 수 있다.
🔁 Connection Pool 동작 방식
애플리케이션이 시작될 때 미리 여러 개의 DB connection을 생성하여 pool에 저장
요청이 들어오면 pool에서 하나의 connection을 꺼내 사용
사용이 끝나면 close 하는 것이 아니라 다시 pool에 반납
새로운 요청이 오면 반납된 connection을 재사용
즉, DB 연결을 재사용함으로써 생성/종료 비용을 줄이고 성능을 향상시킴.
📌 장점
매 요청마다 DB 연결을 생성/해제하지 않아도 되어 성능 향상
자원을 효율적으로 관리 가능
동시에 많은 요청을 처리할 수 있음
⚠️ 단점 및 주의점
1.정해진 pool 내에서만 connection 사용 가능
2.MySQL에선 connection이 close되어도 IDLE 상태로 남음
IDLE 상태의 커넥션이 여전히 리소스를 잡아먹을 수 있음
재연결 시에도 이 connection이 재사용될 수 있으나, 문제가 발생할 수 있음
3.MySQL 서버 재시작 시
기존 connection pool은 모두 무효화됨
pool 재생성이 필요함
4.쿼리의 크기를 제한할 수 없음
connection 단에서 실행되는 쿼리의 "규모"는 미리 알 수 없음
지나치게 무거운 쿼리가 실행되면 해당 connection이 점유되어 병목 발생 가능
spring.jpa.hibernate.ddl-auto=update # 엔티티 기반 테이블 자동 생성/수정
spring.jpa.show-sql=true # 실행되는 SQL 로그 출력
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분)