본문 바로가기

Spring

[Spring Boot] spring.config.import를 사용해 공통 설정 사용

제가 소속되어 있는 부서에서는 RabbitMQ의 Consumer로 사용되는 동일한 Spring Boot 서버(RabbitMQ의 Queue 소비 설정만 다른)가 여러 대 운영되고 있습니다.

 

 

 

스프링 부트 프로젝트는 쉽게 외부 프로퍼티 컨피그 파일을 적용시킬 수 있는데, 일반적으로 src/resources/application.properties 또는 application.yml 파일을 사용합니다.

 

도커 컨테이너로 배포된 서비스의 경우, 각 서버 별로 프로퍼티 파일이 적용되어 있습니다. 이때 각 서버마다 차별적인 설정을 가지고 있지만, 일부 공통적인 성격의 설정들이 있습니다.

 

예를 들어, DB 커넥션 정보의 경우 분기마다 사용하는 계정 정보가 변경됩니다. 이러한 공통된 속성을 가진 설정들은 개별 서버의 설정 파일을 일일이 수정해야 하므로, 작업에 많은 공수가 들어갑니다.

 

이러한 문제를 해결하기 위해, 각 컨테이너의 공통된 부분을 하나의 설정 파일을 통해 관리한다면 작업 비용을 크게 줄일 수 있을 것입니다.

 

이러한 구성을 통해 아키텍처는 다음과 같이 설계될 수 있습니다.

 

 

spring.config.import

spring.config.import는 Spring Boot 2.4부터 도입된 설정 프로퍼티로, 외부 구성 파일을 애플리케이션의 환경에 동적으로 가져오고 포함하는 기능을 제공합니다.

 

이 기능을 통해 다양한 소스에서 설정을 가져와 애플리케이션에 적용할 수 있습니다.

 

저는 이 기능을 사용해서 각각의 서비스들이 하나의 공통 프로퍼티 파일을 바라볼 수 있도록, db 커넥션이 설정되어 있는 프로퍼티를 컨테이너로 마운트하여 변경에 소모되는 비용을 절감했습니다.

 

적용

 

1. 각 서버의 컨테이너가 마운트 할 대상 폴더를 지정 후 프로퍼티 파일을 생성합니다.

 

#application.properties
.
.
.
 
 
spring.config.import=file:/dbconfig/db-config.properties

 

2. 각 서버의 default 프로퍼티 파일에서 spring.config.import 경로를 설정합니다.

  • 이 때, 도커 컨테이너에서 마운트하는 대상 폴더로 지정해줘야합니다.
#docker-compose.yml
 
version: "3"
services:
  indexer:
    .
    .
    .
    .
    volumes:
    .
    .
    - "/data/queue-indexer-db-data/dbconfig:/dbconfig" 
    .
    .

 

3. docker-compose.yml 파일에서 마운트 설정을 추가합니다.

 

4. 컨테이너 재시작 후 정상 실행을 확인합니다.