msa, 분산시스템에서 서버와 클라이언트 구성에 필요한 설정정보(yml파일)를 외부 시스템에서 관리해주는 것을 의미한다.
이는 하나의 중앙화된 저장소(서버)에서 구성요소 관리 가능한 것을 말한다.
- 이러한 서버의 장점은 다시 빌드, 배포하지 않고 바로 적용이 가능하다는 점이다.
위의 그림처럼 설정서버를 두고 git,로컬저장소 등등에 설정파일들을 모아놓고 알맞는 micro서비스에 설정파일을 fetch해주는 방식이다.
yml 파일이 변경될 경우 다시 빌드하고 다시 배포해야하는 번거로움이 있다.
이걸 해결하기 위해 각각의 서비스들이 설정파일을 갖는것이 아니라 외부에서 설정파일을 관리할 수 있는 방법이 바로 Spring Cloud Config이다.만약 설정파일이 변경될 경우 변경된 값을 어떻게 가져올까?
설정 파일이 변경될 경우 그 값을 fetch(가져올)하는 방법은 3가지가 존재한다.
1. 서버(해당 설정파일을 사용할 서버)를 재기동 - 비추
2. Actuator refresh 사용
=>Spring Actuator란 application의 상태, 모니터링을 할 수 있는 것을 의미한다.
(Actuator를 이용하면 bean들이라던지 health 와 같은 정보들을 모니터링(확인) 할 수 있다)
=> Actuator의 refresh를 사용하려면 post방식을 사용하여 /actuator/refresh로 변경된 설정파일을 갱신 시킬 수 있다(재기동 하지 않고도)
3. Spring cloud bus 사용
스프링의 각 컴포넌트들의 설정에 필요한 환경 변수 값들을 모아놓은 파일입니다.
스프링 부트에서는 application.properties라는 기본 profile을 제공한다.
여기서 profile의 경우 우선순위가 있는데,서비스 이름-<profile>.yml
>>서비스 이름.yml파일
>>application.yml
의 순으로 우선순위가 높다고 할 수 있다.
이때, 우선순위가 낮은 것부터 설정파일이 읽어지게 된다. 그렇기 때문에 동일한 값을 지니는 설정정보가 있다면 덮어씌워지게 되므로 주의해야한다.
우선 Spring Cloud Config를 위한 서버를 만들어야 한다.
@SpringBootApplication @EnableConfigServer public class ConfigServiceApplication { public static void main(String[] args) { SpringApplication.run(ConfigServiceApplication.class, args); } }
@EnableConfigServer
: 해당 애플리케이션(서버)를 설정서버로 이용하겠다는 의미를 가진 어노테이션이다.이후 각각의 서비스들에 3가지 설정을 해주어야 한다.
- gradle 의존성 설정
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-config'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-bootstrap'
- Actuator설정
management.endpoints.web.exposure.include의 의미
Actuator의 기능을 포함할 endpoint들을 설정한다는 의미이다.
endpoint들의 종류는 여러개이며, 대표적으로 refresh, health, beans 등등이다.
해당 속성을 적용될 서비스들의 설정파일(application.yml)에 넣어주면된다.
(예를들어 apigateway, user-service 등등)management: endpoints: web: exposure: include: refresh, health, beans
위의 설정은 Actuator의 refresh, health, beans를 사용하기 위해 설정해준 것이다.
3. 서비스에 알맞는 설정파일 적용하기
config-service에 등록할 설정파일과 해당 설정파일을 적용할 서비스의 설정(yml)파일에 spring.cloud.config 속성을 넣어준다.
spring.cloud.config이 속성은 config 서버의 경로(uri)와 가져올 설정파일의 정보(이름:name)를 작성할 수 있다.cloud: config: server: git: uri: file://C:\Users\BTC-N06\Documents\git-local-repo # 설정파일이 있는 로컬 경로
위는 config-service의 yml파일의 일부
spring: cloud: config: uri: http://127.0.0.1:8888 # 가져올 설정파일이 있는 서비스 ip:포트 name: ecommerce # 가져올 설정파일의 이름
위는 user-service(micro서비스의 한종류)의 yml파일(bootstarp.yml)
uri를 사용할 수 있다.
ip:포트번호/가져올설정이름/profile(default,dev,등등)
bootstrap.yml 파일은 spring cloud config파일이다.
스프링 부트 2.4.x버전이후의 경우 application.yml과 통합되었지만
이전 버전에서는 분리되어있었다.
즉, spring cloud config를 위한 파일이다.