스프링 클라우드 컨피그를 활용한 외부 설정 관리 기술

스프링 클라우드 컨피그란?

Spring Cloud Config

스프링 클라우드 컨피그는 스프링 부트 애플리케이션들이 구성 정보를 외부로부터 관리할 수 있도록 하는 분산형 설정 관리 도구이다. 이를 통해 마이크로서비스 아키텍처에서 설정 중앙 집중화를 구현할 수 있다. 이 설정 서버는 분산된 애플리케이션들이 공유하는 환경 구성 데이터를 저장하고, 이러한 데이터를 분산된 애플리케이션들이 사용할 수 있도록 제공한다.

스프링 클라우드 컨피그는 기존의 로컬 파일이나 데이터베이스에 저장된 설정 값을 외부로부터 가져오는 방식과 달리, 설정 서버에서 관리되는 중앙 집중화된 설정 값을 가져오는 방식을 채용한다. 이를 통해 설정값 변경이나 관리가 용이해지며, 설정 값의 무결성과 보안성도 향상된다.

외부 설정 관리의 필요성

Configuration Management

마이크로서비스 아키텍처에서는 여러 애플리케이션이 동시에 실행되며, 이러한 애플리케이션들은 각기 다른 환경에서 실행될 수 있다. 이러한 애플리케이션들이 공유하는 설정 값들은 변경될 가능성이 높은데, 이를 직접적으로 수정하는 것은 매우 번거로운 작업이다.

그렇기 때문에 설정 값을 외부에서 관리함으로써 이러한 문제를 해결할 수 있다. 설정 값을 외부에서 관리하면 여러 애플리케이션들이 공유하는 설정 값의 변경이 용이해지며, 무결성과 보안성도 향상된다. 이를 위해 스프링 클라우드 컨피그는 분산된 애플리케이션들이 공유하는 설정 데이터를 중앙 집중화하여 관리할 수 있도록 지원한다.

스프링 클라우드 컨피그 활용 방법

스프링 클라우드 컨피그를 활용하기 위해서는 다음과 같은 순서로 진행되어야 한다.

설정 서버 구성

먼저, 설정 서버를 구성해야 한다. 설정 서버는 분산된 애플리케이션들이 공유하는 설정 데이터를 저장하고, 이를 분산된 애플리케이션들이 사용할 수 있도록 제공하는 역할을 담당한다.

스프링 클라우드 컨피그에서는 설정 서버를 구성하기 위해 spring-cloud-config-server 스타터를 추가해야 한다. 이 스타터는 설정 서버를 구성하는 데 필요한 모든 의존성을 관리해준다.


    org.springframework.cloud
    spring-cloud-config-server

또한, 설정 서버가 사용할 설정 파일을 bootstrap.yml 파일에 지정해주어야 한다. 이 파일은 스프링 부트 애플리케이션의 기본 설정 파일인 application.yml 보다 먼저 로딩되므로, 설정 서버 구성에 필요한 설정 값들을 먼저 로딩할 수 있다.

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/{username}/{repository}

위의 예시에서는 Git 리포지토리를 이용하여 설정 데이터를 관리하도록 설정되어 있다. Git 리포지토리를 이용하는 경우, 위와 같은 방식으로 URI를 지정해주면 된다.

클라이언트 구성

클라이언트는 설정 서버에서 설정 값을 가져오기 위해 spring-cloud-config-client 스타터를 추가해야한다.


    org.springframework.cloud
    spring-cloud-config-client

클라이언트는 설정 서버에서 설정 값을 가져오기 위해 bootstrap.yml 파일에 설정 값을 지정해주어야 한다. 이 때, 설정 값은 spring.cloud.config.uri 속성을 이용하여 설정 서버의 URI를 지정해주도록 한다.

spring:
  application:
    name: user-service
  cloud:
    config:
      uri: http://localhost:8888

위의 예시에서는 user-service 애플리케이션이 설정 서버에서 설정 값을 가져오도록 설정되어 있다. 설정 서버의 URI는 http://localhost:8888 로 지정되어 있다.

설정 값 가져오기

클라이언트가 설정 서버에서 설정 값을 가져오는 방법은 크게 두 가지가 있다.

  1. HTTP API를 이용한 가져오기
  2. Git 리포지토리를 이용한 가져오기

HTTP API를 이용하는 방법은 다음과 같다.

GET http://localhost:8888/{application}/{profile}[/{label}]

{application}은 애플리케이션의 이름, {profile}은 애플리케이션의 프로파일 이름, {label}은 Git 리포지토리의 브랜치 이름 등을 지정할 수 있다.

Git 리포지토리를 이용하는 방법은 다음과 같다.

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/{username}/{repository}
          searchPaths: user-service

위의 예시에서는 user-service 디렉토리 내에 있는 설정 값을 가져오도록 설정되어 있다.

애플리케이션 재시작 없이 설정 값 변경하기

스프링 클라우드 컨피그는 애플리케이션을 재시작하지 않고도 설정 값을 변경할 수 있는 기능을 제공한다. 이를 위해 설정 서버는 설정 값이 변경되었을 때, 이를 클라이언트에게 알려주는 기능을 제공한다. 이 기능을 활용하기 위해서는 다음과 같은 설정이 필요하다.

spring:
  cloud:
    config:
      enabled: true
      fail-fast: true
      retry:
        initial-interval: 3000
        max-attempts: 10
        multiplier: 1.1

위의 예시에서는 클라이언트가 설정 값 변경을 체크할 수 있도록 spring.cloud.config.enabled 속성이 true로 설정되어 있다. 또한, 설정 값 변경 체크 시도에 대한 재시도 설정 등도 함께 지정되어 있다.

스프링 클라우드 컨피그의 장단점 분석

장점

  1. 중앙 집중화된 설정 관리 가능
  2. 설정 값을 외부에서 관리함으로써 애플리케이션의 유연성과 확장성 향상
  3. 애플리케이션 재시작 없이 설정 값 변경 가능

단점

  1. 설정 서버의 성능에 따라 클라이언트의 성능에 영향을 미칠 수 있음
  2. 설정 서버의 보안 문제가 클라이언트 전체에 영향을 미칠 수 있음

결론

스프링 클라우드 컨피그는 분산된 애플리케이션들이 공유하는 설정 값을 외부에서 관리할 수 있도록 지원하는 기술이다. 이를 통해 설정 값 변경이나 관리가 용이해지며, 설정 값의 무결성과 보안성도 향상된다. 이러한 장점들을 통해 스프링 클라우드 컨피그는 마이크로서비스 아키텍처에서 중요한 역할을 수행하고 있다.