2025. 3. 4. 11:55ㆍSpring Microservice
🚀 Spring Cloud Configuration Server를 활용한 설정 관리
🎯 애플리케이션 설정과 코드의 분리
소프트웨어 개발에서 가장 중요한 원칙 중 하나는 애플리케이션 설정을 코드에서 분리하는 것입니다.
✅ 하드코딩된 설정값을 피해야 하는 이유
- 코드에 직접 설정값을 넣으면 설정 변경 시 애플리케이션을 다시 컴파일 및 배포해야 함
- 배포 속도가 느려지고, 유지보수가 어려워짐
✅ 설정을 코드에서 완전히 분리하면?
- 개발자와 운영팀이 설정을 쉽게 변경할 수 있음
- 애플리케이션을 다시 빌드하지 않고도 설정을 동적으로 변경 가능
- 하지만 새로운 설정 파일을 별도로 관리해야 하므로 복잡성이 증가
📌 따라서, 설정 관리를 체계적으로 하기 위해 Spring Cloud Configuration Server를 활용할 수 있음!
🔥 기존 설정 관리 방식의 한계
많은 개발자는 설정 정보를 YAML, JSON, XML 같은 프로퍼티 파일에 저장합니다.
이 방식은 소규모 애플리케이션에서는 효과적이지만, 대규모 클라우드 환경에서는 치명적인 단점이 있습니다.
🔹 문제점
1️⃣ 애플리케이션이 많아질수록 개별 설정 파일을 관리하는 것이 매우 어려워짐
2️⃣ 설정 파일이 소스 코드와 함께 배포되면, 설정 변경 시 코드를 다시 배포해야 함
3️⃣ 특정 설정을 변경하려면 소스 코드 저장소에서 파일을 찾고, 변경 후 배포 과정 거쳐야 함
예를 들어, 100개의 마이크로서비스가 있고, 각 마이크로서비스가 3개의 환경(개발, 테스트, 운영) 에 따라 설정이 다르다면?
⦁설정 파일이 300개 이상이 되고, 이를 관리하는 팀은 수많은 파일을 수동으로 조정해야 하는 문제에 직면
🔹 해결책
✔ 설정 정보를 코드와 완전히 분리
✔ 애플리케이션 이미지는 불변(Immutable)하게 유지
✔ 설정 변경 시, 환경 변수 또는 중앙화된 설정 저장소에서 값을 읽어 적용
🛠 Spring Cloud Configuration Server 도입
📌 Spring Cloud Configuration Server란?
Spring Cloud Configuration Server는 중앙 집중식 설정 관리 시스템으로, 설정을 한 곳에서 관리하고 여러 애플리케이션이 이를 읽을 수 있도록 합니다.
✅ 설정 변경이 있을 때 애플리케이션을 재배포할 필요 없이 변경 사항을 즉시 반영 가능
✅ Git, JDBC, HashiCorp Vault 등 다양한 저장소를 설정 원본(Source)으로 활용 가능
✅ 마이크로서비스가 시작될 때 중앙 설정 서버에서 설정을 자동으로 로드
🔧 Spring Cloud Configuration Server 구축 절차
1️⃣ 설정 서버(Spring Cloud Config Server) 생성
spring-cloud-config-server
의존성 추가 (pom.xml)<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
- Spring Boot 애플리케이션에 @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
📌 설정 서버는 8888 포트에서 실행되며, 설정 정보를 Git 저장소에서 가져옴
2️⃣ 클라이언트(Spring Boot 애플리케이션)에서 설정 가져오기
1. 클라이언트 애플리케이션에서 `spring-cloud-starter-config` 의존성 추가
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 클라이언트의
bootstrap.yml
에서 설정 서버 지정spring: application: name: my-service # 서비스명 cloud: config: uri: http://localhost:8888 # 설정 서버 주소
- 클라이언트 애플리케이션이 시작될 때, 설정 서버에서 설정을 자동으로 로드
- 애플리케이션 실행 후
http://localhost:8888/my-service/default
요청 시 설정 조회 가능
🔐 보안이 중요한 설정 보호
✅ Spring Cloud Config Server는 민감한 설정 정보(예: DB 비밀번호, API 키)를 보호할 수 있어야 함
✅ 이를 위해 HashiCorp Vault, AWS Secrets Manager, Azure Key Vault 같은 비밀 관리 서비스와 연동 가능
✅ spring.cloud.config.server.vault
설정을 통해 민감한 정보 암호화 가능
spring:
cloud:
config:
server:
vault:
uri: https://vault.example.com
authentication: TOKEN
token: my-secret-token
🏆 Spring Cloud Configuration Server 도입 효과
문제 | Config Server 사용 시 해결 |
---|---|
설정 변경 시 코드 배포 필요 | 설정 변경 후 애플리케이션 재배포 없이 즉시 반영 |
설정 관리가 복잡함 | 중앙 집중식 관리로 설정 일관성 유지 |
보안 문제 발생 가능 | 민감한 데이터 암호화 및 보안 저장소 활용 가능 |
🎯 Summary
✅ Spring Cloud Config Server를 사용하면 설정을 중앙에서 관리하여, 설정 변경 시 애플리케이션을 재배포하지 않고도 반영 가능
✅ 설정 서버는 Git, JDBC, Vault 등 다양한 저장소를 활용 가능
✅ 클라이언트 애플리케이션은 부트스트랩 단계에서 설정을 자동으로 가져옴
✅ 보안이 중요한 설정 정보는 Vault 등과 연동하여 보호 가능
💡 이제 Spring Cloud Config Server를 활용해 마이크로서비스의 설정을 효과적으로 관리해보세요! 🚀
- On managing configuration (and complexity)
- Building our Spring Cloud Configuration Server
- Integrating Spring Cloud Config with a Spring Boot client
- Protecting sensitive configuration information
'Spring Microservice' 카테고리의 다른 글
Building our Spring Cloud Configuration Server (0) | 2025.03.04 |
---|---|
On managing configuration (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 |
Adding internationalization into the licensing service (0) | 2025.03.02 |