MSA with SPRING CLOUD(4) Configuration Service

InSeok·2023년 3월 23일
0

Spring Cloud Config

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

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

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

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

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

  • 위의 그림 처럼 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개의 댓글