본문 바로가기
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)할 수 있기 때문

'MSA' 카테고리의 다른 글

10 - 이벤트 드리븐  (0) 2026.02.24
9 - 분산추적  (0) 2026.02.23
7 - 보안 구성  (0) 2026.02.23
6 - API 게이트웨이  (0) 2026.02.23
5 - 서킷브레이커  (0) 2026.02.23