HikariCP 설정
HikariCP는 빠르고 효율적인 JDBC 연결 풀입니다. Spring Boot에서 기본적으로 사용될 정도로 성능이 뛰어납니다.
1. 주요 설정 (application.properties 또는 application.yml)
- spring.datasource.url: 데이터베이스 연결 URL. 예: jdbc:mysql://localhost:3306/mydb
- spring.datasource.username: 데이터베이스 사용자 이름.
- spring.datasource.password: 데이터베이스 비밀번호.
- spring.datasource.driver-class-name: JDBC 드라이버 클래스 이름. (대부분 자동으로 감지되므로 필수는 아님)
- MySQL: com.mysql.cj.jdbc.Driver
- PostgreSQL: org.postgresql.Driver
- Oracle: oracle.jdbc.driver.OracleDriver
- spring.datasource.hikari.maximum-pool-size: 가장 중요한 설정 중 하나. 풀에서 유지할 수 있는 최대 동시 연결 수. 이 값은 애플리케이션의 동시성 요구사항과 데이터베이스 서버의 부하 처리 능력을 고려하여 신중하게 설정해야 합니다. 너무 높으면 데이터베이스에 과부하를 줄 수 있고, 너무 낮으면 병목 현상이 발생할 수 있습니다.
- spring.datasource.hikari.minimum-idle: 풀에 유지할 유휴(idle) 연결의 최소 수. 이 값을 maximum-pool-size와 동일하게 설정하면 풀은 항상 maximum-pool-size만큼의 연결을 유지하려고 합니다. 보통 maximum-pool-size보다 작게 설정하여 필요한 만큼만 연결을 유지하도록 합니다.
- spring.datasource.hikari.connection-timeout: 클라이언트가 풀에서 연결을 얻기 위해 기다리는 최대 시간(밀리초). 이 시간 내에 연결을 얻지 못하면 예외가 발생합니다. 기본값은 30000 (30초).
- spring.datasource.hikari.idle-timeout: 풀에서 유휴 연결이 풀로 반환된 후 제거되기 전에 유휴 상태를 유지할 수 있는 최대 시간(밀리초). minimum-idle보다 작은 값으로 설정해야 합니다. 기본값은 600000 (10분).
- spring.datasource.hikari.max-lifetime: 풀의 연결이 제거되기 전에 살 수 있는 최대 시간(밀리초). 데이터베이스 또는 네트워크 장치에 의한 연결 끊김을 방지하는 데 유용합니다. idle-timeout보다 약간 짧게 설정하는 것이 좋습니다. 기본값은 1800000 (30분).
- spring.datasource.hikari.pool-name: 연결 풀의 이름. 로깅 및 JMX를 통해 풀을 식별하는 데 도움이 됩니다.
- spring.datasource.hikari.auto-commit: 연결의 자동 커밋 여부. 기본값은 true. 수동 트랜잭션 관리를 위해 false로 설정할 수 있습니다.
- spring.datasource.hikari.data-source-properties: 데이터베이스 드라이버에 전달할 추가 속성. 예를 들어, MySQL의 serverTimezone=UTC 같은 설정.
2. 중요 고려사항
- 성능 최적화: HikariCP는 이미 매우 빠르지만, maximum-pool-size와 connection-timeout 설정은 애플리케이션의 성능에 직접적인 영향을 미칩니다. 실제 부하 테스트를 통해 최적의 값을 찾아야 합니다.
- 데드락 및 타임아웃 방지: connection-timeout이 너무 짧거나 maximum-pool-size가 너무 작으면 연결 부족으로 인한 예외가 발생할 수 있습니다.
- 리소스 관리: 연결 풀은 유한한 자원이므로, 모든 JDBC 작업을 try-with-resources 문을 사용하여 연결이 항상 반환되도록 해야 합니다. Spring의 JdbcTemplate이나 JPA (Hibernate)를 사용하면 이 부분은 자동으로 처리됩니다.
- 모니터링: HikariCP는 JMX를 통해 풀 상태를 모니터링할 수 있는 기능을 제공합니다. 이를 통해 현재 활성 연결 수, 유휴 연결 수 등을 확인할 수 있습니다.
- 네트워크 안정성: max-lifetime 및 idle-timeout 설정을 통해 장시간 유휴 상태이거나 네트워크 문제로 인해 끊어질 수 있는 연결을 관리할 수 있습니다.
'🍎 Backend' 카테고리의 다른 글
스프링 프레임워크 및 DB 설정 (3) | 2025.07.21 |
---|