MSA with SPRING CLOUD(4) Configuration Service

InSeok·2023년 3월 23일
0

Spring Cloud Config

분산 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보(application.yml or application.properties)를 외부 시스템에서 관리

하나의 중앙화 된 저장소에서 구성요소가 관리 가능하다.

각 서비스를 다시 빌드하지 않고, 바로 적용이 가능하며, 동적으로 환경 변경이 가능하다. 또한, 애플리케이션 배포 파이프라인을 통해 환경에 맞는 구성 정보를 사용한다.

https://user-images.githubusercontent.com/37062337/118347306-30406c80-b57d-11eb-95e0-99dcc0da9176.png

그럼 이러한 Config 설정들의 우선순위는 어떻게 될까?

Spring Cloud Config에서 우선순위들을 설정할 수 있다.

https://user-images.githubusercontent.com/37062337/118347782-bf02b880-b580-11eb-9542-71910815f707.png

  • 위의 그림 처럼 application.yml > application-name.yml > application-name-profile.yml 순서로 설정된다.
  • application-name.yml : 각 마이크로서비스의 이름을 명시한 설정 파일
  • application-name-profile.yml : 테스트, 로컬, 배포버전 마다 설정이 다를 건데, 이 다른 환경마다 설정하는 파일이라고 보면 된다. 예를 들어 로컬 개발환경이면 application-name-dev.yml, 배포버전이라면 application-name-prod.yml로 설정하기

그리고 각 마이크로서비스들 마다 필요한 설정들을 Spring Cloud Config에 불러오면 적용이 된다.

ecommerce.yml을 Spring Cloud Config에 작성

yml파일들을 모아두는 폴더 안에 yml파일 작성하기 (ecommerce.yml)

token:
  expiration_time: 86400000# 하루secret: user_token# jwt 생성 용도gateway:
  ip: 각자 아이피 설정

Config Server 생성 및 application.yml 작성

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: file//{fileURL 경로 작성}

fileURL 작성시 윈도우 운영체제의 경로를 작성할 것. 또한 경로의 맨 앞에 "/" 붙이기!

Config Server 프로젝트 실행 클래스에 @EnableConfigServer 추가

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

각 마이크로서비스에 Config 정보를 읽어오기

필요한 라이브러리

  • spring-cloud-starter-config
  • spring-cloud-starter-bootstrap

마이크로서비스에 bootstrap.yml 추가

해당 내용을 저장하면 애플리케이션에 설정된 yml 파일들 보다 먼저 적용된다.

spring:
  cloud:
    config:
      uri:# config server의 uriname: ecommerce# yml 파일 명

Spring Boot Actuator

  • Appication의 상태를 모니터링
  • Config가 변경될 경우 서버를 재기동하는 것은 좋지 않다. 재부팅하지 않은 상황에서 config 정보들을 가져올 수 있다.
  • Metric 수집을 위한 Http End point 제공
  • 디펜던시 하나를 추가하면 되기 때문에 사용법이 간단하다.

설정하기

  • 우선 내 UserService에서 시큐리티를 적용해 놓았다. 이 actuator end points를 사용하려면 시큐리티 설정을 추가해야 한다.
    http.authorizeRequests().antMatchers("/actuator/**").permitAll();
  • application.yml 설정
    management:
      endpoints:
        web:
          exposure:
            exclude: refresh, health, beans

Github Repository에서 관리하기

Github Repository 추가 및 연동

  • 깃허브에서 레포지토리를 하나 생성하기. (public도 가능하지만 웬만하면 private로 하는게 좋을 것 같다.)
  • 여러 yml들이 있는 폴더를 깃허브와 연동
  • application.yml을 다음과 같이 수정하기
    spring:
      application:
        name: config-server
      cloud:
        config:
          server:
            git:
              uri: github url
              username: github username
              password: github password

각 마이크로서비스 마다 다른 yml을 등록하고 싶다면?

spring:
  cloud:
    config:
      uri: {Spring Cloud Config가 실행되고 있는 URL}
      name: {yml 메인 파일 이름}
  profiles:
    active: {yml 프로필 파일명}
  • profiles.active : 예를들어 application.yml, application-test.yml, application-prod.yml 이 세가지 설정파일이 있을 경우 prod yml을 해당 마이크로서비스에 적용하고 싶다면 prod를 기입하자.

본 포스팅은 'Spring Cloud로 개발하는 마이크로서비스 애플리케이션' 강의를 공부한 포스팅입니다.

출처 : Spring Cloud로 개발하는 마이크로서비스 애플리케이션

profile
백엔드 개발자

0개의 댓글