MSA
8 - Config
by 젼젼39
2026. 2. 23.
1. Spring Cloud Config 개요
- 1-1) Spring Cloud Config란?
- 분산 시스템에서 수많은 마이크로서비스의 설정 파일(yml, properties)을 한곳에서 관리할 수 있게 해주는 프레임워크
- 설정 정보가 소스 코드와 분리되어 있어, 환경 변화에 유연하게 대응할 수 있으며 보안성도 향상됨
- Git, SVN, JDBC, 로컬 파일 시스템 등 다양한 저장소(Repository)를 백엔드로 사용할 수 있음
- 1-2) 핵심 기능 및 이점
- 중앙 집중 관리: 모든 서비스의 공통 설정과 개별 설정을 한 곳에서 통제함
- 환경별 프로파일 제공: 개발(dev), 테스트(test), 운영(prod) 환경에 따라 다른 설정값을 동적으로 주입함
- 실시간 반영: 애플리케이션의 재빌드나 재시작 없이도 변경된 설정값을 즉시 적용할 수 있음
2. Spring Cloud Config 서버(Server) 구축
- 2-1) 의존성 구성 (build.gradle)
- 서버 역할을 수행하기 위한 핵심 라이브러리를 추가함
dependencies {
implementation 'org.springframework.cloud:spring-cloud-config-server'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
- 2-2) 서버 활성화
@EnableConfigServer 애너테이션을 사용하여 프로젝트를 설정 서버로 지정함
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
- 2-3) 저장소 설정 (application.yml)
- 설정 파일이 저장된 외부 저장소(주로 Git) 주소를 명시함
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/my-repo/config-storage # 설정 파일이 담긴 Git 주소
clone-on-start: true # 서버 시작 시 저장소 복제 여부
3. Spring Cloud Config 클라이언트(Client) 설정
- 3-1) 클라이언트 의존성
- 서버로부터 설정을 받아올 마이크로서비스들에 라이브러리를 추가함
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-config'
}
- 3-2) 서버 연결 설정 (application.yml)
- 유레카(Eureka)를 통해 설정 서버를 동적으로 찾도록 구성하는 방식이 일반적임
spring:
application:
name: product-service # 서버에서 찾을 파일명과 일치해야 함
cloud:
config:
discovery:
enabled: true
service-id: config-server # Eureka에 등록된 서버 ID
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
4. 환경별 구성 및 프로파일(Profile)
- 4-1) 파일 네이밍 규칙
- Git 저장소에
{애플리케이션명}-{환경명}.yml 형태로 파일을 저장
- 예:
user-service-dev.yml, user-service-prod.yml.
- 4-2) 프로파일 활성화
- 클라이언트 기동 시 어떤 환경의 설정을 가져올지 지정함
spring:
profiles:
active: dev # dev 프로파일의 설정을 우선적으로 로드함
5. 실시간 설정 갱신 전략 (Refresh)
- 5-1) Spring Cloud Bus (메시징 활용)
- Kafka나 RabbitMQ 같은 메시지 브로커를 사용하여 설정 변경 알림을 모든 클라이언트에 전파함. 대규모 서비스 환경에서 가장 효율적인 방식
- 5-2) 수동 갱신 (/actuator/refresh)
- 각 클라이언트 서비스에 직접 POST 요청을 보내 설정을 갱신
- 절차: 저장소 파일 수정 → 서버 반영 확인 → 클라이언트
/actuator/refresh 엔드포인트 호출
- 5-3) @RefreshScope 애너테이션
- 런타임에 설정값을 주입받는 빈(Bean)에 해당 애너테이션을 붙여야 실제 갱신이 일어날 때 값이 동적으로 업데이트됨
6. 기술적 팁: 왜 Git을 사용하는가?
- 설정값의 이력 관리(Version Control)가 가능하여 실수를 방지할 수 있고, 문제가 생겼을 때 이전 설정으로 빠르게 롤백(Rollback)할 수 있기 때문