MSA

[ MSA ] Spring Cloud Config 소개

qpmi1zm29 2024. 1. 10. 09:48

Spring Cloud Config는 각 MSA 서비스에서 사용되는 설정 정보들을 하나의 서버에서 일괄적으로 관리할 수 있게 해줍니다.

즉, 어플리케이션의 설정 정보를 어플리케이션 내부가 아닌 외부에서 관리하는 것인데요,

이렇게 Config 서버를 따로 구축하여 관리하였을 때, 설정 정보가 변경되어도 각 서비스들에 변경된 정보를 반영하기 위해 재빌드/배포를 하지 않아도 된다는 장점이 있습니다.

( 단순히 Config 서버만 사용하는 것이 아니라, Actuator API를 사용하거나, Spring Cloud Bus를 사용해야 하긴 합니다. )

 

 

Config 서버가 참조하는 스토리지는 보통 로컬 디렉토리나, 깃 로컬 혹은 깃 리모트 저장소를 많이 사용합니다.

물론 svn과 같은 형상 관리 도구도 Config 서버가 참조하는 스토리지로 사용이 가능합니다.

 

보통 하나의 서비스라고 하더라도, 개발 환경에 따라 설정 값이 변경되는 경우가 많은데요.

Config 서버에서는 서비스에 spring.profiles.active만 설정해주면 자동으로 [어플리케이션 이름]-[profile이름].yml 와 일치하는 설정정보를 서비스에게 알려줍니다.

 

Config 서버가 설정 파일을 찾는 순서 입니다.

서비스에 profile이 설정되어 있다면, [어플리케이션 이름]-[profile이름].yml 이 있는지 가장 먼저 확인을 하고,

엎으면 왼쪽 순서대로 해당 파일이 존재하는지 확인합니다.

 

 

Spring Cloud Config 서버는 기본으로 8888 포트를 사용하며, 웹 호스팅이 가능합니다.

설정파일의 이름이 test.yml 이고, profile이 설정되어있지 않으면, 아래와 같이 설정 파일의 정보를 확인할 수 있습니다.

 

http://localhost:8888/test(파일 이름)/default (프로파일)

 

 

Config 서버 설정

 

                                                                                                                                                                                                      먼저, spring-cloud-config-server 의 디펜던시를 추가해줍니다.

 

 

그리고, Application 클래스 파일에 @EnableConfigServer 어노테이션을 붙여줍니다.

해당 어노테이션을 통해 스프링 부트가 기동되면서 autoConfiguration을 거치면서 서비스를 Config 서버로 설정해줄겁니다.

 

local git repository를 참조하는 설정

 

위와 같이 Config 서버가 참조하는 스토리지를 설정해줍니다. 제 로컬 깃 디렉토리에 존재하는 설정 파일들을 참조하므로 file 프로토콜을 사용하여 경로를 표현하였습니다. 현재는 Discovery server에 등록하는 부분은 생략되었습니다.

 

 

위 설정은 remote git repository를 스토리지로 사용할  때의 설정입니다.

uri 경로만 git 주소로 변경해주면 되는데, private repository일 경우에는 username과 password를 설정해주어야 합니다.

 

 

위 설정은 local directory를 스토리지로 사용한 경우인데, 특이한 점이라면 Config 서버에 spring.profile.active 를 native로 설정한다는 점 입니다.

 

 

  Config 서버를 사용하는 서비스 설정

                                                                                                                                                                                                  dependency에 spring-cloud-starter-config 와 spring-cloud-starter-bootstap 의존성을 추가해줍니다.

( config 라이브러리의 버전이 올라가면서 bootstrap에 대한 부분이 생략되었다고 합니다. )

 

 

 

application.yml과 같은 경로에 bootstrap.yml 파일을 생성합니다.

bootstrap.yml은 application.yml과 마찬가지로 환경설정에 대한 파일인데,

차이점은 스프링 부트가 기동할 때, bootstrap.yml을 더 먼저 읽는 점입니다.

( Config 서버 설정을 application.yml 에 하여도 무방합니다. )

 

 

만약 spring.profiles.active를 설정하지 않는다면, 사용자 서비스는 Config 서버로부터 userservice.yml 파일의 내용을 전달 받을 것입니다.

위와 같은 설정으로는, 스토리지에서 userservice-dev.yml로 되어있는 설정 파일의 내용을 전달 받겠죠??

 

 

 

 

Config 서버와 관련된 설정이 끝났지만, 여기까지만 설정을 하면 설정 파일에 변경 내용이 생길때마다 사용자 서비스를 재기동하여 Config 서버로부터 설정 정보를 패치해와야 합니다. 

다음 게시글에서는 자동으로 서비스를 재빌드/기동 하지 않고 변경된 서비스 설정 정보를 적용하는 방법을 알아보겠습니다.