반응형

오늘은 Spring Boot에서 데이터베이스 연결 풀(Connection Pool)을 설정하고, 기본 제공되는 HikariCP를 활용하는 방법에 대해 알아보겠습니다. 연결 풀은 데이터베이스와의 연결 성능을 최적화하여 애플리케이션의 응답 속도를 개선하는 데 중요한 역할을 합니다.


1. 연결 풀(Connection Pool) 이해

(1) 연결 풀이란?

데이터베이스와의 연결은 비용이 많이 드는 작업입니다. 연결 풀은 미리 데이터베이스 연결을 생성해두고, 요청이 올 때 재사용하여 성능을 최적화하는 기술입니다.

(2) Spring Boot의 기본 연결 풀

Spring Boot 2.x부터는 HikariCP가 기본 연결 풀로 설정되어 있습니다. HikariCP는 속도와 경량성으로 널리 사용되는 연결 풀 라이브러리입니다.


2. HikariCP 의존성 확인

Spring Boot Starter를 사용하면 HikariCP가 자동으로 포함됩니다. 별도로 추가 작업이 필요하지 않습니다.


3. HikariCP 설정

(1) application.properties 설정

# 데이터베이스 설정
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# HikariCP 설정
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=2
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=20000

(2) 주요 설정 옵션 설명

속성 설명

maximum-pool-size 최대 연결 수 (기본값: 10)
minimum-idle 최소 유휴 연결 수
idle-timeout 유휴 상태에서 연결을 유지하는 최대 시간 (기본값: 600000ms)
max-lifetime 연결의 최대 수명 (기본값: 1800000ms)
connection-timeout 연결 요청 대기 시간 (기본값: 30000ms)

4. HikariCP 모니터링

HikariCP는 내부적으로 모니터링을 제공합니다. 로깅을 통해 연결 풀의 상태를 확인할 수 있습니다.

(1) 로그 레벨 설정

application.properties에서 로깅 레벨을 설정합니다.

logging.level.com.zaxxer.hikari=DEBUG

5. 커스텀 설정과 Connection Test

(1) Connection Test Query 설정

HikariCP는 기본적으로 SELECT 1을 사용하여 연결 상태를 확인합니다. 이를 커스터마이징할 수도 있습니다.

spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL

(2) HikariCP의 커스텀 Bean 등록

필요한 경우 Java Config를 통해 HikariCP 설정을 확장할 수 있습니다.

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        config.setUsername("root");
        config.setPassword("1234");
        config.setMaximumPoolSize(10);
        config.setMinimumIdle(2);
        config.setIdleTimeout(30000);
        config.setMaxLifetime(1800000);
        return new HikariDataSource(config);
    }
}

6. 실시간 모니터링

Spring Boot Actuator를 활용하여 연결 풀 상태를 실시간으로 모니터링할 수 있습니다.

(1) 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(2) 활성화

application.properties에 Actuator 엔드포인트를 활성화합니다.

management.endpoints.web.exposure.include=*

(3) HikariCP 상태 확인

Actuator 엔드포인트 /actuator/metrics/hikaricp.connections를 호출하여 연결 풀 상태를 확인할 수 있습니다.


7. 테스트

(1) 대량 요청 시 성능 확인

HikariCP를 설정한 후, 데이터베이스에 다수의 동시 요청을 보내 연결 풀이 성능을 확인합니다.

(2) 로깅 확인

디버그 로그를 통해 연결 풀이 제대로 작동하는지 확인합니다.


8. 실습 결과

Spring Boot에서 HikariCP를 사용해 데이터베이스 연결 풀이 설정되었습니다. 이를 통해 성능을 최적화하고, 안정적으로 데이터베이스 연결을 관리할 수 있습니다.

반응형

+ Recent posts