사내 위키에 정리해뒀던 Spring Cloud Config 메모 두 개를 옮깁니다. 하나는 암호화된 설정 값을 확인하는 방법, 다른 하나는 바꾼 설정을 재배포 없이 반영하는 방법입니다.
서버 주소는 사내 것이라 지웠습니다. 그 자리는 각자 config 서버 주소로 바꿔서 보시면 됩니다.
Spring Cloud Config 서버 설정 값 암/복호화 방법
config 저장소에 가보면 암호화된 설정 파일들이 잔뜩 있는데, 이를 복호화 하는 방법에 대해 설명 하고자 합니다.
config-yml repository에 어떤 설정파일에 들어가보면 {cipher}암호화된 값 으로 되어 있는데, 이걸 확인하기 위해선 config 서버를 이용해야 합니다.
@EnableConfigServer
@EnableConfigServer가 선언된 애플리케이션을 실행하게 되면, 기본적으로 제공되는 api가 있습니다.
/encrypt: config 서버에 설정된 key 값으로 대칭키를 이용한 암호화/decrypt: config 서버에 설정된 key 값으로 복호화/${yml파일이 모여있는 repo의 branch명}/${설정 파일 명}.yml- ex)
/main/service-dev.yml
/encrypt는 요청시 POST 로 해야하며, body는 content-type: text/plain 로 전달해야 합니다.
POST : http://{config-서버-주소}/encrypt
POST : http://{config-서버-주소}/decrypt
GET : http://{config-서버-주소}/main/service-dev.yml
여기서 한 가지 짚어둘 게 있는데, 이 세 개는 인증 없이 열려 있으면 그대로 위험합니다. 주소만 알면 누구나 /decrypt에 암호문을 넣어 평문을 받아볼 수 있으니까요. 사내망 밖으로 노출되지 않게 두는 게 맞습니다.
spring config 설정 갱신 방법
현재 존재하는 문제점
기본적으로 application들이 빌드 되는 시점에서 config 정보를 가지고 오고, 이후에는 다시 빌드하지 않으면 설정 정보 반영이 되지 않는다.
그러면, 서비스들을 다시 빌드해서 올리면 해결되지 않는가? 할테지만, 설정이 변경되었다고 해서 다시 빌드하여 배포하는 경우 서비스가 엄청나게 많이 존재한다면 이 방법이 과연 옳을까?
위 이슈를 해결하기 위해 바로 Actuator를 활용 한다.
Actuator란?
운영중인 production 모니터링, 관리할 수 있게 도와주는 라이브러리다. 해당 서비스의 헬스체크, api 정보 등을 모니터링 할 수 있게 해준다.
그리고 변경된 설정 정보를 갱신할 수 있는 기능을 제공한다.
refresh
refresh는 설정 정보를 다시 config 서버에서 fetch 받도록 해준다. 사용 방법은 POST : /actuator/refresh 로 요청하면 된다.
그러면 해당 서비스는 변경된 설정정보를 다시 시작하지 않아도 반영이 된다.
하지만, 여기서도 문제점이 여러 개의 서비스가 존재한다면 모두 /refresh를 해줘야 한다는 점이 마음에 걸린다.
그래서 actuator는 bus-refresh라는 것을 제공한다.
bus-refresh란?
msa 환경에서, 하나의 서비스의 설정정보 변경 시 모든 서비스에 설정 정보 변경 상태를 전달하여, 모든 서비스에 설정정보를 갱신할 수 있도록 해준다.
rabbitmq와 kafka 두 가지 중 하나를 사용하여 설정정보 변경을 각 서비스에 전파 할 수 있다.

kafka로 설정 시, boot-strap 서버 url을 적어준다. spring.config.bus.destination은 전파를 공유하고자 하는 토픽명을 적어준다. (기본값은 springCloudBus)
그리고, actuator에 bus-refresh를 넣어주고, 관련 의존성을 추가 해준다. (…-bus-kafka)
spring:
cloud:
bus:
enabled: true
destination: springCloudBus
kafka:
bootstrap-servers: {브로커-주소}
management:
endpoints:
web:
exposure:
include: refresh, busrefresh
기본 설정으로 topic은 springCloudBus 라는 토픽을 이용하여 전파를 진행 한다.
extra-refreshable 설정은, 설정 정보 갱신 시 db정보도 가져오는데 db정보는 불변이어야 하기 때문에 해당 설정을 추가함으로써 제외 할 수 있다고 합니다.
똑같이 POST: /actuator/busrefresh 로 요청하면 동일하게 설정한 모든 서비스에서 설정 정보가 갱신됩니다.
204라고 뜨는 게 정상입니다.