본문 바로가기

programming/MSA

[MSA] Config 파일 관리를 위한 Spring cloud bus와 AMQP(Rabbit MQ)

반응형

1. 개요

 

  저번 글에는 config 파일 즉 .yml파일 .properties파일을 외부에서 관리하고 해당 파일이 필요한 application에서 내용을 읽어오는 아키텍쳐를 설계하는 내용을 작성하였다. 이번에는 해당 아키텍쳐에서 AMQP 프로토콜을 사용에 한번에 End-point 메세지를 일괄적으로 전송해주는 Message Queue 서비스를 구현하기 위해 Spring cloud bus에 대한 내용을 적어볼 것이다.

 

2. 본문

 

- Message Queue

 

 일단 이전의 구조에 대해 다시 살펴보자.



 해당 구조를 보면 user_service 어플리케이션에서 변경사항이 생겼을 때 (설정 파일에 대한 변경사항) refresh라는 end point를 통해 변경된 결과를 가지고 왔다. 어플리케이션을 재기동 할 필요 없이 베포 된 상태에서 끌어다 쓸 수 있기 때문에 좋다고 생각했다.

 

 그러나 백엔드 개발자는 항상 극한으로 생각해야한다는 말이 떠올랐다. 만약 어플리케이션이 한 100개 쯤 된다고 생각해보자. MSA 아키텍쳐로 유명한 Netflix와 Amazon 기업의 실제 서비스 아키텍쳐를 찾아보니 다음과 같은 거미줄들이 나왔다.



자 해당 노드들이 (가정이지만) 하나의 config파일을 사용하고 있다고 가정했을 때, 그 모든 어플리케이션에 endpoint를 url로 던저주는 것이 가능할까? 이런 상황에서 Message Queue 서비스를 사용할 수 있는 spring cloud bus의 필요성을 알게 되었다.

 

- 구현

 

 Spring cloud bus는 연결된 각 노드에 Brodcast 형태로 메세지를 일괄 전송해준다. 2학년 때 들은 네트워크 용어를 이렇게 사용한다니... P to P 혹은 One to One 구조대신 Brodcast를 사용하기 때문에 어떤 노드에 endpoint를 쏴줘도 연결되 모든 노드에 해당 메세지(endpoint)가 전송되며 이때 사용하는 프로토콜이 바로 AMQP이고 해당 프로토콜을 쉽게 사용하기 위해 Rabbit MQ를 활용한다.

 

 다음은 spring cloud bus와 Rabbit MQ를 적용한 새로운 프로젝트 구조이다.



만약 user_service에 busrefresh(최신 버전은 bus-refresh라고 합니다...) endpoint를 던지면 해당 endpoint는 spring cloud bus와 연결된 모든 서비스 즉 어플리케이션에 전달되며 일괄적으로 모든 어플리케이션의 config 파일이 갱신 된다.

 

3. 결어

 

진도 쭉쭉 나갔으면!

반응형