제5장 Spring Cloud Config - Config Client 마무리
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 로 만들어진 인스턴스는 갱신이 되지 않는다는 것입니다.
당연히 해결방법이 있을거라고 생각합니다. 제가 아직 찾지 못했을 뿐이겠죠. ㅎㅎ
알게되면 추가로 포스팅하겠습니다.
끗 'ㅅ'