Config Server 로 마이크로서비스 공통 설정 관리

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. 설정 로딩 흐름

  1. 서비스 실행 시 Config Server에 접속
  2. 서비스 이름 및 프로파일을 기준으로 설정 파일 조회
  3. 설정을 애플리케이션에 자동 적용

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 – 저장소

댓글 남기기