MOM (Message Oriented Middleware) 란?

김호준·2021년 12월 9일
2

MOM (Message Oriented Middleware)

  • 독립된 서비스 간 데이터를 주고받을 수 있는 형태의 미들웨어를 말한다.

    • 여기서 미들웨어란 애플리케이션들을 연결해 이들이 서로 데이터를 교환할 수 있게 해주는 소프트웨어이다.

    • 메세지 지향 시스템이란 메세지 API를 통해 각 분산되어있는 애플리케이션간의 다리역할을 함으로써 데이터를 교환할 수 있도록 하는 시스템이다.

    • 고로 메세지 지향 미들웨어(MOM)이란 메세지를 통해 여러 분산되어 있는 시스템간의 Connector 역할로 결합성을 낮추고, 이들이 서로 실시간 비동기식 데이터를 교환할 수 있도록 하는 소프트웨어이다.

MOM의 특징

  • 비동기 방식으로 메세지를 전달한다.

  • Queue, Broadcast, Multicast 등의 방식으로 메세지를 전달한다.

  • 메세지를 발행하는 Publisher (Producer), 소비하는 Subscribe (Consumer)로 구성되어 있다.

메세징 시스템이란 ?

  • "문자, 이메일같은 메세지들을 처리하는 시스템" 이라고 생각할 수 있지만 꼭 그런것이 아닌 "로그 데이터, 이벤트 메세지 등 API로 호출할 때 보내는 데이터들을 처리하는 시스템이라고 생각하면 된다.

MQ (Message Queue) 란?

  • 메세지 큐는 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법이다. 더 큰 개념으로는 메세지 지향 미들웨어(MOM:Message Oriented Middleware)를 구현한 시스템을 의미한다.

  • Producer, Consumer가 존재하며 Producer는 메세지를 큐에 전송하고 Consumer가 큐의 메세지를 처리하는 방식이다.

  • MQ를 사용하면 비동기로 요청을 처리하고 Queue에 저장하여 Consumer에게 병목을 줄여줄 수 있는데 장단점은 존재하기 마련이다.

  • 여기서 Broker는 송신자(Sender)와 수신자(Receiver) 사이에서 메세지의 전달을 중재하는 컴퓨터 프로그램 모듈이다.
보내는 쪽받는 쪽
SenderReceiver
ProducerConsumer
PublisherSubscriber

MQ의 장점

장점내용
비동기 (Asynchronous)큐(Queue)에 넣기 때문에 나중에 처리할 수 있다.
비동조 (Decoupling)애플리케이션(Application)과 분리할 수 있다.
과잉 (Redundancy)실패할 경우 재실행이 가능하다.
보증 (Guarantees)작업이 처리된 것을 확인할 수 있다.
확장성 (Scalable)다수의 프로세스들이 큐에 메세지를 보낼 수 있다.

MQ를 사용하는 이유

  • 애플리케이션 & 시스템 간의 통신
    • 서버 간에 데이터를 주고 받거나 어떤 작업을 요청을 할 때는 항상 시스템 장애를 염두에 두어야 한다. 서버가 갑자기 죽거나 서버 점검 등으로 다운타임이 발생하는 동안에는 요청을 보낼 수가 없다. 요청하는 서버에서 failover 처리를 해놓고 연계 시스템이 다시 살아났을 때 요청을 보내는 방법도 있지만 MQ를 이용하면 더욱 간편하게 처리할 수 있다.

  • P는 C에 직접 요청하는 것이 아닌 MQ에 전달한다. 그럼 C는 MQ로 부터 요청 데이터를 수신해서 처리한다. 만약 C가 요청을 받을 수 없을 수 없는 상황이라면 해당 요청은 C가 받을 때까지 MQ에 머무르게 된다.
  • 서버 부하가 많은 작업

    • 이미지 처리, 비디오 인코딩, 대용량 데이터 처리와 같은 작업은 메모리와 CPU를 많이 사용한다. 이러한 작업은 동시에 처리할 수 있는 양이 상당히 한정적이어서 필요하다고 무작정 요청을 처리할 수는 없다. 이 때에도 MQ를 사용하면 편리한데 처리해야할 작업을 MQ에 넣어두고 서버는 자신이 동시에 처리할 수 있는 양에 따라 하나의 작업이 끝나면 다음에 처리할 작업을 MQ에서 가져와 처리하면 된다.
  • 부하 분산

    • MQ를 통해 부하분산 처리도 가능하다
    • 그림처럼 여러 대의 서버가 하나의 큐를 바라보도록 구성하면 처리할 데이터가 많아져도 각 서버는 자신의 처리량에 맞게 태스크를 가져와 처리할 수 있다.
  • 데이터 손실 방지

    • MQ를 사용하지 않는다면 외부에서 받은 요청을 메모리에 저장했다가 들어온 순서대로 처리하게 할 수도 있다. 하지만 어떠한 이유로 서버가 다운되어 버리면 메모리에 쌓아둔 요청은 모두 없어지고 만다. MQ를 사용하면 이를 방지할 수 있는데 MQ로부터 가져온 태스크를 일정 시간이 지나도록 처리했다고 다시 MQ에 알려주지 않으면 MQ는 이 태스크를 다시 큐에 넣어 다시 처리할 수 있도록 한다.
profile
Go-getter Developer

0개의 댓글