메시지 브로커 개념

MOM (Message Oriented Middleware)

  • MOM 은 어플리케이션들의 메시지를 중간에서 관리해주는 시스템
  • 비동기 방식으로 메세지를 전달한다.
  • 메세지를 발행하는 Publisher (Producer), 소비하는 Subscribe (Consumer)로 구성되어 있다.

 

 

메시지 브로커

  • pub(송신자)가 생성한 메세지를 , 메시지 큐에 저장하고, 저장된 데이터를 sub(송신자)가 가져갈 수 있도록 중간 다리 역할을 한다.

메시지 큐를 이용한 메시지 브로커 구조

  • Publisher(송신자)로부터 전달받은 Message(메세지)를 동일한 Topic의  Subscriber(수신자)로 전달해주는 중간 역할.
  • 메세지가 적재되는 공간을 Message Queue(메시지큐), 메시지의 그룹을 Topic(토픽) 이라고 한다. 
  • 메시지 브로커의 제일 큰 특징은 consumer가 큐에서 데이터를 가져가게 되면 즉시 혹은 짧은 시간 내에 큐에서 데이터가 삭제되는 특징들을 가지고 있다.

 

메세지 브로커를 사용하지 않는 경우

테이터베이스 테이블을 메세지 큐로 사용하여 메세지를 저장하고 처리한다.

실시간으로 처리하기 위해서는 데이터를 최신으로 빠르게 조회해야 하는데 실시간으로 데이터가 계속 쌓이는 테이블을 빠르게 조회하는 것은 힘들다. 그렇다고 조회성능을 높이기 위해 Index를 걸게 되면, Insert가 느려지기 때문에 실시간 처리에 적합하지 않다.

 

 

 

메세지 브로커를 사용하는 경우

서버에서 데이터를 적재는 하지만 별도의 조회 과정 없이, 메세지 큐에 적재되는 메세지를 감시하고 있다가, 메세지가 적재되면 A서버가 바로 조회하여 사용한다.

여기서 적재는 메세지를 메세지 브로커에게 게시(pub) 하거나, 큐에 넣는(enqueue) 작업을 의미한다. B서버는 데이터를 처리한 후 그 결과 메세지 형태로 메세지 브로커에게 적재(게시) 한다. A서버는 브로커를 감시하고 메세지가 적재되면 이를 조회하여 적절히 처리한다.

 

 

이처럼 메시지 브로커는 송신자가 보낸 메시지를 메시지 큐에 적재하고 이를 수신자가 받아서 사용하는 구조이다. 이러한 구조를 Pulibsh/Subscribe(pub/sub) Pattern이라고 하며, Producer/Consumer Pattern 이라고도 한다.

 

 

 

메세지 브로커 툴

MOM 의 개념과 프로토콜을 활용하여 다양한 구현체가 등장한다. 개념적으로는 동일하나, 내부적으로 동작하는 방식, 프로토콜 등 차이가 존재한다.

  • ActiveMQ
  • RabbitMQ
  • Apache Kafka
  • Amazon SQS

 

이벤트 브로커

  • 이벤트 브로커는 기본적으로 메시지 브로커의 큐 기능들을 가지고 있기 때문에 메시지 브로커의 역할을 할 수 있다.
  • 하지만 메시지 브로커는 이벤트 브로커의 역할을 할 수 없다.

이벤트 브로커는 publisher가 생산한 이벤트를 데이터베이스에 저장하듯 계속 저장하며, 후에 consumer가 특정 시점부터 이벤트를 다시 읽어갈 수 있다는 차이점이 있다.

 

이벤트 브로커의 제일 큰 특징은 대용량 데이터 처리에 있어서 메시지 브로커보다 더 많은 양의 데이터를 처리할 수 있는 능력이 있다는 것이다.

 

Producer/Consumer 와 Publisher/Subscriber 차이

Producer/ Consumer

상황 설명

