B2C 플랫폼 설계/설계
💻 [B2C 플랫폼 설계] 2편. Config Server로 설정 외부화하기
프로그래민구찌
2025. 5. 19. 21:51
🎯 개요
마이크로서비스 아키텍처에서는 각 서비스가 개별적으로 관리되기 때문에 설정 파일이 수십 개로 늘어날 수 있습니다.
이때, 설정 파일을 중앙에서 관리할 수 있는 Config Server를 도입하면 설정 관리 효율성과 보안성을 크게 높일 수 있습니다.
이번 글에서는 Spring Cloud Config의 개념과 함께,
Git 저장소를 통한 설정 외부화 구조를 어떻게 구성하는지 설명드리겠습니다.
✔ 주요 기능 요약
기능 | 설명 |
설정 중앙화 | 설정 파일을 Git에 저장하고 Config Server에서 각 서비스에 전달 |
Git 연동 | 별도 저장소(spring-cloud-demo-config)에 환경별 설정 파일 관리 |
프로파일 기반 설정 분리 | dev, prod 등 환경별로 yml 파일을 구분하여 운영 환경 구성 가능 |
실시간 반영 가능 | 이후 Cloud Bus + Kafka를 통해 실시간 변경 반영 가능 (7편에서 다룸 예정) |
🛠 기술 스택 및 구조
- Spring Boot 3.2.x
- Spring Cloud Config Server 2023.x
- Git 저장소 기반 설정 관리
- profile에 따른 설정 분기 (user-service-dev.yml, application-prod.yml 등)
🔄 구성 흐름도
[Git 저장소: spring-cloud-demo-config]
↓
[Config Server (port: 8888)]
↓
[각 서비스: user-service, order-service, ...]
→ bootstrap.yml에서 설정 요청
📁 디렉토리 구조
1️⃣ 애플리케이션 리포: spring-cloud-demo
📁 config-server/ ← Spring Cloud Config Server 모듈
📁 user-service/
📁 order-service/
...
2️⃣ 설정 전용 리포: spring-cloud-demo-config
📁 spring-cloud-demo-config/
├── application-dev.yml
├── user-service-dev.yml
├── order-service-dev.yml
├── gateway-service-dev.yml
└── ...
Config Server는 위 리포지토리에서 설정을 읽어와서 각 서비스에 전달합니다.
📂 설정 흐름 설명
✅ Config Server application.yml 설정 예시
spring:
cloud:
config:
server:
git:
uri: https://github.com/mingstagram/spring-cloud-demo-config
default-label: main
Git의 main 브랜치를 명시해야 오류를 방지할 수 있습니다.
✅ Config Client (user-service 등)의 bootstrap.yml
spring:
application:
name: user-service
cloud:
config:
uri: http://localhost:8888
각 서비스는 이름과 profile(dev 등)에 따라 설정을 요청하게 됩니다.
💡 회고 및 팁
이번 설정 구조를 통해 설정 파일을 서비스 코드와 분리해 관리하는 것이 얼마나 유리한지 체감할 수 있었습니다.
특히 Git을 통한 버전 관리, 실시간 반영 가능성, 민감 설정 분리 등의 이점이 마이크로서비스 환경에서 더욱 중요하게 느껴졌습니다.
또한 오류가 발생했던 spring.profiles.active 설정 이슈를 통해
profile 전용 설정 파일에서 사용할 수 없는 속성들을 명확히 인지하는 계기도 되었습니다.
📚 추가 자료
전체 설정 파일과 실습 예제는 GitHub에서 확인하실 수 있습니다.
실습 예제 및 서비스 코드: 👉 https://github.com/mingstagram/spring-cloud-demo
설정 파일(Config): 👉 https://github.com/mingstagram/spring-cloud-demo-config