웹 페이지 접속 시 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 내에서 순환 처리 |