반응형
MySQL을 사용하는 Java 애플리케이션에서는 매번 DB에 새로 연결하면 큰 성능 저하가 발생한다.
이때 반드시 필요한 것이 바로 커넥션 풀(Connection Pool)이다.
이 글에서는 커넥션 풀의 기본 개념부터 HikariCP 실무 설정 예시까지 자세히 정리한다.

💡 커넥션 풀이란?
커넥션 풀은 DB 연결(Connection)을 미리 만들어두고 재사용하는 기법이다.
사용자 요청이 들어올 때마다 새로 연결하는 것이 아니라,
미리 확보한 연결 중 하나를 빌려주고 사용 후 다시 반납하는 구조다.
커넥션 풀의 핵심 이점
- 성능 향상: 연결 생성/해제 비용 감소
- 안정성 향상: 커넥션 수 제한으로 DB 과부하 방지
- 재사용 가능: 매번 연결하지 않아 애플리케이션 부하 감소
반응형
🔧 대표적인 커넥션 풀 종류
| 커넥션 풀 | 특징 |
| HikariCP | Spring Boot 기본값, 경량/고성능, 설정 단순 |
| Tomcat JDBC | Tomcat 내장, 유연한 설정 가능 |
| Apache DBCP2 | 다양한 설정 지원, 다소 무거움 |
| c3p0 | 예전부터 쓰이던 방식, 최근엔 사용 줄어듦 |
실무에서는 대부분 HikariCP를 사용한다. 빠르고 안정적이며 Spring Boot와 궁합이 좋다.
⚙️ HikariCP 실무 설정 예시
application.yml 예시:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Seoul
username: myuser
password: mypass
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 600000
max-lifetime: 1800000
connection-timeout: 30000
pool-name: MyHikariPool
주요 옵션 설명
| 옵션명 | 의미 |
| maximum-pool-size | 동시에 유지할 최대 커넥션 수 (기본: 10) |
| minimum-idle | 최소한 유지할 유휴 커넥션 수 |
| idle-timeout | 유휴 커넥션을 회수할 시간(ms) |
| max-lifetime | 커넥션의 최대 수명 (DB의 wait_timeout보다 짧게 설정) |
| connection-timeout | 커넥션 가져오기 대기 시간 초과(ms) |
| pool-name | 로그에 표시될 풀 이름 |
🧪 커넥션 풀 튜닝 실전 팁
- 사용자 수가 많을수록 maximum-pool-size를 늘려야 한다
- max-lifetime은 MySQL의 wait_timeout보다 짧게 설정 (예: 30분 = 1800000ms)
- HikariCP는 내부적으로 FastPath + ConcurrentBag 구조로 성능이 매우 우수함
- 커넥션 누수를 방지하려면 Connection을 반드시 close() 해야 함
반응형
🧠 커넥션 풀 동작 흐름 이해
- 서버 시작 시 커넥션 풀은 최소 개수만큼 연결을 확보
- 사용자가 DB 접근 시 사용 가능한 커넥션을 할당
- 사용 후 반납되면 커넥션 풀로 돌아감
- 커넥션 수요가 급증하면 최대 수까지 자동 증가
- 유휴 상태가 길면 자동으로 커넥션이 회수됨
🚫 실무에서 흔한 오류
| 문제 | 원인 | 해결책 |
| Too many connections | 커넥션 풀 사이즈 과다 또는 커넥션 미반납 | close() 누락 여부 점검, max pool 사이즈 조정 |
| Connection is closed 오류 | max-lifetime이 wait_timeout보다 큼 | max-lifetime을 더 짧게 설정 |
| DB 부하 급증 | 모든 커넥션이 활성화됨 | minimum-idle 설정 조절, 쿼리 최적화 |
✅ 정리 요약
- 커넥션 풀은 고성능 애플리케이션의 기본 인프라
- Spring Boot에서는 HikariCP가 가장 보편적이고 빠름
- 튜닝 포인트는 maximum-pool-size, max-lifetime, connection-timeout
- 커넥션 누수 방지를 위한 코드 습관이 가장 중요함
다음 글에서는 커넥션 타임아웃 설정 및 오류 해결법을 다룰 예정이니 연결해서 보면 좋다.
📘 공식 문서 참고
반응형
'DB' 카테고리의 다른 글
| [MySQL] (연결최적화6️⃣) 실무 연결 설정 체크리스트 총정리 (1) | 2025.07.19 |
|---|---|
| [MySQL] (연결최적화5️⃣) 커넥션 누수 원인 진단과 해결 전략 (1) | 2025.07.18 |
| [MySQL] (연결최적화4️⃣) 트랜잭션 전파 방식과 커넥션 이슈 분석 (0) | 2025.07.18 |
| [MySQL] (연결최적화3️⃣) 커넥션 타임아웃 설정과 오류 해결법 (0) | 2025.07.18 |
| [MySQL] (연결최적화1️⃣) JDBC 드라이버 설정 핵심 옵션 정리 (0) | 2025.07.18 |
| [MySQL] (GIS6️⃣) 실무에서 자주 쓰는 공간 쿼리 예제 모음 (0) | 2025.07.18 |
| [MySQL] (GIS5️⃣) ST_Distance로 거리 계산하는 방법과 주의사항 (0) | 2025.07.18 |
| [MySQL] (GIS4️⃣) 공간 인덱스의 원리와 설정 방법 (1) | 2025.07.18 |