메시지 지향 미들웨어(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) : 메시지를 수신하고 역할을 수행
📌 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에 직접 접근하여 메세지를 가져옴)
📌 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 // 메세지 지향 미들웨어(Message-Oriented-Middleware)
- https://velog.io/@mdy0102/MQ-%EB%B9%84%EA%B5%90-Kafka-RabbitMQ-Redis // MQ 비교 (Kafka, RabbitMQ, Redis)
- https://blog.dudaji.com/general/2020/05/25/rabbitmq.html // RabbitMQ란?
- https://nesoy.github.io/articles/2019-02/RabbitMQ // RabbitMQ에 대해
- https://velog.io/@jisoo1170/Redis-RabbitMQ-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90 // Redis, RabbitMQ 차이점을 알아보자
'DB > 이론' 카테고리의 다른 글
[DB] Postgresql 과 MySQL schema 구분 차이 (0) | 2024.12.21 |
---|---|
[Cache] Memcached vs Redis 차이 (2) | 2022.11.22 |
[DB] Clustering, Sharding, Replication 차이 (0) | 2022.10.03 |
[DB] Replication 이란? (Feat. Mysql, Mongo) (0) | 2022.10.03 |
[DB] Index란? (0) | 2022.08.11 |