Spring_22_HikariCP

OngTK·2025년 11월 3일

Spring

목록 보기
22/25

Q. Java Spring 실행시 확인되는 hikari 은 어떤 기능을 담당하는 지 설명해주세요.


HikariPool-1 - Starting...
HikariPool-1 - Start completed.

Spring Boot 실행 시 로그에 자주 보이는 이 메시지는 HikariCP (Hikari Connection Pool) 이라는 데이터베이스 커넥션 풀(Connection Pool) 이 초기화되었다는 뜻입니다


🧩 1️⃣ HikariCP란 무엇인가?

HikariCP

“가볍고, 빠르고, 안정적인 JDBC Connection Pool 구현체”
입니다.

Spring Boot 2.x 이후부터는 기본 데이터베이스 커넥션 풀로 HikariCP가 자동 사용됩니다.
즉, 여러분이 spring.datasource.* 설정만 해두면 내부적으로 HikariCP가 커넥션을 관리합니다.


⚙️ 2️⃣ Connection Pool(커넥션 풀)의 개념

데이터베이스와 애플리케이션이 통신하려면 매번 이렇게 해야 합니다.

  1. DB 연결 (Connection open)
  2. SQL 실행
  3. 연결 종료 (Connection close)

하지만 DB 연결을 매번 새로 열고 닫는 건 굉장히 느립니다.

그래서 HikariCP는 “미리 여러 개의 Connection을 만들어두고 재사용”합니다.
이것을 Connection Pool이라 부릅니다.

🔁 작동 방식 요약

  1. 애플리케이션 시작 시 DB 커넥션 여러 개를 미리 생성 (예: 10개)
  2. 사용자가 DB 접근 → 풀에서 하나 꺼냄 (대여)
  3. SQL 실행 후 → 커넥션을 닫는 대신 풀로 반납
  4. 다음 사용자가 재사용 → “새로 연결할 필요 없음”

이 덕분에 DB 접근 속도가 수십 배 빨라집니다.


🚀 3️⃣ HikariCP의 주요 특징

항목설명
경량성(Lightweight)불필요한 기능 없이 최소한의 코드로 구성되어 매우 빠름
고성능(High performance)다른 풀(Druid, Tomcat JDBC 등) 대비 속도 우수
자동 관리Connection 누수, idle timeout 등 자동 관리
Spring Boot 기본 내장별도 설정 없이 자동 등록

🧠 4️⃣ 주요 설정 항목

→ 이는 커넥션이 부족하거나 닫히지 않아 “풀 고갈(pool exhaustion)”이 발생했다는 뜻입니다.
이 값들은 성능 조정과 안정성 확보에 중요합니다.
대규모 트래픽 환경에서는 maximum-pool-sizeconnection-timeout 을 상황에 맞게 조정합니다.

# -----------------------------------------
# 기본 데이터베이스 연결 설정
# -----------------------------------------
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# -----------------------------------------
# HikariCP (Connection Pool) 설정
# -----------------------------------------
# 풀의 이름 (로그에 표시됨)
spring.datasource.hikari.pool-name=HikariPool-1

# 최대 커넥션 수 (풀에서 동시에 유지할 수 있는 최대 DB 연결 수)
spring.datasource.hikari.maximum-pool-size=10

# 최소 유휴 커넥션 수 (DB 요청이 없을 때 유지되는 최소 연결 수)
spring.datasource.hikari.minimum-idle=5

# 커넥션이 유휴 상태로 유지될 수 있는 최대 시간 (ms)
spring.datasource.hikari.idle-timeout=600000   # 10분

# 커넥션의 전체 수명 (ms) - 오래된 커넥션은 재생성
spring.datasource.hikari.max-lifetime=1800000   # 30분

# 커넥션을 가져올 때 최대 대기 시간 (ms)
spring.datasource.hikari.connection-timeout=30000  # 30초

# 테스트 쿼리 (DB 연결 유효성 검사용)
spring.datasource.hikari.connection-test-query=SELECT 1

🔍 5️⃣ 로그 예시 해석

HikariPool-1 - Starting... HikariPool-1 - Added connection conn0: url=jdbc:mysql://localhost:3306/mydb user=root HikariPool-1 - Start completed.

의미:

  • Starting... → 풀 초기화 시작
  • Added connection conn0 → 커넥션 객체를 생성하여 풀에 추가함
  • Start completed → 초기 풀 생성 완료 (이제 DB 요청 가능)

이후 SQL 실행 중에 이런 로그도 볼 수 있습니다:

HikariPool-1 - Connection is not available, request timed out after 30000ms.

→ 이는 커넥션이 부족하거나 닫히지 않아 “풀 고갈(pool exhaustion)”이 발생했다는 뜻입니다.


✅ 6️⃣ 요약

항목설명
이름HikariCP (히카리 커넥션 풀)
역할DB 연결을 미리 만들어두고 재사용하는 커넥션 풀
장점빠름, 안정적, Spring Boot 기본 내장
로그 의미풀 생성 및 커넥션 초기화 상태를 출력
주요 설정maximum-pool-size, idle-timeout, connection-timeout 등
profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글