Spring Cloud Config 자동화하기

onlyJoon·2024년 1월 30일
2

MSA

목록 보기
3/5
post-thumbnail

🧐설정 파일 갱신은 어떻게 해?

설정 파일 갱신은 자동이 아니다. 서비스를 재시동해야 변경사항이 반영된다.
분명 재시동 없이 설정 파일을 변경할 수 있는게 장점이라고 했는데 뭐가 문제일까?

Config Server는 부하를 줄이기 위해 실행 시점에 한 번 설정 정보를 읽고 로컬에 캐싱해두기 때문이다. 따라서, 설정 파일 변경을 전파하고 자동으로 갱신하기 위한 설정이 필요하다.

여러 방법 중 Spring Cloud Bus와 RabbitMQ를 활용해보겠다.

다른 방법들이 궁금하다면 망나니 개발자 블로그를 참고하면 된다.

🤑Spring Cloud Bus

Spring Cloud Bus는 분산 시스템 환경에서 각각의 노드나 서비스를 연결시켜주는 경량 메시지 브로커이다.

이를 활용해 Config.를 Broadcast하여 변경 사항을 전파할 수 있다.

설정 정보 전파 과정

  1. 개발자가 설정 정보를 변경하여 Github Repo에 Push
  2. Spring Cloud Bus가 Message Broker로 변경된 설정 정보에 대한 Message 발행
  3. Message Broker는 설정 정보를 저장
  4. 개발자가 설정 정보 변경 사실을 Config Server에 알려줌
  5. Message Broker가 해당 메시지를 Subscribing하고 있는 Application에 Broadcasting
  6. 각 Application은 Spring Cloud Bus가 받은 설정 정보를 반영

🐰RabbitMQ

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'

application.yaml

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/

profile
A smooth sea never made a skilled sailor

2개의 댓글

comment-user-thumbnail
2024년 2월 1일

읽고 보니 준님이였군요
잘읽고 갑니다 사우님!

1개의 답글