스프링 클라우드 - 컨피그 서버(Spring Cloud Config)

2024. 9. 23. 10:07스프링 클라우드

2024/09/20

 

※  Spring Cloud Config에 대해 알아보자.

 

   ▶  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/


    

   ▶  환경별 구성 관리

       ●   환경별 설정 파일
            ○   Config 서버는 환경별로 다른 설정 파일을 제공할 수 있다.
            ○   예를 들어,  application-dev.yml, application-prod.yml 파일을 Git 저장소에 저장하여 환경별 설정을 관리한다.

       ●   프로필 사용
            ○   Spring Boot 애플리케이션에서 프로필을 사용하여 환경을 구분할 수 있다 :

spring:
  profiles:
    active: dev


       ▶  실시간 구성 변경

❗ 실시간 구성 변경을 반영하는 방법에는 여러 가지가 있다.
      1) Spring Cloud Bus를 사용하는 방법, 2) 수동으로 /actuator/refresh 엔드포인트를 호출하는 방법,
      3) Spring Boot DevTools를 사용하는 방법, 그리고 4) Git 저장소를 사용하는 방법이 있다.
각 방법은 상황에 따라 적절히 선택하여 사용할 수 있다. Spring Cloud Bus는 메시징 시스템을 통해 실시간으로 설정 변경 사항을 전파하는 데 매우 유용하며, Git 저장소를 사용하면 설정 파일의 버전 관리를 쉽게 할 수 있다. Spring Boot DevTools는 주로 개발 환경에서 유용하게 사용된다.

 

       ●   Spring Clouds Bus

            ○   Spring Cloud Bus를 사용하면 설정 변경 사항을 실시간으로 클라이언트 애플리케이션에 반영할 수 있다.
            ○   이를 위해서는 메시징 시스템(RabbitMQ 또는 Kafka 등)을 사용하여 변경 사항을 전파해야 한다.

       ●   수동 구성 갱신

            ○    /actuator/refresh 엔드포인트 사용
               ▪   Spring Cloud Bus를 사용하지 않는 경우, 클라이언트 애플리케이션에서 수동으로 설정을 갱신할 수 있다.
               ▪   이를 위해 Spring Actuator의 /actuator/refresh 엔드포인트를 사용할 수 있다.

            ○   설정 갱신 절차
               ▪   Config 서버에서 설정 파일을 변경한다.
               ▪   클라이언트 애플리케이션의 /actuator/refresh 엔드포인트를 POST 요청으로 호출하여 변경된 설정을 반영한다.
               ▪   이 방법은 간단하지만, 각 클라이언트 애플리케이션에서 수동으로 엔드포인트를 호출해야 한다.

            ○   Spring Boot DevTools 사용
               ▪   Spring Boot DevTools를 사용하면 개발 환경에서 파일 변경을 자동으로 감지하고 애플리케이션을 재시작할 수 있다.
               ▪   이는 classpath 내의 파일 변경도 포함된다.

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

 

 

 

 

 

'스프링 클라우드' 카테고리의 다른 글

스프링 클라우드 - API 게이트웨이  (8) 2024.09.13
스프링 클라우드란?  (4) 2024.09.09