2026-03-15
Spring Cloud Config로 MSA 설정 관리 중앙화하기 — 설정 반영 10분에서 1분으로
왜 설정 관리가 문제였나
헬스케어 플랫폼을 MSA로 설계하면서 서비스가 늘어났다. Edge API, Core API, Admin API, Partner API — 각 서비스마다 application.yml을 들고 있었고, 환경(dev/prod)까지 고려하면 관리해야 할 설정 파일이 기하급수적으로 늘어났다.
문제는 설정 하나 바꿀 때마다 각 서버에 들어가서 수동으로 반영해야 했다는 점이다. 서버가 4대면 4번 반복. 환경별로 하면 8번. 서버당 약 10분이 걸리니까, 단순 설정 변경에 거의 1시간을 쓰는 셈이었다.
Spring Cloud Config Server 도입
해결책은 설정을 중앙 저장소 한 곳에서 관리하는 것이었다. Spring Cloud Config Server를 도입했다.
구조
Git Repository (설정 파일 저장소)
↓
Spring Cloud Config Server (중앙 설정 서버)
↓
각 마이크로서비스 (Config Client)핵심 설정
Config Server 쪽:
# config-server/application.yml
spring:
cloud:
config:
server:
git:
uri: ${CONFIG_REPO_URI}
default-label: main
search-paths: '{application}'각 서비스(Client) 쪽:
# core-api/application.yml
spring:
config:
import: configserver:${CONFIG_SERVER_URI}
application:
name: core-api
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}이렇게 하면 각 서비스가 부팅할 때 Config Server에서 자기 이름(core-api)과 프로파일(dev/prod)에 맞는 설정을 자동으로 가져온다.
환경별 프로파일 분리
Git 저장소 구조를 이렇게 잡았다:
config-repo/
├── core-api/
│ ├── application.yml # 공통
│ ├── application-dev.yml # 개발
│ └── application-prod.yml # 운영
├── admin-api/
│ ├── application.yml
│ ├── application-dev.yml
│ └── application-prod.yml
├── edge-api/
│ └── ...
└── partner-api/
└── ...공통 설정은 application.yml에, 환경별 차이만 application-{profile}.yml에 넣었다. DB 접속 정보, Redis 호스트, 외부 API 키 같은 것들이 환경별로 달라지는 대표적인 항목이다.
설정 변경 반영 과정
이전에는:
각 서버 SSH 접속
설정 파일 수정
서비스 재시작
다음 서버로 이동... (반복)
지금은:
Git 저장소에서 설정 파일 수정 + push
Config Server가 변경 감지
각 서비스에
/actuator/refresh호출 (또는 서비스 재시작)
설정 반영 시간이 서버당 약 10분에서 전체 1분 이내로 단축되었다. Git으로 관리하니까 변경 이력 추적, 롤백도 자연스럽게 된다.
운영에서 겪은 이슈
Config Server 장애 시
Config Server가 죽으면 서비스가 부팅할 때 설정을 못 가져온다. 이건 spring.cloud.config.fail-fast=false + retry 설정으로 대응했다. 이미 부팅된 서비스는 마지막으로 받은 설정을 캐시하고 있어서 영향 없다.
민감 정보 관리
DB 비밀번호 같은 건 Git에 평문으로 넣으면 안 된다. 우리는 환경변수로 주입하는 방식을 택했다:
spring:
datasource:
password: ${DB_PASSWORD}Config Server가 ${} 플레이스홀더를 서빙하고, 각 서비스의 실행 환경에서 실제 값을 주입한다.
결과
| 항목 | Before | After |
|---|---|---|
| 설정 반영 시간 | 서버당 ~10분 | 전체 1분 이내 |
| 설정 변경 이력 | 없음 | Git 히스토리 |
| 환경별 관리 | 서버마다 수동 | 프로파일로 자동 분리 |
| 롤백 | 수동 복원 | git revert |
MSA에서 서비스가 3~4개만 넘어가도 설정 관리는 반드시 중앙화해야 한다. Spring Cloud Config는 Spring 생태계에서 가장 자연스러운 선택이고, Git 기반이라 러닝 커브도 낮다. 다만 Config Server 자체의 고가용성은 별도로 챙겨야 한다.