본문 바로가기
Spring/MSA

Spring cloud config 설정

by clearinging 2021. 6. 25.
반응형

목적

  • 모든 msa에서 config(yml, properites)를 따로 관리하게 된다면 수정 및 보완에 불편하기 때문에 config를 관리해주는 Module 생성

config server 사용법

Git을 이용한 설정

  1. Git repo를 새로 만든다.

yml 설정 파일 모음

  1. config 공통 설정 정보가 들어있는 yml 파일 생성
  • yml 파일 설정 우선순위

application.yml -> application-name.yml -> application-name-.yml

  • 현재 예시에서는 ecommerce.yml을 생성
token:
  expiration-time: 86400000 # 하루
  secret: spring_sercret_key
  1. Config Server 프로젝트 생성

config server dependency 추가

  • Config Server Dependency 추가
  • main문에 ConfigServer 설정을 가진다는 것을 알리는 annotation 추가
@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }
}
  1. config service project에 yml 파일 설정
server:
  port: 8888

spring:
  application:
    name: config-server

  cloud:
    config:
      server:
        git:
#          uri: https://<git repo>.git
#          private repo 일 경우 username passowrd 추가하기
#          username: abcd
#          password: abcd
          uri: file:///D:\Programs\Intellij\Programs\webprojects\class-project\sping-cloud-config
  • server port 설정(다른 msa 서버에서 접근해야 하기 때문에 포트 확인 필요
  • git을 사용할 경우 git.uri로 설정
  • local file 디렉토리인 경우
    • config(yml)파일이 존재하는 디렉토리의 파일들을 모두 git에 commit을 해준 상태야 합니다.
    • file: 키워드를 넣어서 연결
      • windows인경우 : file 다음에 ///로 넣어 줘야합니다.
    • uri에 config yml파일들이 존재하는 위치를 넣어 준다
  • git 일경우 : git url을 넣어 주면 됩니다.
  1. 프로젝트 실행 후 접속해서 확인
    config 설정 정보 url로 확인
  • uri는 localhost로 할 경우 확인하기 어렵고 127.0.0.1 과 같은 ip주소나, domain주소를 사용해야지 접속 가능합니다.
  • ecommerce.yml 파일 일 경우 url를 http://127.0.0.1:8888/ecommerce/default로 접속해서 볼 수 있습니다.

Local 파일 디렉토리 사용하기

  1. config-service Project application.yml 파일 수정
    local file 설정
  • profiles 로 native 설정
  • native.search-locations에 file 위치를 설정해서 yml 파일을 load한다.

RabbitMQ로 Config 연동

  1. config-service, config file을 받을 프로젝트에 gradle 추가 dependency 추가
dependencies { 
    // ...
    implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
    // ...
}
  1. config-service application.yml 코드 추가

config service 추가

  1. RabbitMQ 연경을 위해서 다른 MSA 프로젝트의 application.yml 정보 추가
  • 다른 msa application에서 application.yml을 재외하고, 추가적으로 추가해야하는 정보는 아래에 참고해주세요.

다른 msa 서비스

MSA 프로젝트에 Config Service 연결

  1. gradle에 dependency 추가
dependencies { 
    //... 
    implementation 'org.springframework.cloud:spring-cloud-starter-config' 
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' 
    implementation 'org.springframework.boot:spring-boot-starter-actuator' 
    //... 
}
  1. bootstrap.yml 파일 추가
  • gradle에 추가한 spring-cloud-starter-bootstrap를 통해서 bootstrap.yml파일을 load 하게 됩니다.
  • application.yml이나 다른 우선순위가 있는 yml파일이 있으면 그 yml파일과 bootstrap.yml 둘다 load 됩니다.
spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce
  profiles:
    active: dev
  • config-service의 uri를 추가
  • 만약 profile을 설정하고 싶을 경우 profiles를 넣어 주면됩니다.
  • 위와 같이 설정을 하게 된다면 config server와 현재 msa 서비스 서버랑 연결만 하였습니다.
  1. config server와 msa service서버와의 기능 추가
  • application.yml 파일에 코드 추가
management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, busrefresh
  • http://{baseurl}:{port}/actuator/{exposure.include}로 호출 가능
  • baens : 현재 msa의 service(ex: user-service)에 등록된 bean의 정보를 보여주는 것

등록된 bean 리스트

  • refresh : config yml 정보가 수정되었을 때 api를 post 형태로 호출하므로서 각 msa에 변경된 yml파일을 동기화 시키기 위해서 사용
    • yml 수정이 없었을 때
    • yml 수정하고, git에 commit을 했을 때
    • 수정된 정보의 key만을 response로 반환해준다.
  • busrefresh : rabbitmq를 사용해서 config 설정 정보를 refresh하는 방법이다.
    • refresh인경우 msa에서 gateway service와 하위에 묶여있는 service를 모두 각각 호출 해줘야지 config설정정보가 update되는 한계가 발생
    • busrefresh는 message bus를 통해서 gateway에서 역겨 있는 모든 service의 config를 refresh해주는 역할을 한다.

rabbitmq를 통한 update 결과

config 설정 프로젝트를 submodule로 저장하는 방법

https://clack2933.tistory.com/17

반응형

'Spring > MSA' 카테고리의 다른 글

Spring Cloud Contract를 이용한 Test 코드 작성  (0) 2022.09.17
Kafka 설치와 환경 구축  (2) 2021.07.05
Gradle Multi Module 프로젝트  (2) 2021.06.12