스프링

마이크로서비스 코딩

공작소

2019.05.04

Chapter 3. 스프링 클라우드 컨피그 서버로 구성 관리

3. 스프링 클라우드 컨피그 서버로 구성 관리

클라우드 기반 마이크로서비스 개발에서 주의 사항

  1. 배포되는 실제 코드에서 애플리케이션의 구성을 완전하게 분리한다.
     
  2. 서버 및 애플리케이션을 빌드하고 배포 환경에 따라 절대 바뀌지 않는 불변 이미지를 빌드한다.
     
  3. 서버를 시작할 때 환경 변수나 애플리케이션의 마이크로서비스가 읽어 올 수 있는 중앙 저장소를 이용해 애플리케이션 구성 정보를 주입한다.

3.1 구성(그리고 복잡성) 관리

애플리케이션 구성 관리 원칙

분리: 물리적인 서비스 배포와 서비스 구성 정보를 분리, 구성 정보를 서비스 인스턴스와 함께 배포하면 안됨

추상화: 서비스 인터페이스 뒷 단에 있는 구성 데이터의 접근 방식을 추상화, 파일이나 데이터베이스에서 읽기보다는 REST 기반의 JSON 서비스를 사용해 구성 데이터를 조회하게 만든다

중앙 집중화: 애플리케이션의 구성 정보를 가능한 소수 저장소에 집중화

견고성: 구성 정보를 분리하고 중앙 집중화하므로 고가용성다중성을 구현할 수 있어야 한다

3.1.2 구현 선택

구성 관리 시스템 오픈 소스 프로젝트

Etcd, 유레카, 콘설, 주키퍼, 스프링 클라우드 컨피그 서버

스프링 클라우드 컨피그 서버 선택 이유

 

1. 쉬운 설치 및 사용

2. 스프링 부트와 긴밀한 통합, 구성 데이터를 애너테이션으로 읽어 올 수 있다

3. 구성 데이터를 저장할 수 있는 여러 백엔드 지원, 유레카나 콘설을 이미 사용중이면 바로 스프링 클라우드 컨피그 서버에 연결할 수 있다

4.깃 소스 제어 플랫폼과 직접 통합할 수 있다. 구성 데이터를 손쉽게 버전 관리할 수 있다

3.2 스프링 클라우드 컨피그 서버 구축

스프링 클라우드 컨피그 서버

스프링부트로 만든 REST 기반 애플리케이션

독립형 서버가 없으므로 기존 스프링 부트 애플리케이션에 내장하거나 새로운 스프링 부트 프로젝트를 만들어 내장

3.3.2 스프링 클라우드 컨피그를 위한 라이선싱 서비스 구성

스프링 클라우드 컨피그를 사용하는 스프링 부터 서비스의 구성 정보는 bootstrap.yml, application.yml 파일 중 한 곳에 설정

bootstrap.yml

서비스 애플리케이션 이름

애플리케이션 프로파일

스프링 클라우드 컨피그 서버 URI

application.yml

스프링 클라우드 컨피그 서버에 저장하지 않는 로컬에 유지하고 싶은 정보

스프링 클라우드 컨피그 서비스가 가용하지 않을 때도 사용할 수 있는 정보

3.3.5 깃과 스프링 클라우드 컨피그 서버 사용

컨피그 서버의 백엔드 저장소로 파일 시스템이 적합하지 않은 이유

개발팀이 컨피그 서버의 모든 인스턴스에 마운트될 공유 파일 시스템을 설정하고 관리해야 하므로

백엔드 저장소로 깃을 사용하면

구성 관리 프로퍼티를 저장할 떄 소스 관리의 모든 혜택을 누림

빌드 및 배포 파이프라인에서 프로퍼티 구성 파일의 배포를 쉽게 통합

3.3.6 스프링 클라우드 컨피그 서버에서 프로퍼티 갱신

스프링 클라우드 컨피그 서버

항상 최신 버전의 프로퍼티를 제공

하부 저장소의 프로퍼티를 변경하면 바로 반영

스프링부트 애플리케이션

스프링 부트 액추에이터는 @RefreshScope를 제공, /refresh 엔드포인트를 사용해 애플리케이션 구성 정보를 다시 읽어 옴

3.3.6 스프링 클라우드 컨피그 서버에서 프로퍼티 갱신

@RefreshScope

  • 애플리케이션 구성에 있는 사용자 정의 스프링 프로퍼티만 로드한다.
    데이터베이스 구성 정보처럼 스프링 데이터에서 정의된 구성은 로드 X
  • 업데이트를 수행하기위해 http://<yourserver>:8080/actuator/refresh 엔드포인트 호출

 

3.4 중요한 구성 정보 보호

프로퍼티 암호화

대칭 및 비대칭 암호화 지원

오라클 JCE jar 파일 이용

스프링 클라우드 컨피그 서버 대칭 암호화 키

운영 체제의 환경 변수 ENCRYPT_KEY

3.6 요약

  • 스프링 클라우드 컨피그 서버를 사용하면 애플리케이션 프로퍼티를 환경별로 설정할 수 있다.
  • 스프링은 스프링 프로파일을 사용해 스프링 클라우드 컨피그 서비스에서 조회할 환경 프로퍼티를 결정하고 서비스를 시작한다.
  • 스프링 클라우드 컨피그 서비스는 파일이나 깃 기반의 애플리케이션 저장소를 사용해 애플리케이션 프로퍼티를 저장할 수 있다.
  • 스프링 클라우드 컨피그 서비스는 대칭 및 비대칭 암호화를 사용해 중요한 정보를 암호화할 수 있다.

스프링 클라우드 컨피그 서버로 구성 관리

By Sungbin, Song

스프링 클라우드 컨피그 서버로 구성 관리

  • 129