웹 페이지 접속 시 Runtime 예외 발생
Unable to acquire JDBC Connection
[HikariPool-1 - Connection is not available, request timed out after 20000ms]
장애 현상 요약:
connection limit exceeded for non-superusers
오류 발생spring:
datasource:
hikari:
maximum-pool-size: 20 → 30
minimum-idle: 10 → 5
connection-timeout: 20000 → 30000
validation-timeout: 5000
leak-detection-threshold: 60000
KakaoService.createNewUserFromKakao()
@Transactional(readOnly = true)
추가로 커넥션 자동 반환 유도SggCodeController.findAll()
@Transactional(readOnly = true)
명시findAll()
→ findAll(PageRequest.of(0, 1))
로 메모리 과점 유발 방지항목 | 변경 전 | 변경 후 |
---|---|---|
DB 엔진 | AWS RDS (PostgreSQL) | Supabase PostgreSQL |
Max Connection | 50+ | 약 20 (플랜 제약) |
Hikari 최대 풀 크기 | 20 | 30 |
유휴 커넥션 | 10 | 5 |
Leak 감지 | 미설정 | 60초 감지 |
커넥션 풀 상태 로그 활성화
spring.datasource.hikari.pool-name=HikariPool-1
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
logging.level.com.zaxxer.hikari=DEBUG
SQL 쿼리 실행 시 바인딩된 파라미터 포함
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.type=trace
누수 탐지 로그 예시
HikariPool-1 - Connection leak detection triggered for connection ... held for 62234ms
시나리오 | 기대 결과 |
---|---|
/auth/login/kakao 요청 | 커넥션 반환 확인, leak 로그 없음 |
/api/sgg-codes 다중 호출 | 커넥션 풀이 재사용됨, 타임아웃 없음 |
대량 요청 시 커넥션 수 증가 | max 30 내에서 순환 처리 |