멀티 데이터소스 환경에서 @ConfigurationProperties가 필수인 이유

Yu Seong Kim·2025년 12월 9일

SpringBoot

목록 보기
31/33
post-thumbnail

Spring Boot에서 두 개 이상의 데이터베이스(DataSource) 를 사용할 때, @ConfigurationProperties는 사실상 필수라고 할 수 있습니다. 이유는 크게 네 가지입니다.

1. 데이터소스별 설정을 완전히 분리할 수 있다

멀티 데이터소스 환경에서는 보통 아래처럼 여러 DB 설정이 존재합니다.

spring:
  datasource:
    main:
      hikari:
        jdbc-url: jdbc:mysql://localhost:3306/main
        username: main_user
        password: main_pw
        maximum-pool-size: 10

    log:
      hikari:
        jdbc-url: jdbc:mysql://localhost:3306/log
        username: log_user
        password: log_pw
        maximum-pool-size: 3

각 DB는:

URL
사용자 정보
pool-size
connection-timeout
driver-class-name

등이 모두 다릅니다.

@ConfigurationProperties(prefix = "...") 를 사용하면
각 데이터소스가 자신의 설정만 정확하게 로드하도록 분리할 수 있습니다.


2. DataSourceBuilder가 자동으로 값을 바인딩해준다

멀티 데이터소스에서 다음과 같은 코드가 자주 등장합니다.

@Bean("mainDataSource")
@ConfigurationProperties(prefix = "spring.datasource.main.hikari")
public DataSource mainDataSource() {
    return DataSourceBuilder.create().build();
}

이 한 줄로 다음 모든 값이 자동으로 설정됩니다.

jdbc-url
username
password
connection pool 설정
driver-class-name
idle-timeout 등

만약 @ConfigurationProperties 없이 하드코딩한다면?

HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/main");
ds.setUsername("main_user");
ds.setPassword("main_pw");
ds.setMaximumPoolSize(10);
ds.setIdleTimeout(300000);
...

데이터소스가 3개면 잡아야 할 설정 항목이 3배로 늘어납니다.

설정 파일(yml)만으로 환경을 유연하게 교체할 수 있다

멀티 데이터소스는 운영/개발/로컬 환경에서 DB가 다릅니다.

@ConfigurationProperties는 단순히 prefix를 따라 yaml 설정만 바꾸면 되기 때문에,
환경마다 코드 수정 없이 즉시 적용됩니다.

예)
-dev.yml → 개발 DB
-prod.yml → 운영 DB
-test.yml → 테스트 DB

각 환경에 따른 DB 전환이 매우 쉬워집니다.

설정이 많고 구조가 복잡한 HikariCP에 특히 필수적이다

멀티 데이터소스에서는 보통 HikariCP를 사용합니다.
HikariCP에는 다음과 같은 매우 많은 설정 항목이 있습니다.

pool-name
connection-timeout
idle-timeout
max-lifetime
minimum-idle
maximum-pool-size
initialization-fail-timeout
validation-timeout
connection-test-query

만약 이런 설정을 코드로 모두 작성하면 유지보수성이 크게 떨어집니다.

하지만 @ConfigurationProperties를 사용하면
HikariCP 관련 모든 값이 자동 매핑됩니다.

동일한 구조의 설정을 여러 DB에 재사용할 수 있다

멀티 데이터소스 환경에서는 아래처럼 "패턴"이 반복됩니다.

spring:
  datasource:
    main:
      hikari:
        ...
    log:
      hikari:
        ...
    analytics:
      hikari:
        ...

각각을 다음처럼 구성할 수 있습니다.

@ConfigurationProperties(prefix = "spring.datasource.main.hikari")
@Bean("mainDataSource")
public DataSource mainDataSource() { ... }

@ConfigurationProperties(prefix = "spring.datasource.log.hikari")
@Bean("logDataSource")
public DataSource logDataSource() { ... }

@ConfigurationProperties(prefix = "spring.datasource.analytics.hikari")
@Bean("analyticsDataSource")
public DataSource analyticsDataSource() { ... }

DB가 2개이든 10개이든
동일한 구조의 설정 패턴으로 확장할 수 있어 매우 편리합니다.

데이터소스별 설정을 확실하게 분리할 수 있습니다. DataSourceBuilder가 자동으로 값을 바인딩하므로 하드코딩이 필요 없으며, 환경(dev/prod/test) 전환이 매우 쉬워집니다. 또한 HikariCP 같이 설정 항목이 많은 라이브러리에 매우 적합하고,여러 개의 데이터소스를 동일한 패턴으로 확장하기 쉽습니다.

profile
1년차 개발자의 Development Record Page

0개의 댓글