[MSA] Spring Cloud Bus

Kim Hyen Su·2024년 4월 2일

MSA

목록 보기
10/18
post-thumbnail

0. 들어가기 전

해당 포스팅은 인프런에 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 강의를 기반으로 작성됐습니다.

포스팅의 모든 사진 자료는 해당 강의 출처임을 밝힙니다.

이전에 Config Service에 대해서 학습하면서 설정 정보를 외부에 저장하고 각 서버에서 필요한 설정 정보를 사용할 수 있게 됐습니다.

만약, 설정 정보를 수정하게 될 경우, 각 서비스마다 설정 정보를 갱신해주기 위해서는 서버 재기동 또는 Actuator를 사용하여 refresh 해주는 방식으로 갱신해줘야 했습니다.

하짐만, 이러한 방식은 마이크로 서비스의 갯수가 커짐에 따라 수동으로 refresh해주기 번거로워 집니다.

따라서 이러한 불편함을 해결하기 위해 설정 정보를 갱신하는 마지막 방식인

Spring Cloud BusSpring~Cloud~Bus

에 대해서 학습하겠습니다.


1. Spring Cloud Bus 개요

Spring Cloud Bus의 역할은 다음과 같습니다.

  • 분산 시스템의 노드를 경량 메시지 브로커와 연결
  • 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast)

쉽게 말해서, 설정 정보 변경사항(publisher)을 메시지 형태로 메시지 브로커(midleware)에게 전달하면, 해당 요청을 받으려고 미리 구독해놓은 구독자(subscriber)들에게 메시지를 전달해준다는 원리입니다.

Spring Cloud Config Server에서 설정 변경 사항을 Spring Cloud Bus를 통해 각 MS에 전파하는 방식입니다.

조금 더 자세하게 설명하면 아래와 같습니다.

외부 클라이언트가 POST 방식의 busrefresh Spring Cloud Bus에 연결된 어떠한 MS(API Gateway 또는 Spring Cloud Config Server도 포함)에든지 요청을 하게되면, Spring Cloud Bus에 연결된 모든 MS에 변경사항이 반영되도록 broadcasting 해줍니다.

기본 개념

AMQP(Advanced Message Queuing Protocol)

메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜을 말합니다.

  • 메시지 지향, 큐잉, 라우팅(P2P, Pub-Sub), 신뢰성, 보안

  • Erlang, RabbitMQ에서 사용 - Window 기준

💡 P2P 방식이란?

중앙 서버를 거치지 않고 클라이언트 컴퓨터끼리 직접 통신하는 방식을 말합니다.

Kafka

  • Apache SoftWare Foundation이 Scalar 언어로 개발한 오픈 소스 메시지 브로커 프로젝트.

  • 분산형 스트림밍 플랫폼

  • 대용량 데이터를 처리 가능한 메시징 시스템

RabbitMQ vs. Kafka

RabbitMQ

  • 메시지 브로커
  • 초당 20+ 메시지를 소비자에게 전달
  • 메시지 전달 보장, 시스템 간 메시지 전달
  • 브로커, 소비자 중심

Kafka

  • 초당 100k+ 이상의 이벤트 처리
  • Pub/Sub, topic에 메시지 전달
  • Ack를 기다리지 않고 전달 가능
  • 생상잔 중심

결론적으로, 레빗엠큐는 적은 데이터량을 안전하게 전달하는 것을 보장하는 경우에 사용하고, 카프카는 대용량 데이터를 처리해야 하는 경우에 사용하게 됩니다.


2. RabbitMQ 설치


3. AMQP 사용

Dependencies

  • actuator

  • spring-cloud-starter-bus-amqp

application.yml 수정

  • Config Service, Users Microservice, Gateway Service 수정
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    
    ...
    
management:
  endpoints:
    web:
      exposure:
        include: health, ..., *busrefresh

RabbitMQ 관련 설정을 추가해줍니다.

  • 웹 브라우저 접속 시 15672, amqp 프로토콜 접속 시 5672 포트 번호를 사용합니다.

Actuator에 busrefresh 엔드포인트 추가해줍니다.


4. Spring Cloud Bus 테스트

JWT TOKEN 구현 후 테스트 예정.

profile
백엔드 서버 엔지니어

0개의 댓글