Spring/Cloud

제5장 Spring Cloud Config - Config Client 마무리

홍캐리 2016. 7. 22. 14:29

0. 본 포스팅은

properties 를 영역별로 나누어 Config Server 로부터 받는 properties 를 Bean 에 바인딩하는 방법과,

Application 이 자신의 properties는 물론, 바라보는 Config Server 의 properties 도 포함하여

갱신하는 방법을 안내합니다.


1. properties 계층화

1) property key 변경

아래와 같이 원래 greeting 이었던 property key 를 devguide.greeting 으로 바꿔줍니다.


2) properties 를 Binding 할 Bean 생성

평범한 Bean 하나를 만들어 @ConfigurationProperties 어노테이션을 추가하고, prefix 로 devguide 를 지정합니다.

이로써 DevguideConfigs 는 devguide. 로 시작하는 properties 들을 binding 합니다.

이걸 잘 활용하여 영역별로 별도의 Config 용 Bean 을 만들어서 Binding 하여 사용하면

properties 들을 다 외우고 있지 않아도 쉽게 사용할 수 있습니다.


2. Properties 주입

이제 준비된 ConfigurationProperties Bean 을 DI 하여 사용해볼 차례입니다.


1) properties di

DevguideConfigs 를 DI 하기 위해 아래와 같이 AccountController 를 수정합니다.


2) 확인

아래와 같이 @Value 로 주입된 값과 함께, DI 된 DevguideConfigs 의 값도 출력되는 걸 확인할 수 있습니다.


3. Properties 갱신

성격이 급하거나 호기심이 많으신 분들은 해보셔서 아시겠지만, 분명 재시작없이 properties 값의 갱신이 가능하다고 했는데도

git repository 에 있는 설정값을 바꿔봤자 Config Client 에서는 갱신이 되고 있지 않습니다. 저도 무척이나 당황했는데요.

Config Client 의 configprops 들을 refresh 해줘야 합니다.


1) 설정값 변경

변경이 되는지 확인을 위해 local profiles 의 properties 값 일부를 변경합니다.


2) Config Client 를 refresh 해줍니다.

아래 툴은 Chrome App 중 하나인 Post Man 입니다. Config Client 에 POST 로 /refresh 를 날려주면 갱신합니다.

아래 이미지를 보면 갱신된 properties 가 있음을 확인할 수 있습니다.


3) 다시 확인

다시 확인해보면 아래 처럼 @Value 로 선언된 녀석은 갱신되지 않고, ConfigurationProperties 로 DI 받은 녀석은

갱신된걸 보실 수 있습니다. 지난 번에 언급했던 것처럼 @Value 어노테이션은 static 이기 때문에 갱신되지 않는 것 같습니다.


4. 마치며

총 5장으로 나누어 Config Server, Config Client 를 활용하여 Application 에서 보다 쉽게 properties 를 관리 및 사용해봤습니다.

이 시점에서 아쉬운 점이 두가지 남겨져 있습니다. 

첫번째는 Config Client 가 /refresh 를 하지 않으면 갱신되지 않는다는 것.

두번째는 @Value 로 만들어진 인스턴스는 갱신이 되지 않는다는 것입니다.

당연히 해결방법이 있을거라고 생각합니다. 제가 아직 찾지 못했을 뿐이겠죠. ㅎㅎ

알게되면 추가로 포스팅하겠습니다.


끗 'ㅅ'