Spring JPA에서 데이터베이스 연결 풀의 기본 값

Spring JPA에서 데이터베이스 연결 풀의 기본 값HikariCP가 기본 연결 풀로 설정되어 있으며, HikariCP의 기본 설정이 적용됩니다. Spring Boot는 2.0 버전 이후부터 HikariCP를 기본 연결 풀로 사용합니다.


HikariCP의 기본 설정 값

HikariCP의 주요 설정과 기본값은 다음과 같습니다:

설정 키 기본값 설명
maximumPoolSize 10 최대 연결 수. HikariCP가 유지할 수 있는 최대 커넥션 수.
minimumIdle same as maximumPoolSize 풀에서 유지할 최소 유휴 연결 수. 기본적으로 maximumPoolSize와 동일합니다.
idleTimeout 600000ms (10분) 유휴 연결을 유지하는 시간. 초과하면 연결이 종료됩니다. 0으로 설정하면 비활성화됩니다.
connectionTimeout 30000ms (30초) 풀에서 연결을 가져오는데 대기할 최대 시간. 이 시간 안에 연결을 가져오지 못하면 예외 발생.
maxLifetime 1800000ms (30분) 연결이 풀에서 제거되기 전 최대 수명. 데이터베이스 세션 시간 초과 값보다 작게 설정 권장.
validationTimeout 5000ms (5초) 연결 유효성 검사에 사용할 최대 시간.
autoCommit true 연결이 풀에서 반환될 때 자동 커밋 여부.

Spring Boot의 기본 연결 풀 설정 확인

Spring Boot의 기본 설정은 HikariCP의 기본값과 동일하며, application.properties 또는 application.yml에서 설정하지 않으면 위 값이 적용됩니다.

확인 방법

Spring Boot 애플리케이션에서 기본 설정을 확인하려면 다음과 같은 방식으로 로깅을 활성화하거나, 설정 값을 직접 확인할 수 있습니다:

  1. 로깅을 통해 확인
    application.properties에 다음 로깅 설정을 추가합니다:

    logging.level.com.zaxxer.hikari=DEBUG
    logging.level.org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration=DEBUG
    

    애플리케이션 시작 시 기본 연결 풀 설정이 로그로 출력됩니다.

  2. HikariDataSource Bean 확인
    애플리케이션 실행 중 HikariDataSource의 설정을 코드로 확인할 수도 있습니다:

    @RestController
    public class DataSourceController {
        @Autowired
        private DataSource dataSource;
    
        @GetMapping("/datasource-info")
        public String getDataSourceInfo() {
            HikariDataSource hikariDataSource = (HikariDataSource) dataSource;
            return String.format("Max Pool Size: %d, Min Idle: %d, Idle Timeout: %d, Max Lifetime: %d",
                    hikariDataSource.getMaximumPoolSize(),
                    hikariDataSource.getMinimumIdle(),
                    hikariDataSource.getIdleTimeout(),
                    hikariDataSource.getMaxLifetime());
        }
    }
    

기본 설정을 변경하는 방법

application.properties 또는 application.yml에서 HikariCP의 기본값을 필요에 따라 조정할 수 있습니다.

예시: application.properties

spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000 # 5분
spring.datasource.hikari.connection-timeout=10000 # 10초
spring.datasource.hikari.max-lifetime=600000 # 10

예시: application.yml

spring:
  datasource:
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      idle-timeout: 300000 # 5분
      connection-timeout: 10000 # 10초
      max-lifetime: 600000 # 10분

주의사항

  1. 적절한 연결 수 설정
    기본값(10개의 최대 연결)은 작은 규모의 애플리케이션에는 적합하지만, 동시 요청이 많은 애플리케이션에서는 병목이 발생할 수 있습니다. 예상 동시 사용자 수와 워크로드에 따라 maximumPoolSize를 늘리는 것이 중요합니다.

  2. DB 서버와의 연결 제약
    MySQL이나 다른 데이터베이스의 max_connections 설정보다 maximumPoolSize가 높으면 오류가 발생할 수 있습니다. 이 값을 데이터베이스 서버 설정과 일치시키거나 그보다 낮게 유지하세요.

  3. Connection Timeout 설정
    connectionTimeout은 풀에서 연결을 가져오지 못할 때 대기할 최대 시간입니다. 너무 짧으면 연결 부족 시 애플리케이션이 실패할 수 있고, 너무 길면 사용자 경험에 영향을 줄 수 있습니다.


요약

  • Spring JPA에서 기본 연결 풀은 HikariCP이며, 주요 기본값은:
    • 최대 연결 수 (maximumPoolSize): 10
    • 최소 유휴 연결 수 (minimumIdle): 10
    • 유휴 연결 시간 (idleTimeout): 10분
    • 최대 수명 (maxLifetime): 30분
    • 연결 대기 시간 (connectionTimeout): 30초
  • 필요에 따라 연결 풀 크기를 조정하며, 애플리케이션 요구사항과 DB 서버 설정에 맞추는 것이 중요합니다.

댓글

이 블로그의 인기 게시물

Avro + Grpc in python

dagrun_timeout of Airflow