설정 파일 갱신은 자동이 아니다. 서비스를 재시동해야 변경사항이 반영된다.
분명 재시동 없이 설정 파일을 변경할 수 있는게 장점이라고 했는데 뭐가 문제일까?
Config Server는 부하를 줄이기 위해 실행 시점에 한 번
설정 정보를 읽고 로컬에 캐싱해두기 때문이다. 따라서, 설정 파일 변경을 전파하고 자동으로 갱신하기 위한 설정이 필요하다.
여러 방법 중 Spring Cloud Bus와 RabbitMQ를 활용해보겠다.
다른 방법들이 궁금하다면 망나니 개발자 블로그를 참고하면 된다.
Spring Cloud Bus는 분산 시스템 환경에서 각각의 노드나 서비스를 연결시켜주는 경량 메시지 브로커이다.
이를 활용해 Config.를 Broadcast하여 변경 사항을 전파할 수 있다.
- 개발자가 설정 정보를 변경하여 Github Repo에
Push
Spring Cloud Bus
가 Message Broker로 변경된 설정 정보에 대한Message 발행
Message Broker
는 설정 정보를 저장- 개발자가 설정 정보 변경 사실을 Config Server에 알려줌
- Message Broker가 해당 메시지를 Subscribing하고 있는
Application에 Broadcasting
- 각 Application은 Spring Cloud Bus가 받은
설정 정보를 반영
Kafka를 사용할 수도 있지만 구성정보 변경은 메시지 유실 등의 문제가 생기면 안되기 때문에 메시지 신뢰성
을 보장하는 AMQP 프로토콜을 구현한 RabbitMQ를 선택했다.
RabbitMQ를 설치하는 과정은 이 곳을 참고하여 진행했다.
Spring Cloud Bus를 활용해서 설정 정보를 전파할 수 있도록 설정해보자.
Config Server와 Client쪽 모두에 다음 의존성을 추가해준다.
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
그리고 특별히 Config Server에는 하나를 더 추가해준다.
implementation 'org.springframework.cloud:spring-cloud-config-monitor'
RabbitMQ를 통해 Config Server는 설정 정보를 push하고, Client는 Message를 수신할 수 있도록 application.yaml에 RabbitMQ 정보를 추가한다.
spring:
rabbitmq:
host: {주소} // localhost 또는 rabbitmq가 떠있는 서버 주소
port: 5672
username: {rabbitmq username}
password: {rabbitmq password}
설정 파일에 변경 사항이 생겨 저장소에 push하면 변경 사항이 자동으로 전파
가 이루어지도록 Github의 Webhooks
를 사용한다.
https://mangkyu.tistory.com/253
https://velog.io/@lopahn2/Spring-Cloud-Config-Server
https://wonit.tistory.com/512
https://scbyun.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-RabbitMQ%EB%A5%BC-%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
https://madplay.github.io/post/spring-cloud-config-using-git-webhook-to-auto-refresh
https://wonit.tistory.com/502
https://jong-bae.tistory.com/27
https://docs.spring.io/spring-cloud-config/docs/current/reference/html/
읽고 보니 준님이였군요
잘읽고 갑니다 사우님!