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 # 운영 환경 설정
우선순위는 다음과 같습니다:
my-service-{profile}.yml
my-service.yml
application-{profile}.yml
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 Config | Kubernetes ConfigMap |
---|---|---|
저장소 | Git (버전 관리 가능) | 클러스터 내부 저장 |
변경 감지 | 자동 (WebHook/폴링) |