임베디드 관련 카테고리/프로토콜

MQTT와 RabbitMQ 비교 및 이해

CBJH 2024. 12. 11. 09:44
728x90
반응형

MQTT의 계층 위치

MQTT(Message Queuing Telemetry Transport)는 OSI 7계층 모델에서 응용 계층(Application Layer)에 속하는 프로토콜입니다. HTTP 기반이 아니라, TCP 위에서 독자적인 프로토콜로 동작합니다. 즉, MQTT는 HTTP를 기반으로 한 것이 아니라, 별도의 응용 계층 프로토콜이라고 이해하시면 됩니다.


MQTT 프로토콜 특징

  • 경량화된 프로토콜: MQTT는 TCP/IP 위에서 동작하는 퍼블리시/서브스크라이브(Publish/Subscribe) 메시징 프로토콜입니다. MQTT는 독립적인 프로토콜로, 이를 위해 MQTT 브로커(서버 역할)와 MQTT 클라이언트가 필요합니다.

IoT에서 MQTT가 많이 사용되는 이유

  1. 경량성
    • 메시지 헤더가 매우 단순하고 크기가 작아, 리소스가 제한된 IoT 디바이스(저전력, 저성능)에서도 효율적으로 통신할 수 있습니다.
  2. 적은 대역폭 사용
    • 네트워크 대역폭을 최소화하도록 설계되어, 느린 네트워크 환경이나 모바일 환경에서도 원활한 데이터 전송이 가능합니다.
  3. 빠른 전송 속도
    • TCP 연결을 유지하면서 최소한의 패킷 교환으로 메시지를 주고받아 지연 시간이 적습니다.

MQTT 메시지 포맷

  • MQTT는 페이로드(payload)에 데이터를 담는 방식에 제약을 두지 않습니다.
  • JSON 형식이 자주 사용되지만, 단순 텍스트, 바이너리 데이터, Protocol Buffers 등도 가능합니다.
  • 개발자가 필요에 따라 형식을 자유롭게 선택할 수 있습니다.

RabbitMQ와의 차이점

  • RabbitMQAMQP(Advanced Message Queuing Protocol) 기반의 메시지 브로커입니다. 하지만 최근에는 다양한 프로토콜(MQTT, STOMP 등)도 플러그인을 통해 지원합니다.
  • MQTT는 IoT 환경에 특화된 초경량 메시지 프로토콜입니다.
  • **RabbitMQ(기본 AMQP)**는 기업 애플리케이션 통합 환경에서 고기능 메시징을 위해 설계되었습니다.

정리:

  • MQTT는 IoT 기기 간 효율적이고 경량화된 통신을 위해 설계된 프로토콜입니다.
  • RabbitMQ는 다양한 메시징 패턴 및 큐잉 기능을 폭넓게 지원하는 범용 메시지 브로커입니다.

RabbitMQ와 관련된 주요 정보

RabbitMQ가 사용하는 프로토콜

  • RabbitMQ는 기본적으로 **AMQP(Advanced Message Queuing Protocol)**을 기반으로 동작합니다.
  • AMQP는 애플리케이션 간 메시지를 송수신하기 위한 이식성 높은 메시징 프로토콜로, TCP/IP 위에서 작동합니다.
  • 따라서 RabbitMQ는 TCP/IP → AMQP → RabbitMQ 순서로 동작한다고 이해할 수 있습니다.

RabbitMQ의 데이터(메시지) 담는 방식

  • RabbitMQ는 메시지 형식에 대해 특정한 제한을 두지 않습니다.
  • 메시지의 **페이로드(payload)**는 다음과 같은 형식으로 사용할 수 있습니다:
    • JSON
    • XML
    • 바이너리 데이터
    • 문자 데이터
  • 주로 사용되는 형식은 JSON이나 **직렬화된 데이터(예: Protocol Buffers)**입니다.
  • 또한, 메시지 헤더나 **속성(Properties)**을 사용하여 메시지를 라우팅하거나 우선순위를 지정할 수 있습니다.

페이로드(Payload)란?

페이로드의 의미

  • **"페이로드"**는 메시지에서 실제 전달하고자 하는 핵심 데이터를 의미합니다.
  • 비유하자면, 소포 상자라면 상자 자체나 운송 정보를 제외한 상자 안의 내용물이 페이로드입니다.

페이로드와 메시지 구조

메시지는 일반적으로 두 부분으로 구성됩니다:

  1. 헤더(Header):
    • 메시지 라우팅, 우선순위, 포맷, 인증 등 메시지를 어떻게 처리해야 할지를 나타내는 메타데이터.
  2. 페이로드(Payload):
    • 실제 전달하고자 하는 내용(데이터).

페이로드의 형식

  • 페이로드에는 형식적 제약이 없습니다.
  • JSON, XML, 바이너리 형식, 단순 텍스트 등 다양한 방식으로 데이터를 담을 수 있습니다.
  • 개발자는 상황에 맞게 원하는 포맷을 선택하여 사용할 수 있습니다.


 

MQTT와 RabbitMQ 비교 표

항목MQTTRabbitMQ

사용 목적 IoT 기기 간 효율적이고 경량화된 통신 다양한 메시징 패턴 및 큐잉 기능 제공
운영 체제 CentOS 기반 서버 이미지 추가해야 함 NAVER Cloud 관리 (별도 OS 관리 필요 없음)
실행 환경 콘솔창, WEB 네이버 공공 클라우드 플랫폼 Management UI
프로토콜 MQTT (TCP/IP) AMQP (TCP/IP)
요금 서버 운영 시간에 따른 과금 서버 운영 시간에 따른 과금
기반 기술 전자부품연구원 OneM2M 기반 RabbitMQ 기반
양방향 통신 지원 (Pub/Sub 방식) 지원
오버헤드 매우 작음 중간 정도
전송 방식 퍼블리시/서브스크라이브 방식(Pub/Sub) 메시지 큐 및 라우팅
페이로드 형식 JSON, XML, 바이너리 데이터, 문자 데이터 등 가능 JSON, XML, 바이너리 데이터, 문자 데이터 등 가능
리전 사용 가능 여부 모든 리전에서 사용 가능 수도권 리전 (5~15ms 지연 시간 발생, VPC 필요)

 


 

용어 정리

  • TCP(Transmission Control Protocol): 전송 제어 프로토콜, 신뢰성 있는 연결 지향형 통신을 보장합니다.
  • AMQP(Advanced Message Queuing Protocol): 고기능 메시지 큐잉 기능을 지원하는 프로토콜로, RabbitMQ와 같은 시스템에서 많이 사용됩니다.

결론

MQTT와 RabbitMQ는 각자의 특성과 사용 목적이 다릅니다.

  • MQTT는 IoT 환경에서 경량성빠른 데이터 전송에 초점을 맞춘 프로토콜입니다.
  • RabbitMQ는 AMQP를 기반으로 하는 범용 메시징 시스템으로, 다양한 패턴과 기능을 제공하며, 메시징에 유연성이 필요할 때 적합합니다.

필요한 환경과 목적에 따라 적합한 프로토콜과 시스템을 선택하는 것이 중요합니다.