본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/자료구조

MQ (Message queue)란 무엇인가?

by 미노드 2023. 8. 3.

자료 구조중에 Queue라는 형식이 존재합니다.

Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데
이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다.
큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 형태를 가집니다. FIFO 형태는 뜻 그대로 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말합니다.

참고로 Stack은 "쌓다"라는 의미로, 데이터를 쌓아올린 형태의 자료구조입니다.
들어온 순서대로 나가는게 아닌, 가장 최근에 들어온 순부터 나가는 구조입니다.
큐와는 반대되는 게념이지요.

그렇다면, MQ는 무엇일까요?
 쓰이다보니 어쩔수 없이 정리해봅니다.

MQ(Message Queue)

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

MQ를 사용하면 비동기로 요청을 처리하고 queue에 저장하여 consumer에게 병목을 줄여줄 수 있습니다.일반적으로 Server-Client 구조에서는 Client가 Request를 보낸다면
Server에서는 Request에 대한 처리를 한 후 Response 를 보냅니다.
이런 간단한 구조는 MQ와 같은 미들웨어를 사용할 필요가 없습니다.
다만, 서버간 데이터를 주고받을 때, 장애나 특정 변수로 통신에 문제가 생겨 전송에 차질이 생긴다면, 일반적으로는 데이터의 유실이 발생합니다.
그러나 MQ를 이용하게 되면, 데이터가 유실되는 문제를 방지할 수 있습니다.
즉 중요도가 높은, 데이터 유실의 방지가 필요한 업무에서 MQ를 사용합니다.

그림과 같이 Message가 Queue에 쌓였다면 Consumer에서 메시지를 소비하기 전까지 Message queue에 보관됩니다.
만약 Consumer쪽 Server가 Fail 되었다면 Client의 MQ로 다시 복원이 가능합니다.

정리하자면 특징은 다음과 같습니다.

- 비동기(장점), 비동조, 탄력적, 과잉, 보증, 확장성
- 부하분산
- 데이터 손실 방지.

즉, "비동기 메시지 처리방식" 을 사용하여 다른 응용 프로그램 사이에서 데이터의 송수신을 의미하는 방식 즉 메시지 지향 미들웨어 (Message Oriented Middleware : MOM)를 구현한 시스템을 "메시지 큐(Message Queue : MQ)" 라고 합니다.
MQ는 솔루션을 통해 이용하는 편이며, 여러 업체에서 제공하는 MQ 솔루션이 있으니 정리해 보겠습니다.

 

RabbitMQ

AMQP를 구현한 오픈소스 메세지 브로커이다.
producers에서 consumers로 메세지(요청)를 전달할 때 중간에서 브로커 역할을 한다.

사용하는 케이스는 다음과 같다.

  • 요청을 많은 사용자에게 전달할 때
  • 요청에 대한 처리시간이 길 때
  • 많은 작업이 요청되어 처리를 해야할 때

해당하는 요청을 다른 API에게 위임하고 빠른 응답을 할 때 많이 사용한다. MQ를 사용하면 애플리케이션간에 결합도를 낮출 수 있다는 장점도 가진다.

https://www.rabbitmq.com/

 

RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ

Developer Experience Deploy with Kubernetes, BOSH, Chef, Docker and Puppet. Develop cross-language messaging with favorite programming languages such as: Java, .NET, PHP, Python, JavaScript, Ruby, Go, and many others.

www.rabbitmq.com

 

ActiveMQ

아파치 액티브MQ(Apache ActiveMQ)는 완전한 자바 메시지 서비스(JMS) 클라이언트와 함께 자바(Java)로 작성된 오픈 소스 메시지 브로커이다.
하나 이상의 클라이언트나 서버로부터 통신을 조성시키는 엔터프라이즈 기능들을 제공한다.
지원되는 클라이언트에는 JMS 1.1을 통한 자바 및 기타 여러 언어 간 클라이언트를 포함한다.

https://activemq.apache.org/

 

ActiveMQ

Apache ActiveMQ® is the most popular open source, multi-protocol, Java-based message broker. It supports industry standard protocols so users get the benefits of client choices across a broad range of languages and platforms. Connect from clients written

activemq.apache.org

Active MQ 의 모니터링 툴로 Hawtio 를 사용하기도 한다.

https://hawt.io/

 

Hawtio - A modular web console for managing your Java stuff

Small footprint The only server side dependency (other than the static HTML/CSS/JS/images) is the excellent Jolokia library which is available as a JVM agent, embedded as a Servlet inside hawtio-default.war or can be deployed as an OSGi bundle.

hawt.io

 

Kafka

Kafka는 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션입니다.
 분산 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 솔루션입니다.
카프카는 대용량의 실시간 로그처리에 특화되어 있는 솔루션이며 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있습니다.
아파치 카프카는 현재 2.x 버전까지 나와있고 초기에 Producer, Consumer 기능에서 0.10.x 버전에서부터 Connectors Stream Processors가 추가되었습니다.

https://kafka.apache.org/

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

IBM MQ

IBM 에서 제공하는 MQ 솔루션으로써, 높은 안정성과 빠른 속도를 지원합니다.
상용 프로그램이라 라이센스가 필요한 유료입니다.

https://www.ibm.com/kr-ko/products/mq

 

MQ - 개요

현재 기술력에 가장 적합한 방식으로 MQ를 관리하고 모니터링합니다. REST API, 웹 콘솔, CLI 등을 사용합니다.

www.ibm.com

 

'IT기술 > 자료구조' 카테고리의 다른 글

재해싱  (0) 2023.08.07
체이닝 (Chaining)  (0) 2023.08.07
자료구조론 -- 백석대학교  (0) 2023.05.17
[MQ] IBM MQ 구성  (0) 2023.04.20
자료구조 - 스택(Stack), 큐(queue)  (0) 2022.10.10