Config Server 는 마이크로서비스 아키텍쳐에서 수많은 서비스들이 각기 다른 환경 설정을 효율적으로 관리할 수 있도록 도와 주는 핵심 도구이다.
마이크로서비스 아키텍처에서는 수많은 서비스가 존재하고, 각 서비스는 환경에 따라 다양한 설정을 가진다.
설정 파일을 각 서비스 내부에 두면, 운영 환경 변경이나 공통 설정 수정 시 모든 서비스를 수정하고 배포해야 하는 번거로움이 발생한다.
이를 해결하기 위해 Spring Cloud Config Server를 도입하면 설정을 중앙에서 관리하고 실시간으로 배포 환경에 적용할 수 있다.
1. Config Server의 역할
- 중앙 저장소에서 설정 파일을 불러와 각 서비스에 전달
- Git, 파일 시스템 등 다양한 저장소를 지원
- 애플리케이션 이름과 프로파일에 따라 설정을 다르게 관리 가능
2. Config Server 구성
의존성 추가 (config-server/build.gradle.kts)
dependencies {
implementation("org.springframework.cloud:spring-cloud-config-server")
}
애플리케이션 설정 (application.yml)
server:
port: 8888
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo
default-label: main
서버 어플리케이션 클래스
@SpringBootApplication
@EnableConfigServer
class ConfigServerApplication
fun main(args: Array<String>) {
runApplication<ConfigServerApplication>(*args)
}
3. 설정 저장소 구성 (예: Git)
Git 저장소에 다음과 같이 설정 파일을 배치한다.
설정 저장소는 아래 참고 섹션에서 확인 할 수 있다.
config-repo/
├── user-service.yml
├── auth-service.yml
└── gateway-service.yml
- 파일 이름은 서비스 이름과 일치해야 한다.
- 프로파일 별로
user-service-dev.yml
,user-service-prod.yml
처럼 확장 가능하다.
4. 클라이언트 서비스 연동
각 마이크로서비스에서 다음과 같은 설정을 추가한다.
의존성 추가
dependencies {
implementation("org.springframework.cloud:spring-cloud-starter-config")
}
부트스트랩 설정 (bootstrap.yml 또는 application.yml)
spring:
application:
name: user-service
cloud:
config:
uri: http://localhost:8888
Spring Boot 2.4+에서는 bootstrap.yml 대신 application.yml에서 spring.config.import를 사용한다.
spring:
application:
name: user-service
config:
import: configserver:http://localhost:8888
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
server:
port: 8082
5. 설정 로딩 흐름
- 서비스 실행 시 Config Server에 접속
- 서비스 이름 및 프로파일을 기준으로 설정 파일 조회
- 설정을 애플리케이션에 자동 적용
6. 설정 로딩 테스트
o.s.c.c.c.ConfigServerConfigDataLoader : Fetching config from server at : http://localhost:8888
o.s.c.c.c.ConfigServerConfigDataLoader : Located environment: name=user-service, profiles=[default], label=null, version=fa5dc9e7460b34bd5f9152893a2951547146caf3, state=null
이 메시지는 user-service가 config-server(http://localhost:8888)에 접속해서user-service의 환경설정을 성공적으로 받아왔다는 의미이다.
Tomcat initialized with port(s): 8082 (http)
설정 파일에 정의된 포트(8082)로 정상적으로 서버가 기동되고 있습니다.
user-service가 중앙 설정 서버(config-server)에서 환경설정을 잘 받아오고 있습니다.
7. Spring Cloud Bus로 실시간 갱신 (선택)
RabbitMQ 또는 Kafka를 사용하면 설정 변경 후 /actuator/refresh
없이도 실시간 반영이 가능하다.
설정의 일관성과 유지보수를 위한 전략
Config Server는 마이크로서비스의 환경 설정을 중앙화하고, 버전 관리 가능한 형태로 유지할 수 있게 해준다.
운영 환경 전환, 공통 설정 변경, 보안 정보 관리에 모두 유용하며, 서비스 간 일관성을 높이는 핵심 도구다.
다음 글에서는 인증된 사용자 전용 도메인 서비스를 어떻게 구축할 수 있을지 다룰 예정이다.
이전편 보기
서비스 디스커버리: Eureka로 마이크로서비스 등록/연결
참고
자세한 코드는 아래 저장소에서 확인 가능하다.
Github – 저장소