
영상 -> 음성 변환 메소드 배포 이후, 네이버 로그인 기능이 정상적으로 작동하지 않는 문제가 발생했다. 로그를 분석한 결과 다음과 같은 오류 메시지가 확인되었다.
SQL Error: 0, SQLState: null HikariPool-1 - Connection is not available, request timed out after 30001ms (total=0, active=0, idle=0, waiting=0)
| 항목 | 의미 |
|---|---|
SQL Error: 0 | JDBC 레벨의 SQL 에러 코드. 0은 SQL 문 자체의 문제라기보단 커넥션 풀 등 외부 요인에서 발생한 예외임을 의미함. |
SQLState: null | SQL 표준 상태 코드. null이면 SQL 스펙의 에러가 아니라 드라이버 또는 풀 내부에서 발생한 예외일 가능성이 높음. |
HikariPool-1 | 해당 오류가 발생한 HikariCP 커넥션 풀의 이름. 기본 설정에서는 HikariPool-1이 자동으로 지정됨. |
Connection is not available | 현재 커넥션 풀에 사용 가능한 커넥션이 없어 할당할 수 없는 상태. |
request timed out after 30001ms | 커넥션을 얻기 위해 최대 30초 동안 대기했지만 커넥션을 확보하지 못해 타임아웃된 상태. |
total=0 | 커넥션 풀에 존재하는 총 커넥션 수가 0. 커넥션 생성 실패, 반환 누락, DB 연결 문제 등으로 인해 발생 가능. |
active=0 | 현재 사용 중인(active) 커넥션 수. 0이므로 사용 중인 커넥션 없음. |
idle=0 | 즉시 할당 가능한 유휴 커넥션 수. 없음. |
waiting=0 | 커넥션을 기다리는 쓰레드 수. 타임아웃 직후 상태이므로 0. 실제로는 요청 당시 대기 쓰레드가 존재했을 가능성 있음. |
이는 HikariCP 커넥션 풀 내에서 사용 가능한 커넥션이 전혀 없는 상태에서 커넥션 요청이 일정 시간 내에 처리되지 않아 발생한 타임아웃 예외다.
HikariCP(Hikari Connection Pool)는 Java 기반 웹 애플리케이션에서 데이터베이스 커넥션 풀(Connection Pool)을 관리하기 위한 라이브러리다.
Spring Boot에서는 기본 데이터소스 커넥션 풀로 HikariCP를 채택하고 있다 (2.0 이상부터 기본값).
| 항목 | 내용 |
|---|---|
| 성능 | 업계 최고 수준의 속도와 경량성. 벤치마크상 가장 빠른 커넥션 풀 중 하나로 평가됨. |
| 최소 설정 | 별도 설정 없이도 기본값으로 안정적으로 동작함. |
| JDBC4 이상 지원 | JDBC4, 4.1, 4.2 이상을 공식 지원. |
| 모니터링 | 커넥션 사용량, 누수 추적, 풀 상태 등 모니터링 기능 내장. |
| Spring Boot 통합 | spring-boot-starter-data-jpa, spring-boot-starter-jdbc 등을 사용할 경우 자동으로 적용됨. |
application.yml 기준)spring:
datasource:
hikari:
maximum-pool-size: 20 # 최대 커넥션 수
minimum-idle: 5 # 최소 유휴 커넥션 수
idle-timeout: 600000 # 유휴 커넥션 유지 시간 (기본: 10분)
connection-timeout: 30000 # 커넥션 요청 시 최대 대기 시간 (기본: 30초)
max-lifetime: 1800000 # 커넥션의 최대 생존 시간 (기본: 30분)
total=0, active=0, idle=0 이므로 풀에 등록된 커넥션 자체가 존재하지 않거나, 생성된 커넥션들이 예외 발생 등으로 인해 소멸되어 유실된 것으로 추정된다. 이 경우 커넥션 풀은 새로운 커넥션을 생성하지 않거나, 생성이 지연되고, 동시에 들어오는 커넥션 요청을 처리할 수 없게 된다.
가능한 원인 중 하나는 maximumPoolSize 값이 기본값인 10으로 설정되어 있어, 음성 변환 메소드 등에서 지속적으로 DB 커넥션을 점유하고 반환하지 않는 구조로 인해 커넥션이 고갈되었을 가능성이다.
이에 다음과 같이 설정을 수정하였다.
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
maximum-pool-size를 20으로 확장하였다. 해당 설정 반영 후 재실행하자, 네이버 로그인 기능이 정상적으로 작동하였다.
이 문제를 통해, 커넥션 풀 설정은 단순히 수치를 조정하는 수준을 넘어, 서비스 구조와 트래픽 특성에 맞춰 신중하게 설계되어야 한다는 점을 확인할 수 있었다. 특히 비동기 처리, 외부 API 연동, 대량의 트랜잭션이 발생하는 메소드가 존재하는 경우, 커넥션 풀 사용 전략을 재점검할 필요가 있다.