DB/이론

[MQ] 메시지 지향 미들웨어 (by. RabbitMQ, Redis)

yubi5050 2022. 11. 26. 23:50

메시지 지향 미들웨어(Message Oriented Middleware, MOM) 란? 

메시지 지향 미들웨어(Message Oriented Middleware, MOM)이란, 응용 프로세스 간 비동기 방식의 데이터 통신을 통해, 메시지를 전달 해주는 시스템을 뜻하며, 주로 대용량 배치 처리, 이메일 전송, 채팅 서비스 등에 주로 많이 사용

 

👉 메시지를 전달하는 방식의 모델 2가지

  • Message Queue 기반 모델
  • 발행(Publish)-구독(Subscribe) 기반 모델

 

📌 메시지 지향 미들웨어 시스템 사용시 장점

  • 비동기성 작업 처리
  • 프로세스간 결합도(의존성)가 낮음
  • 메시지 생산자(Producer)나, 메시지 소비자 (Consumer)에 대한 확장성이 좋음
  • 메시지 생산자의 서버가 다운되도, Message Queue에 남아 있어 안전함
  • 메시지의 순서를 보장

 

 

메시지 전달 방식 - (1) Message Queue 

📌 Message Queue 모델이란?

  • AMQP (Advanced Message Queuing Protocol) 개방형 응용 계층 프로토콜을 따르는 오픈소스 메시지
  • Producer가 메시지를 Queue에 보내고, Consumer가 메시지를 수행하지 않았다면, Broker의 Queue 대기열에 데이터 존재
  • 주로 많이 사용되는 Message Queue에는 RabbitMQ, ActiveMQ 등이 있음

 

📌 Message Queue 시스템의 주요 구성

  • 메시지 생산자 (Producer) : 메시지를 최초 생산 및 Broker에 전송
  • 메시지 전달자 (Broker) : 메시지를 보관(=버퍼)하고, 소비자들에게 차례대로 전달
  • 메시지 소비자 (Consumer) : 메시지를 수신하고 역할을 수행

 

https://docs.oracle.com/cd/E19148-01/820-0532/6nc919fag/index.html

 

 

📌 RabbitMQ

AMQP프로토콜을 따르는 메시지 큐 시스템의 대표적인 OpenSource Message Broker로, 메세지를 많은 사용자에게 전달하거나, 요청에 대한 처리 시간이 길 때, 해당 요청을 다른 API에게 위임 및 빠른 응답을 할 때 많이 사용한다. Message를 Queue에 저장하여, Consumer가 처리할 때 까지 보관하고 있게 됨. 

 

👉 주요 특징

  • 메시지를 다른 대기열로 보내는 라우팅 시스템의 다양한 지원 (Direct, Topic, Header, Fanout 등)
  • 메시지에 대한 우선순위를 지원함
  • 메시지가 비교적 복잡하거나 크기가 큰 경우에 좀 더 적합
  • 메시지 성공적으로 전달시, 삭제하기 때문에 이후 재사용시 효율성 ↓
  • 메시지 전달이 보장된다.
  • AMQP, MQTT 등 여러 메세징 플랫폼 지원
  • Kafka에 비해 느린편
  • 오랜 유지보수로 Manange UI 기본 제공 및 관리적 측면에서도 이점이 있음
  • ex) 정확한 메시지 전달, 트래픽이 많이 요구되진 않고 안정적인 경우 사용 적절

 

👉 구성 및 절차

  • Producer (어플리케이션) : 메세지를 생성하고 발송하는 주체(Producer는 Queue에 직접 접근하지 않고, 항상 Exchange를 통해 접근)
  • Exchange(RabbitMQ) : Publish된 메시지를 해당되는 Key에 맞게 Queue에 Routing(=binding) 작업을 수행. (= 메세지를 어떤 Queue에게 발송할지를 결정하는 객체)
  • Consumer : 메세지를 수신하는 주체, Worker가 Queue에 있는 메시지를 소비함 (Consumer는 Queue에 직접 접근하여 메세지를 가져옴)

 

이미지 출처 : https://nesoy.github.io/articles/2019-02/RabbitMQ

 

📌 Exchange의 Queue 분배 Type 종류

  • Topic 모드 : Key가 같은 Queue에 메세지 전송
  • Direct 모드 : Key의 패턴에 해당되는 Queue에 메세지 전송
  • Headers 모드 (Multicast) : {key:value} 값 기준 해당되는 Queue에 메세지 전송
  • Fanout 모드 (Broadcast): 모든 Queue에 메세지 전송 (Broadcast)

 

메시지 전달 방식 - (2) Pub/Sub 

📌 Pub/Sub 모델이란?

  • 메시지를 게시하는 Publish와 메시지를 구독하는 Subscribe로 이루어진 모델
  • 1개의 메시지가, 해당 Channel을 구독하고 있는 여러명의 Subscriber 들에게 동시에 메시지 전달
  • 주로 많이 사용되는 Pub/Sub 라이브러리에는 Redis, Kafka 등이 있음

 

📌 Pub/Sub 방식의 주요 구성

  • Publisher: 메세지를 게시(Publish)하는 역할
  • Channel: 메세지가 대기하는 곳
  • Subscriber: 메세지를 구독(Subscribe)하는 역할

 

📌 Redis

 

 

인메모리 기반의 데이터 베이스, Cache서버로 주로 활용되지만, Pub/Sub 모델로도 활용 가능.

 

👉 주요 특징

  • 인메모리로 데이터를 메모리에 보관하고 있어, 매우 빠른 속도를 가짐
  • 메시지에 대한 우선순위를 지원하지 않음
  • 메시지가 비교적 작거나, 임시성이 강한 경우 적절
  • 메시지가 성공적으로 전달되는 걸 보장 못함
  • 메시지 성공적으로 전달시, 이벤트를 삭제하지 않고 DB에 저장하여 이후 재사용시 효율성 ↑
  • TCP 통신 기반의 RESP (Redis Serialization Protocol)을 지원
  • ex) 알람 기능과 같은 도착 보장이 꼭 필요하지 않은, 비교적 가벼운 기능에 적절
  • (추가) Kafka는 대용량 데이터 처리, 고성능, 고가용성 필요, 로그 추적, 재처리 필요 등의 상황에서 적절

 

👉 절차

  • Publisher가 Channel에 메세지를 게시
  • 메시지는 Channel에서 보관되다가 해당 Channel을 구독하고 있던 Subscriber가 동작함
  • Subscriber는 동시에 여러 Channel을 구독할 수 있음
  • Subscriber가 메시지를 받아서 처리

 

Message Queue 모델과 Pub/Sub 모델의 차이점은?

Message Queue : 특정 Consumer 에게 Queue로 전달

Pub/Sub : 1명의 Producer가 보낸 메시지가, Subscribe 상태인 여러명의 Consumer들에게 전달 

 

이미지 출처 : https://doridorigang.tistory.com/4

 

 

 

 

참고문헌