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

MQTT와 RabbitMQ 비교 및 이해

CBJH 2024. 12. 11.
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를 기반으로 하는 범용 메시징 시스템으로, 다양한 패턴과 기능을 제공하며, 메시징에 유연성이 필요할 때 적합합니다.

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

댓글