개발 일기

[Spring Cloud] Spring Cloud Config Server - 1 본문

Back-End/Spring Cloud + MSA + Kubernetes

[Spring Cloud] Spring Cloud Config Server - 1

개발 일기장 주인 2025. 2. 10. 22:30

기존의 단일 프로젝트 멀티모듈 아키텍처에서는 GitHub Submodule을 사용하여 민감한 정보를 관리하고, 설정 파일이나 시크릿을 별도의 Private Repository로 분리하여 관리했다. 그러나 현재 마이크로서비스 아키텍처로의 이전 과정에서는 각 서비스마다 GitHub Submodule을 별도로 관리해야 하는 상황이 발생했다. 이로 인해 각 서버마다 서브모듈을 갱신하고 설정을 수정한 후 다시 빌드 및 배포하는 과정이 필요해져, 관리 오버헤드가 크게 커졌다.

그래서 위의 문제를 해결하기위해 중앙 집중식으로 처리해줄 수 있는 Spring Cloud Config Server에 대해 정리해보게 됐다.


Spring Cloud Config란?

Spring Cloud Config는 분산 시스템에서 외부화된 설정 정보를 서버 및 클라이언트에게 제공하는 시스템이다.

MSA(Microservices Architecture)에서는 수십, 수백 개의 서비스가 독립적으로 배포되는데 각 서비스의 구성 정보(DB 연결, API 키, 환경 변수)를 개별적으로 관리하면 복잡성, 보안 등에서 문제가 될 수 있다.

그래서, Spring Cloud Config Server는 이러한 문제를 해결하기 위해 "중앙 집중식 Config 정보 저장소를 제공"해준다.

 

Git, SVN, 파일 시스템 등 다양한 소스에서 설정 파일을 가져올 수 있으며, 설정의 관리와 배포를 중앙에서 통합하여 처리해준다.

 

 

Spring Cloud Config Server 구성 요소

  • Config Server: 모든 마이크로서비스들이 가져올 설정을 제공하는 서버
  • Config Client: 각 마이크로서비스가 Config Server에서 설정을 가져오는 클라이언트
  • Git Repository(Private): Config Server가 설정 파일을 들고오는 곳. (구성 파일 관리되는 저장소)
  • Spring Cloud Bus: 구성 변경 사항을 실시간으로 전파하기 위한 메시지 브로커 통합

 

Spring Cloud Config Server의 동작 원리

 

  1. 마이크로서비스가 Config Server에 설정 요청
    • 마이크로서비스는 애플리케이션 시작 시 bootstrap.yml 또는 application.yml에서 설정 서버의 위치를 지정한다.
    • 설정 서버는 클라이언트로부터 요청을 받으면 Git, SVN 또는 파일 시스템에서 설정 파일을 찾아 반환한다.
  2. Git Repository에서 설정 파일 가져오기
    • Config Server는 Git Repository에서 설정 파일을 가져온다.
    • 각 서비스는 자신의 애플리케이션 이름에 해당하는 설정 파일을 요청한다.
      ex) {서비스 명}-service-local.yml, {서비스 명}-service-prod.yml과 같은 형식
  3. 설정 정보 클라이언트로 전달
    • Config Server는 가져온 설정 파일을 해당 마이크로서비스 클라이언트에 전달한다.
    • 클라이언트는 이 설정을 @Value나 @ConfigurationProperties 등을 통해 사용하게 된다.
⁉️ bootstrap.yml에서 application.yml로의 전환
bootstrap.yml

Spring Boot에서 bootstrap.yml은 주로 Spring Cloud Config를 사용할 때 외부 설정을 로드하기 위해 사용되었음.
이 파일은 application.yml보다 먼저 로드되며, Config Server에 대한 정보를 포함하고 있어 해당 Config Server에서 설정 정보를 조회한다.

하지만 Spring Boot 2.4.X 버전부터는 bootstrap.yml의 사용이 점차 줄어드는 것 같다.
이는 Spring Cloud 자체의 Config 로드 방식이 변경되었기 때문인데, 이제는 application.yml 하나로 대부분의 설정을 관리할 수 있게 되었다.

따라서, 최신 Spring Boot 프로젝트에서는 bootstrap.yml 대신 application.yml을 사용하는 것이 권장한다. 

과거에는 spring-cloud-starter-bootstrap 스타터 의존성을 명시적으로 추가하지 않아도, Spring Cloud가 자동으로 bootstrap.yml을 인식하고 사용. 하지만 Spring Boot 2.4 이후부터는 bootstrap.yml을 사용하려면 spring-cloud-starter-bootstrap 의존성을 명시적으로 추가해야 하며, bootstrap.yml 파일이 기본적으로 자동으로 로드되지 않게 됐다.


우선순위

  1. 프로젝트의 application.yaml
  2. 설정 저장소의 application.yaml
  3. 프로젝트의 application-{profile}.yaml
  4. 설정 저장소의 {application name}/{application name}-{profile}

설정 파일은 덮어쓰는 방식으로 작동하기 때문에 우선순위가 밀려있는 설정 파일이 적용되게 된다.

 

 

다음번에 이어서 Spring Cloud Bus에 대해 정리해보겠다.

 

실제 적용 방식은 아래 블로그를 참고하는 것이 좋을 것 같다.

https://velog.io/@lopahn2/Spring-Cloud-Config-Server

 

Spring Cloud Config Server

Spring Cloud Config는 MSA 아키텍처에서 분산화된 Spring Application.yml 을 제공해주는 시스템이다. 외부에서 모든 환경 설정 정보를 관리해주는 중앙 서버라고 한다. 설정 정보 저장을 .git 으로 관리해주

velog.io

 

 

이에 따라 Spring Cloud Config Server를 도입하면, 중앙에서 모든 설정을 관리할 수 있게 되어 각 서비스에 설정을 자동으로 전달할 수 있습니다. Config Server만 관리하면 설정 파일 변경 시 자동으로 각 서버에 반영되며, 서브모듈 방식이라면 각 서버의 서브모듈을 수정하고 재배포하는 번거로운 작업이 필요합니다. 따라서 Spring Cloud Config Server는 설정 관리의 효율성을 크게 향상시키고, MSA 환경에서의 관리 오버헤드를 줄이는 데 유리합니다.

이와 같은 이유로 Spring Cloud Config Server는 MSA 아키텍처에서 설정 관리의 복잡함을 해결하고, 유지보수성을 향상시키는 중요한 도구가 됩니다.