5.Controlling your configuration with the Spring Cloud Configuration Server

2025. 3. 4. 11:55Spring 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) 생성

  1. spring-cloud-config-server 의존성 추가 (pom.xml)
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
  2. Spring Boot 애플리케이션에 @EnableConfigServer 추가
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication {
     public static void main(String[] args) {
         SpringApplication.run(ConfigServerApplication.class, args);
     }
    }
  3. 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>
  1. 클라이언트의 bootstrap.yml에서 설정 서버 지정
    spring:
    application:
     name: my-service  # 서비스명
    cloud:
     config:
       uri: http://localhost:8888  # 설정 서버 주소
  2. 클라이언트 애플리케이션이 시작될 때, 설정 서버에서 설정을 자동으로 로드
  3. 애플리케이션 실행 후 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를 활용해 마이크로서비스의 설정을 효과적으로 관리해보세요! 🚀