TIL : Spring Cloud Config 서버와 클라이언트 설정 및 실시간 구성 관리

Skadi·2024년 8월 12일
0

Spring Cloud Config 개요


Spring Cloud Config란?

  • Spring Cloud Config는 분산 시스템 환경에서 중앙 집중식 구성 관리를 제공하는 프레임워크입니다. 이를 통해 애플리케이션의 설정을 중앙에서 관리하고, 변경 사항을 실시간으로 반영할 수 있습니다. Git, 파일 시스템, JDBC 등 다양한 저장소를 지원합니다.

주요 기능

  • 중앙 집중식 구성 관리: 여러 마이크로서비스의 설정을 중앙에서 관리합니다.
  • 환경별 구성 관리: 개발, 테스트, 운영 등 환경별로 구성을 분리하여 관리할 수 있습니다.
  • 실시간 구성 변경: 설정 변경 시 애플리케이션을 재시작하지 않고 실시간으로 반영할 수 있습니다.

Spring Cloud Config 서버 설정


Config 서버 구성

  • Config 서버는 설정 파일을 중앙에서 저장하고 제공하는 역할을 합니다.

  • 필요한 의존성을 build.gradle 파일에 추가합니다:

    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-config-server'
        implementation 'org.springframework.boot:spring-boot-starter-web'
    }

서버 애플리케이션 설정

  • Spring Boot 애플리케이션에서 Config 서버를 설정합니다:

    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigServerApplication.class, args);
        }
    }

설정 파일 구성

  • application.yml 파일을 통해 Config 서버의 설정을 정의합니다:

    server:
      port: 8888
    
    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/my-config-repo/config-repo
              clone-on-start: true

Spring Cloud Config 클라이언트 설정


클라이언트 구성

  • Config 클라이언트는 Config 서버에서 설정을 받아오는 역할을 합니다. 필요한 의존성을 build.gradle 파일에 추가합니다:

    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-starter-config'
    }

설정 파일 구성

  • 클라이언트 애플리케이션의 application.yml 파일에서 Config 서버의 설정을 정의합니다:

    spring:
      application:
        name: my-config-client
      cloud:
        config:
          discovery:
            enabled: true
            service-id: config-server
         
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:19090/eureka/

실시간 구성 변경


Spring Cloud Bus

  • Spring Cloud Bus를 사용하면 메시징 시스템(RabbitMQ, Kafka 등)을 통해 설정 변경 사항을 실시간으로 클라이언트 애플리케이션에 반영할 수 있습니다.

수동 구성 갱신

  • /actuator/refresh 엔드포인트를 사용하여 수동으로 설정을 갱신할 수 있습니다. 이를 통해 Config 서버에서 변경된 설정을 실시간으로 반영할 수 있습니다:

    management:
      endpoints:
        web:
          exposure:
            include: refresh
    @RefreshScope
    @RestController
    public class ProductController {
        @Value("${message}")
        private String message;
    
        @GetMapping("/message")
        public String getMessage() {
            return this.message;
        }
    }

Git 저장소 사용

  • Spring Cloud Config 서버가 Git 저장소에서 설정 파일을 읽어오도록 설정할 수 있습니다. 이는 설정 파일의 변경 사항을 쉽게 반영하고, 여러 서비스 간에 일관된 구성을 유지하는 데 유용합니다.

실습


  1. Config 서버 설정:

    • config-repo 폴더를 생성하고, 필요한 yml 파일을 설정합니다.
    • product-service-local.yml 파일을 사용하여 로컬 환경에서의 메시지와 포트 정보를 관리합니다.
  2. Product 서비스 설정:

    • build.gradle 파일에 Config 관련 의존성을 추가합니다.
    • ProductController에서 /actuator/refresh 엔드포인트를 통해 실시간으로 설정을 갱신하고 확인합니다.
  3. 실시간 구성 변경 확인:

    • Config 서버의 yml 파일을 수정한 후, /actuator/refresh 엔드포인트를 호출하여 변경된 메시지를 확인합니다.

중요 사항 요약

  • Config 서버는 중앙 집중식으로 설정을 관리하며, Git과 같은 버전 관리 시스템을 활용할 수 있습니다.
  • 실시간 구성 변경은 Spring Cloud Bus 또는 Actuator를 통해 구현할 수 있으며, 이는 애플리케이션의 유연성과 효율성을 높이는 데 중요합니다.
  • 환경별 구성 관리는 애플리케이션의 일관성을 유지하는 데 필수적이며, Spring Cloud Config는 이를 간단하게 구현할 수 있는 도구를 제공합니다.

0개의 댓글