1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (186)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (26)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본
🌱 SPRING

[Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본

2021. 10. 10. 15:31

 

시작하기 전에


스프링 또는 스프링 부트 개발을 하다 보면 *.properties 혹은 *.yml로 관리되는 환경설정 값이 필연적으로 존재할 수밖에 없습니다. 그리고 이러한 설정 값 중에서는 노출되어서는 안 되는 정보도 있을 수 있고, 운영 중 변경될 여지가 있는 설정도 존재할 수 있습니다.

 

지금 생각나는 설정들

  • DataSource 정보 (JDBC url, username, password 등)
  • 암복호화 관련 Salt Key
  • API의 인증키 또는 엔드포인트 정보
  • @ConditionalOnProperty로 생성 여부가 결정되는 Bean의 설정값
  • Object Storage를 사용하지 않는다면, 파일 업로드 경로

 

그런데 이러한 많고 다양한 설정들은 배포되는 스테이지에 따라 그 값이 다를 것입니다. 때문에 관리되어야하는 설정의 갯수는 설정수 x 스테이지 수로 늘어날것입니다. 또, 설정이 변경될 때마다 다시 배포가 이루어져야 하기 때문에 아무래도 번거롭고 시간이 소요될 수 밖에 없습니다. 만약 설정값에 민감한 정보가 포함되어있다면 소스코드와 SCM에 그대로 노출됩니다. 

 

설정값을 분리하지 못했을 때 문제점

  • 설정이 많아질수록 관리가 어려움
  • 설정 변경 시, 배포->빌드 단계가 필요
  • 민감 정보가 소스코드와 SCM에 노출

 

Spring Cloud Config란


이러한 문제를 해결하기 위해, Spring Cloud Config는 설정을 외부로 분리할 수 있는 기능을 제공합니다. Spring Cloud Config는 외부에 설정 서버(Config Server)를 구성하고 설정값을 관리합니다. 클라이언트(Config Client)에서는 애플리케이션 구동 시 설정 서버로부터 설정을 응답받는 구조로 동작하게끔 되어있습니다.

 

주요 기능

  • 분산된 환경에 외부에서 정의 및 관리된 설정을 제공
  • 환경 및 스테이지별 설정을 중앙에서 관리
  • 키-값 형태, YAML 형태로 설정 제공
  • 다양한 형태의 설정 저장소를 지원 (Git, File, Vault, JDBC, Redis, S3 등)
  • 재배포 없이 변경된 설정을 실시간으로 적용시킬 수 있음
    (이 경우에는 SpringBoot Actuator가 추가로 필요합니다.)
  • Config 서버와 클라이언트에 설정값 암복호화 제공

 

설정 방법

  • 의존성 추가
    • 설정 서버 : spring-cloud-config-server
    • 클라이언트 : spring-cloud-starter-config
  • Spring Boot 2.4 이전 : bootstrap.yml 파일에 Config Server URI 지정
    spring:
        cloud:
            config:
                uri: [Config Server URI]​
  • Spring Boot 2.4 이후 : application.yml 파일에 Config Server URL 지정
    spring:
        config:
            import: “optional:configserver:http://configserverdomain.com”​

 

Spring Cloud Config는 어떻게 동작할까요?


클라이언트 구동 시

  1. 클라이언트에서 Config Server로 설정값을 요청합니다.
  2. Config Server에서 설정 저장소로부터 최신 설정값을 읽어옵니다.
  3. Config Server에서 클라이언트로 읽어온 설정값을 응답합니다.
  4. 클라이언트 애플리케이션에 설정이 적용되고 구동됩니다.

 

운영중 설정값이 변경되었을 때

  1. 개발자/관리자가 설정 저장소에서 설정값을 변경합니다.
  2. 설정을 갱신할 클라이언트에 POST /actuator/refresh 요청을 보냅니다.
  3. 클라이언트에서 Config Server로 설정값을 요청합니다.
  4. Config Server에서 설정 저장소로부터 최신 설정값을 읽어옵니다.
  5. Config Server에서 클라이언트로 읽어온 설정값을 응답합니다.
  6. 클라이언트 애플리케이션에 변경된 설정이 적용됩니다.

 

Spring Cloud Config with Vault


앞서 Spring Cloud Config에서 제공하는 설정 저장소에 대해 간단히 목록 정도로 알아보았는데, 이번 포스팅에서는 Vault를 사용해보도록 하겠습니다.

 

Vault 란

  • API Key, Password 등 민감한 정보를 안전하게 관리 및 접근할 수 있도록 하는 오픈소스 프로젝트
  • WEB UI 제공
  • 계정 및 토큰별 접근 권한 제어 가능
  • Spring Cloud Config에서 설정 저장소로 Vault를 지원하고 있음
  • https://www.vaultproject.io/

 

다음 포스트 실습편에서 이어집니다!

 

[Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습

앞선 포스트 기본편에서 이어집니다! [Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본 시작하기 전에 스프링 또는 스프링 부트 개발을 하다 보면 *.properties 혹은 *.yml로 관리되는 환경설정

logical-code.tistory.com

 

References


 

Spring Cloud Config

Many source code repository providers (such as Github, Gitlab, Gitea, Gitee, Gogs, or Bitbucket) notify you of changes in a repository through a webhook. You can configure the webhook through the provider’s user interface as a URL and a set of events in

docs.spring.io

 

 

GitHub - spring-cloud/spring-cloud-release: Spring Cloud Release Train - dependency management across a wide range of Spring Clo

Spring Cloud Release Train - dependency management across a wide range of Spring Cloud projects. - GitHub - spring-cloud/spring-cloud-release: Spring Cloud Release Train - dependency management acr...

github.com

 

 

Getting Started with Vault UI | Vault - HashiCorp Learn

Manage Vault environment as well as your secrets using Vault UI.

learn.hashicorp.com

 

 

GitHub - hashicorp/vault: A tool for secrets management, encryption as a service, and privileged access management

A tool for secrets management, encryption as a service, and privileged access management - GitHub - hashicorp/vault: A tool for secrets management, encryption as a service, and privileged access ma...

github.com

 

java - Vault 백엔드에서 스프링 클라우드 서버가 모든 프로파일에 액세스하지 않음

HashiCorp Vault를 처음 사용하고 비밀, 키 등을 저장하기위한 백엔드로 Vault가있는 스프링 클라우드 구성 서버를 설정했습니다. 문제는 다음과 같이 기본 수준으로 저장된 비밀에 액세스 할 수 있다

www.python2.net

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'🌱 SPRING' 카테고리의 다른 글

[Spring Security] 스프링 시큐리티 주요 아키텍쳐 1 - DelegatingFilterProxy, FilterChainProxy  (0) 2021.12.06
[Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습  (4) 2021.10.10
[SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker  (0) 2021.05.16
[SpringBoot] 컨트롤러, View(JSP) 작성하기  (0) 2020.05.30
[SpringBoot] 스프링 부트 프로젝트 생성  (1) 2020.05.30
    '🌱 SPRING' 카테고리의 다른 글
    • [Spring Security] 스프링 시큐리티 주요 아키텍쳐 1 - DelegatingFilterProxy, FilterChainProxy
    • [Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습
    • [SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker
    • [SpringBoot] 컨트롤러, View(JSP) 작성하기
    1HOON
    1HOON

    티스토리툴바