2025. 3. 4. 12:12ㆍSpring Microservice
🚀 Spring Cloud Configuration Server를 활용한 설정 관리 및 복잡성 해결
🎯 마이크로서비스 환경에서 설정 관리의 중요성
마이크로서비스는 빠르게 배포되고 실행될 수 있어야 하며, 최소한의 인간 개입으로 설정이 적용될 수 있어야 합니다.
✅ 수동 설정이 문제가 되는 이유
- 사람이 직접 설정을 수정하면 설정 편차(Configuration Drift) 가 발생할 가능성이 높음
- 예상치 못한 장애 발생 가능성이 커짐
- 확장성 문제로 인해 빠르게 배포 및 운영하는 데 장애 요소가 됨
✅ 이 문제를 해결하기 위한 4가지 원칙
1️⃣ Segregate (분리)
- 설정 정보는 애플리케이션 코드와 완전히 분리되어야 함
- 설정 파일이 서비스 인스턴스에 포함되지 않아야 하며, 환경 변수나 중앙 설정 저장소에서 읽어야 함
2️⃣ Abstract (추상화)
- 설정 정보는 직접 파일을 읽는 방식이 아니라, REST API 기반의 설정 서비스에서 가져오는 방식이 되어야 함
3️⃣ Centralize (중앙 집중화)
- 마이크로서비스가 많아질수록 설정 저장소를 최소화해야 관리가 쉬움
- 분산된 설정 파일이 아니라, 단일 중앙 저장소에서 관리해야 함
4️⃣ Harden (강화)
- 설정 저장소는 고가용성(HA, High Availability)과 이중화(Redundancy)가 보장되어야 함
- 설정이 외부에 존재하면 설정 저장소가 장애 시 서비스 전체가 영향을 받을 수 있음 → 이중화 필요
📌 설정을 코드와 분리하면 새로운 외부 의존성이 생기므로, 설정 데이터도 버전 관리가 필요함!
🛠 마이크로서비스 설정 관리 아키텍처
📌 마이크로서비스 부트스트래핑 과정
📌 아래 단계에서 마이크로서비스가 설정 정보를 로드함
1️⃣ 마이크로서비스 인스턴스가 시작되면, 설정 정보를 읽기 위해 설정 서비스에 요청
2️⃣ 실제 설정 데이터는 설정 저장소(예: Git, 데이터베이스, Key-Value Store 등)에 저장
3️⃣ 설정 변경은 빌드 및 배포 파이프라인을 통해 적용됨
4️⃣ 설정 변경 시, 서비스가 이를 감지하고 자동으로 반영
🔥 설정 관리 시스템의 구현 방법
📌 오픈소스 기반 설정 관리 솔루션 비교
프로젝트 설명 특징
etcd | Go 언어 기반, 서비스 디스커버리 및 Key-Value 저장소 역할 | 빠르고 확장 가능, CLI 기반, 설정 변경 시 즉시 반영 |
Eureka | Netflix 개발, 마이크로서비스 디스커버리 및 설정 관리 지원 | 동적 클라이언트 리프레시 가능 |
Consul | HashiCorp 개발, 서비스 디스커버리 + Key-Value 저장소 | 빠르고 DNS 통합 가능, 하지만 기본적으로 동적 리프레시 미지원 |
Zookeeper | Apache 프로젝트, Key-Value 저장소 및 분산 락 기능 지원 | 가장 오래된 솔루션, 설정 관리에도 사용 가능하지만 복잡함 |
Spring Cloud Configuration Server | Spring 기반의 설정 관리 서버 | Spring Boot와 강력한 통합 지원, Git 및 Vault 연동 가능 |
✅ Spring Cloud Configuration Server 선택 이유
✔ 설정 서버 구축이 매우 간단하고, Spring Boot 애플리케이션과 원활하게 통합 가능
✔ 다양한 백엔드 스토리지(Git, Vault, 파일 시스템 등)를 활용 가능
✔ Git과 HashiCorp Vault와 직접 통합할 수 있음
🔧 Spring Cloud Configuration Server 구현
1️⃣ 설정 서버 (Spring Cloud Config Server) 구축
- spring-cloud-config-server 의존성 추가
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
- @EnableConfigServer 추가
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
- application.yml에서 설정 원본(Git 등) 지정
server:
port: 8888 # 설정 서버 포트
spring:
cloud:
config:
server:
git:
uri: https://github.com/my-config-repo # 설정이 저장된 Git 저장소
default-label: main
📌 이제 설정 서버가 Git에서 설정을 가져와 제공할 수 있음
2️⃣ 마이크로서비스 클라이언트 설정
- 클라이언트 서비스에 spring-cloud-starter-config 의존성 추가
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- bootstrap.yml에서 설정 서버 지정
spring:
application:
name: licensing-service
cloud:
config:
uri: http://localhost:8888 # 설정 서버 주소
- 클라이언트 애플리케이션이 시작되면, 설정 서버에서 자동으로 설정을 로드
📌 설정 서버의 데이터 확인
curl http://localhost:8888/licensing-service/default
3️⃣ HashiCorp Vault를 활용한 보안 설정
민감한 정보(예: DB 비밀번호, API 키)는 Vault를 활용하여 보안 강화
spring:
cloud:
config:
server:
vault:
uri: https://vault.example.com
authentication: TOKEN
token: my-secret-token
✅ 민감한 정보는 Git이 아니라 보안이 강화된 저장소에서 관리해야 함!
🏆 Spring Cloud Configuration Server 도입 효과
문제 Config Server 사용 시 해결
설정 변경 시 코드 배포 필요 | 설정 변경 후 애플리케이션 재배포 없이 즉시 반영 |
설정 관리가 복잡함 | 중앙 집중식 관리로 설정 일관성 유지 |
보안 문제 발생 가능 | 민감한 데이터 암호화 및 보안 저장소 활용 가능 |
설정 변경 후 서비스 재시작 필요 | 클라이언트가 자동으로 변경 사항 감지하여 반영 |
🎯 Summary
✅ 설정 정보를 코드와 완전히 분리하고, 중앙화된 설정 저장소에서 관리해야 함
✅ Spring Cloud Config Server를 활용하면 설정을 중앙에서 관리하고 동적으로 반영 가능
✅ Git, HashiCorp Vault 등 다양한 저장소와 연동 가능
✅ 설정 변경 시 애플리케이션을 재배포하지 않고도 즉시 반영 가능
✅ 보안이 중요한 설정 정보는 Vault 등 보안 저장소 활용 필수
💡 이제 Spring Cloud Configuration Server를 활용하여 효과적인 마이크로서비스 설정 관리 시스템을 구축해보세요! 🚀
'Spring Microservice' 카테고리의 다른 글
Integrating Spring Cloud Config with a Spring Boot client (0) | 2025.03.04 |
---|---|
Building our Spring Cloud Configuration Server (0) | 2025.03.04 |
5.Controlling your configuration with the Spring Cloud Configuration Server (0) | 2025.03.04 |
The DevOps story: Building for the rigors of runtime (2) | 2025.03.03 |
Implementing Spring HATEOAS to display related links (0) | 2025.03.03 |