본문으로 건너뛰기

1. Spring Cloud Config 개요​

  • Spring Cloud Config는 분산 시스템에서 설정을 외부화하고 중앙에서 관리하기 위한 솔루션입니다.
  • 모든 환경(개발, 테스트, 운영)의 설정을 한 곳에서 관리하고, 애플리케이션의 재시작 없이 설정을 변경할 수 있습니다.

1.1 주요 특징​

  • Git 저장소를 백엔드로 사용하여 설정의 버전 관리 가능
  • 설정 변경 시 실시간 반영 지원
  • 암호화/복호화 기능 내장
  • REST API 제공
  • 다양한 형식(YAML, Properties, JSON) 지원

2. 구성 요소​

2.1 Config Server​

  • Config Server는 설정을 제공하는 서버로, 다음과 같이 구성합니다:
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}

서버 설정

spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/config-repo
search-paths: configs
default-label: main

2.2 Config Client​

  • 각 마이크로서비스는 Config Client가 되어 설정을 가져옵니다
spring:
application:
name: my-service
cloud:
config:
uri: http://config-server:8888
fail-fast: true
팁

fail-fast: true를 설정하면 Config Server에 연결할 수 없을 때 애플리케이션 구동을 실패시킵니다. 설정이 필수적인 경우 권장됩니다.

3. 설정 파일 구조​

  • Git 저장소의 구조는 다음과 같이 구성합니다:
config-repo/
├── application.yml # 공통 설정
├── my-service.yml # 서비스별 공통 설정
├── my-service-dev.yml # 개발 환경 설정
└── my-service-prod.yml # 운영 환경 설정

우선순위는 다음과 같습니다:

  1. my-service-{profile}.yml
  2. my-service.yml
  3. application-{profile}.yml
  4. application.yml

4. 동적 설정 갱신​

4.1 서버 측 설정​

spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/config-repo
force-pull: true

4.2 클라이언트 측 설정​

@RefreshScope
@RestController
public class ApiController {
@Value("${my.property}")
private String myProperty;

// ...
}
정보

@RefreshScope가 붙은 빈은 설정이 갱신될 때 재생성됩니다.

5. 보안 설정​

5.1 암호화 설정​

encrypt:
key: my-secret-key

암호화된 값 사용:

spring:
datasource:
password: '{cipher}AQA6EN7aXNXrBiIE...'

6. Kubernetes ConfigMap과의 비교​

6.1 주요 차이점​

특성Spring Cloud ConfigKubernetes ConfigMap
저장소Git (버전 관리 가능)클러스터 내부 저장
변경 감지자동 (WebHook/폴링)수동 또는 도구 필요
이력 관리Git 이력별도 이력 없음
암호화내장 기능Secret 객체 필요
적용 범위환경 독립적k8s 클러스터 한정

6.2 선택 기준​

  • Spring Cloud Config 선택 사례:
    • 멀티 클라우드/하이브리드 환경
    • Git 기반 이력 관리 필요
    • Spring 기반 시스템
  • ConfigMap 선택 사례:
    • k8s 단일 환경
    • 단순한 설정 관리
    • 다양한 언어/프레임워크

6.3 함께 사용하기​

  • 실제로는 두 시스템을 목적에 따라 함께 사용하는 경우가 많습니다:
# ConfigMap: 인프라 설정
server:
port: 8080
management:
endpoints:
web:
exposure:
include: "*"

# Spring Cloud Config: 비즈니스 설정
business:
feature-toggles:
new-billing: true
api:
external:
url: https://api.external.com
key: ${encrypted.api.key}

7. 운영 시 고려사항​

7.1 모니터링​

  • Config Server 상태 모니터링
  • 설정 변경 감사 로그
  • 클라이언트 연결 상태 확인

7.2 장애 대응​

  1. Config Server 이중화
  2. 설정 캐싱 전략
  3. 폴백(fallback) 설정 구성
경고

운영 환경에서는 반드시 Config Server를 이중화하고, 클라이언트의 캐시 전략을 적절히 설정하세요.

8. 결론​

  • Spring Cloud Config와 Kubernetes ConfigMap은 각각의 장단점이 있습니다.
  • 시스템의 요구사항과 운영 환경을 고려하여 적절히 선택하거나 혼용하는 것이 바람직합니다.
  • 특히 Spring 기반의 마이크로서비스 아키텍처에서는 Spring Cloud Config의 강력한 기능들이 큰 장점이 될 수 있습니다.