회사에서는 고객이 제품을 주문하면 주문을 처리하는 시스템이 있습니다. 이 시스템에서 다음과 같은 상황이 발생한다:

  1. 주문 생성:
    • Producer: 고객이 웹사이트에서 제품을 주문하면, 주문 정보가 생성된다. 이 주문 정보는 메시지 큐에 넣어진다.
    • 상황: 웹사이트는 주문 정보를 생성하고 메시지 큐에 넣는 역할을 한다. 여기서 웹사이트가 Producer이다.
  2. 주문 처리:
    • Consumer: 메시지 큐에서 주문 정보를 읽어 실제로 제품을 준비하고 배송하는 프로세스를 담당한다.
    • 상황: 창고 관리 시스템은 메시지 큐에서 주문 정보를 읽어와서 제품을 준비하고 배송한다. 여기서 창고 관리 시스템이 Consumer이다.

요약: Producer는 고객의 주문 정보를 생성하여 큐에 넣고, Consumer는 큐에서 주문 정보를 읽어와서 제품을 준비하고 배송하는 역할을 한다.

 

Publisher/Subscriber 

상황 설명

회사에서는 새로운 제품 출시 소식을 고객들에게 알리기 위해 뉴스레터를 발송한다. 이 시스템에서 다음과 같은 상황이 발생한다:

  1. 제품 출시 소식 발행:
    • Publisher: 마케팅 팀에서 새로운 제품 출시 소식을 작성하여 뉴스레터 시스템에 발행한다.
    • 상황: 마케팅 팀은 새로운 제품 출시 소식을 작성하고 뉴스레터 시스템에 발행한다. 여기서 마케팅 팀이 Publisher이다.
  2. 고객에게 소식 전달:
    • Subscriber: 뉴스레터를 구독한 고객들은 새로운 제품 출시 소식을 이메일로 받는다.
    • 상황: 고객들은 뉴스레터 시스템을 통해 새로운 제품 출시 소식을 이메일로 받는다. 여기서 뉴스레터를 구독한 고객들이 Subscriber이다.

요약: Publisher는 새로운 제품 출시 소식을 발행하고, Subscriber는 이 소식을 구독하여 이메일로 받는다.

 

 

두 개념의 차이점

  • Producer와 Consumer:
    • 동작 방식 : 생산자는 큐에 데이터를 전송하고, 큐에 있는 데이터를 소비자가 가져가 처리한다. 소비자가 처리를 완료하면 해당 데이터는 큐에서 삭제 된다.
    • 사용 예: 고객 주문 처리 시스템 (주문 생성 -> 처리).
  • Pub/Sub
    • 발행/구독 기반: 메시지를 특정 주제에 발행하고, 해당 주제를 구독한 모든 구독자가 메시지를 받는 방식이다.
    • 동작 방식 : 발행된 데이터는 주제(topic)를 구독하고 있는 모든 구독자(subscriber)에게 복사된다. 각 구독자는 자신만의 독립적인 작업을 수행할 수 있으며, 구독자들은 서로 영향을 주지 않는다
    • 사용 예: 새로운 제품 출시 소식 전달 (소식 발행 -> 구독자에게 전달).

결론

  • Producer와 Consumer는 메시지를 큐에 넣고 큐에서 메시지를 읽어 처리하는 단순한 작업 대기열 패턴에 사용된다.
  • Publisher와 Subscriber는 메시지를 특정 주제에 발행하고, 해당 주제를 구독한 모든 구독자가 메시지를 받는 브로드캐스트 패턴에 사용된다.

 

  • Pub/Sub : 발행 - 구독 모델로, 데이터를 발행자(publisher)가 특정 주제(topic)에게 전송하고, 해당 주제를 구독하는 구독자(subscriber)들이 데이터를 수신한다. Publisher는 데이터를 구체적으로 어느 구독자가 받을지 신경쓰지 않는다.
  • Producer/Consumer : 생산자(producer)가 데이터를 생성하고 큐(queue)에 전송한다. 소비자(consumer)는 큐에서 데이터를 가져와 처리한다. 소비자는 명시적으로 큐에 접근하여 데이터를 가져와야 한다.