Skip to content

Latest commit

 

History

History
68 lines (40 loc) · 3.58 KB

mq.md

File metadata and controls

68 lines (40 loc) · 3.58 KB

메시지 큐(Message Queue, MQ) 개념

메시지 큐

메시지 큐(Message Queue: MQ)는 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할때 사용하는 통신 방법입니다.

더 큰 개념으로는 메시지 지향 미들웨어(Message Oriented Middleware: MOM)를 구현한 시스템을 의미합니다.

여기서 MOM은 비동기 메시지를 사용하는 응용 프로그램 간의 데이터 송수신을 말합니다.

MQ는 별도의 공정 작업을 연기할 수 있는 유연성을 제공하여 SOA(Service-Oriented Architecture)의 개발에 도움을 줄 수 있습니다.

서로 다른 프로세스나 프로그램 사이에 메시지를 교환할 때 AMQP(Advanced Message Queuing Protocol)를 이용합니다.

AMQP는 ISO 응용 계층 프로토콜의 MOM 표준입니다.

그리고 AMQP는 JMS(Java Message Service)와 비교되는데, JMS는 MOM을 자바에서 지원하는 표준 API입니다.

JMS는 다른 Java Application 간에 통신은 가능하지만 다른 MOM(AMQP, SMTP등)끼리는 통신할 수 없습니다.

장점

  • 비동기: 큐에 넣기 때문에 나중에 처리가 가능합니다.
  • 비동조: 애플리케이션과 분리할 수 있습니다.
  • 탄력성: 일부가 실패 시 전체의 영향을 받지 않습니다.
  • 과잉: 실패할 경우 재실행이 가능합니다.
  • 보증: 작업이 처리된걸 확인할 수 있습니다.
  • 확장성: 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다.

메시지 큐잉은 대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스, 비동기 데이터를 처리할 때 사용합니다.

프로세스 단위로 처리하는 웹 요청이나 일반적인 프로그램을 만들어서 사용하는데, 사용자가 많아지거나, 데이터가 많아지면, 요청에 대한 응답을 기다리는 수가 증가하다가, 나중에는 대기 시간이 지연되어서, 서비스가 정상적으로 되지 못하는 상황이 오기 때문에, 기존에 분산되어 있던 데이터 처리를 한 곳에 집중함녀서, 메시지 브로커를 두어서 필요한 프로그램 작업을 분산시키는 방법을 하는 것이 그 목적입니다.

메시지 큐 사용처

  • 다른 곳의 API로 부터 데이터 송수신이 가능합니다.
  • 다양한 애플리케이션에서 비동기 통신이 가능합니다.
  • 이메일 발송 및 문서 업로드가 가능합니다.
  • 많은 양의 프로세스들을 처리할 수 있습니다.

JMS vs AMQP

AMQP는 ISO 응용 계층의 MOM 표준입니다.

JMS는 MOM을 자바에서 지원하는 표준 API입니다. (JMS와 AMQP는 다른 개념이다.)

JMS는 다른 자바 애플리케이션들끼리 통신이 가능하지만 다른 MOM의 통신을 불가능하다.

ActiveMQ의 JMS 라이브러리를 사용한 자바 애플리케이션들끼리 통신이 가능하긴 합니다. 하지만 다른 자바 애플리케이션(AcitveMQ를 사용 안함)의 JMS와는 통신할 수 없습니다.

AMQP는 프로토콜만 맞다면 다른 AMQP를 사용한 애플리케이션끼리 통신이 가능합니다.

SMTP와도 통신이 가능합니다.

JMS 라이브러리는 AMQP를 지원하지는 않습니다.

오픈 소스 메시지 큐 종류

다음에 하나씩 정리해볼건데 일단 대표적으로 메시지 큐 시스템은 아래 4가지가 있다.

  1. RabbitMQ
  2. ActiveMQ
  3. ZeroMQ
  4. Kafka

위의 4가지 시스템은 공통적으로 모두 비동기 통신을 제공하고 보낸 사람과 받는 사람을 분리합니다.

하지만 업무에 따른 다른 목적을 가지고 있습니다.