회사에서 사용했던 RabbitMQ와 MessageBroker에 대해서 간단하게 정리하고 사용하면서 장점이라고 생각됐던 부분에 대해서 정리하려고 한다.
message broker라고 검색하면 항상 같이 따라오는 내용이다.
이름 그대로 애플리케이션의 메시지를 중앙에서 관리해주는 소프트웨어나 하드웨어를 뜻한다.
애플리케이션끼리 직접 통신하지 않고 중앙 메시지 관리 시스템을 통하여 메시지를 주고 받으며 통신한다.
직접적인 구현체는 아니고 설계 패러다임? 이라고 생각하면 될듯 하다.
장점
RabbitMQ는 MQ가 들어갔으니 MessageQueue인가? Message Broker인가???
MessageQueue
Queue자료구조 사용하여 메시지를 보내기/받기 그리고 저장을 지원하는
프로세스 간 단순한 통신 솔루션으로 MOM 시스템의 일부이다.
MessageBroker
메시지 브로커는 단순한 프로세스 간 통신을 지원하는 메시지 큐보다 더 확장되어 고급 라우팅 기능, 로드 밸런싱, 메시지 변환 기능, 메시지 형식 변환등 추가되어 메시지 큐를 관리하고 저정하는 시스템이라고 말해도 될듯 하다. (MOM의 구현체가 MessageBroker라고 생각하면 될듯하다.)
Message Broker는 대부분 Pub/Sub패턴을 사용한다.
뭔가 거창해 보이지만 메시지를 발행하여 보내는 송신자와 메시지를 수신하여 어떠한 작업을 수행하는 수신자로 나눠저 있는 패턴이다.
인기 있는 Message Broker중 하나이다.
RabbitMQ는 단순한 애플리케이션 부터 대규모 시스템까지 다양한 분산 소프트웨어 아키텍처를 만들기 위한 매우 강력하고 가벼운 도구이다.
기본적인 RabbitMQ의 기본 구성요소는 아래와 같다.
ExchangeType에 대해서 추가 정리하자면
총 4가지가 있다.
자세한 내용은 링크에!
RabbitMQ의 장점은 대부분 AMQP스펙에서 비롯된다.
따로 정리하는게 좋을듯 하기도 하고 지식이 부족하여 나중에 추가 정리하도록 하겠습니다...
At most once - 도달 여부 상관없이 딱 한번만 던진다.
At leat once - 메시지가 최소 한번 전달된다. 네트워크 실패 등의 이유로 전달이 확인되지 않을 경우 재 전송된다.
(RabbitMQ의 전달 보증은 MQTT의 Qos와는 조금 다르다고 알고있다. 잘 정리된 자료를 확인했었는데 찾으면 링크를 추가하겠습니다.)
개인적인 사용 경험으로는 비동기처리 & 애플리케이션 간의 의존성 제거가 가장 큰 장점이라고 생각하고 도입했던 이유다.
비동기 처리 관점에서 Publisher는 메시지를 브로커에 던지고 Subscriber이 작업을 하든 말든 다시 본인의 일을 하면 된다.
만약 동기처리였다면 Publisher는 Subscriber이 작업을 처리할때까지 기다려야 했을것이다. 만약 Subscriber가 작업을 제대로 수행하지 못해 Publisher가 계속 기다려야 하는 상황이 온다면 병목현상이 일어나게 될것이다.
의존성 제거 관점에서 위와 비슷하다. Publisher는 Subscriber가 누군지, 살아있는지, 죽어있는지 아무런 관심이 없다.
간단하게 MessageBroker에 대해서 정리해봤습니다.
MessageBroker가 이러한 기술의 한계때문에 생기지 않았을까?? 라는 내용도 같이 정리하고 싶었지만 사실 잘 모르겠음...