MQTT란?

Message Queuing Telemetry Transport(MQTT)는 인터넷을 통해 사물 인터넷(IoT) 또는 M2M(머신 간) 디바이스와 애플리케이션을 연결하는 데 적합한 대중적인 경량형 게시-구독(publish-subscribe) 메시징 프로토콜입니다. MQTT는 저대역폭 또는 저전력 환경에서 효율적으로 작동하도록 설계되어 원격 클라이언트 수가 많은 애플리케이션에 적합합니다. 가전, 자동차, 운송, 제조 및 헬스케어 등 다양한 산업에서 사용되고 있습니다.

MQTT 작동 방식

MQTT를 통해 연결된 디바이스 또는 애플리케이션을 클라이언트라고 합니다. 이러한 클라이언트는 특정 주제 또는 여러 주제에 대한 메시지를 게시하거나 구독합니다. 구독한 클라이언트는 해당 주제에 게시된 모든 메시지를 수신하여 많은 디바이스와 서비스 간에 효율적이고 내결함성 있는 데이터 교환을 가능하게 합니다.

MQTT 아키텍처의 핵심은 브로커입니다. 브로커는 클라이언트(및 클라이언트가 구독하는 모든 주제)를 추적하고, 메시지를 처리하고, 해당 메시지를 적절한 시스템으로 라우팅하는 역할을 하는 서버입니다.

MQTT 프로토콜 버전

MQTT 프로토콜의 여러 주요 버전이 표준으로 채택되었습니다. OASIS 조직은 프로토콜의 개정을 관리하고 각 버전에 대한 전체 사양을 유지 관리합니다. MQTT의 각 개정 버전은 프로토콜 기능 세트를 확장했기 때문에 사용 중인 디바이스와 브로커가 어떤 버전의 MQTT를 준수하는지 파악해야 합니다.

MQTT 메시지 유형 및 형식

MQTT 메시지에는 여러 유형이 있으며, 각 메시지 유형에는 호환되는 디바이스와 애플리케이션이 따라야 하는 특정 형식이 포함되어 있습니다. MQTT 프로토콜의 개정 버전은 형식과 메시지 유형에 따라 달라집니다. 메시지 유형의 전체 목록은 MQTT 프로토콜의 각 사양에서 확인할 수 있습니다.

가장 일반적인 세 가지 메시지 유형은 CONNECT, PUBLISH, SUBSCRIBE입니다. 각 MQTT 메시지에는 헤더, 페이로드, 선택적 플래그가 포함됩니다. 메시지 유형에 따라 페이로드의 길이가 달라질 수 있습니다. 예를 들어 PUBLISH 메시지에서 페이로드에는 모든 구독 디바이스에 전송할 데이터가 포함되며 데이터 필드 길이는 메시지 크기와 직접적인 관련이 있습니다. 기본적으로 MQTT 디바이스는 비보안 방식으로 포트 1883에 연결하거나, SSL/TLS 암호화가 활성화된 경우 포트 8883에 연결합니다.

MQTT의 실제 사용 사례

스마트 카는 MQTT가 실제로 사용되는 좋은 예입니다. 자동차 제조업체가 원격 진단 및 차량 관리부터 연료비 결제 및 엔터테인먼트에 이르기까지 모든 것을 지원하는 새로운 기능을 추가하면서 MQTT는 커넥티드 카의 일반적인 표준이 되었습니다. HTTP(Hypertext Transfer Protocol) 프로토콜과 달리, MQTT는 자동차가 사각지대를 오가거나 연결에 따라 무선 셀 기지국이 변경되어도 지속적인 세션을 유지할 수 있습니다. 또한 MQTT가 양방향 통신을 지원하므로 차량과 클라우드 애플리케이션은 상대방이 응답하기를 기다리지 않고 데이터를 쉽게 주고받을 수 있습니다.

HTTP와 MQTT의 차이점

HTTP와 MQTT는 모두 인터넷을 통해 데이터를 전송하는 데 사용되는 네트워크 프로토콜입니다. 두 프로토콜의 차이점을 살펴보겠습니다.

HTTP

  • 클라이언트가 서버에 요청을 보내면 서버가 요청된 데이터로 응답하는 요청-응답 프로토콜입니다.
  • 주로 웹 서버와 브라우저 간에 웹 콘텐츠(예: HTML 문서, 이미지 및 양식 데이터)를 전송하기 위해 설계되었습니다.
  • 예: 웹 브라우저(클라이언트)가 웹 서버에 요청을 보내면 서버는 웹 페이지 형식의 데이터로 응답합니다.

MQTT

  • 클라이언트가 주제를 구독하고 다른 클라이언트가 해당 주제에 대해 게시한 메시지를 수신하는 경량형 게시-구독(publish-subscribe) 메시징 프로토콜입니다.
  • 낮은 대역폭, 연결 안정성 및 전력 소비가 중요한 고려 사항인 네트워크 토폴로지 및 디바이스를 위해 설계되었습니다.
  • 예: 위에 나온 스마트 카 시나리오.
사물 인터넷(IoT)에서 MQTT를 사용하는 이유

MQTT의 많은 기능은 IoT 디바이스(IoT의 “사물”)와 백엔드 시스템 간의 메시징에 적합한 프로토콜입니다. 여기서는 4가지 기능에 초점을 맞춥니다.

  • 경량형 - MQTT는 코드 공간(code footprint)이 작기 때문에 센서 등과 같이 처리 능력 및 메모리가 제한된 디바이스에서 잘 작동합니다.
  • 신뢰성 - 많은 IoT 디바이스가 셀룰러 네트워크를 통해 연결됩니다. MQTT는 적은 데이터를 사용하는 압축된 메시지가 필요한 저대역폭 네트워크에 적합한 프로토콜입니다. 따라서 네트워크 대역폭이 제한적이거나 불안정한 경우에도 MQTT의 신뢰성을 높일 수 있습니다.
  • 확장성 - 게시-구독(publish-subscribe) 모델은 디바이스와 백엔드 시스템을 추가하여 쉽게 확장할 수 있습니다. 단일 디바이스를 두 개의 개별 백엔드 네트워크(구독자)에 게시하는 한 가지 예로는, 청구 목적으로 유틸리티 사용 데이터를 유틸리티 시스템과 주택 소유자가 주택의 에너지 사용량을 확인하기 위해 액세스할 수 있는 고객용 애플리케이션으로 모두 전송하는 주거용 스마트 계량기를 들 수 있습니다.
  • 보안 - MQTT 메시지는 표준 TLS(Transport Layer Security)를 사용하여 암호화할 수 있으며 인증에 사용할 수 있는 자격 증명을 지원합니다. 따라서 MQTT는 다양한 의료 기기의 건강 모니터 판독값과 같은 민감한 정보를 처리할 수 있는 IoT 애플리케이션에서 안전한 메시징 프로토콜이 될 수 있습니다.
MQTT에서 사용하는 전송 프로토콜

MQTT는 기본 전송 프로토콜로 TCP/IP(Transmission Control Protocol/Internet Protocol)를 지원합니다. 널리 사용되는 이 네트워킹 프로토콜은 클라이언트와 브로커 간에 메시지가 확실하게 전송되도록 보장합니다.

TCP/IP가 신뢰할 수 있고 효율적이라고 생각되는 데에는 몇 가지 이유가 있습니다.

  • 오류 탐지 및 수정 - 다양한 기술을 통해 데이터 패킷의 무결성을 확인하고 손실된 패킷을 복구하기 위한 재전송 메커니즘을 확인합니다.
  • 흐름 제어 - 특정 네트워크에 맞는 최적의 속도로 데이터를 전송하여 전송 지연을 방지하고 효율적인 통신을 촉진합니다.
  • 멀티플렉싱 - 단일 연결을 통해 여러 데이터 스트림을 전송할 수 있으므로 여러 애플리케이션이 동시에 동일한 연결을 사용할 수 있습니다.
  • 호환성 - 다양한 디바이스 및 운영 체제에서 작동합니다.
  • 확장성 - 대량의 트래픽을 처리할 때에도 성능 저하 없이 대규모의 복잡한 네트워크에서 작동하도록 설계되었습니다.

가장 일반적이지만 MQTT 메시지 전송에 TCP/IP가 유일한 선택은 아닙니다. MQTT 프로토콜은 UDP(User Datagram Protocol)와 WebSockets를 통해서도 작동합니다.

추가 리소스

F5는 다음과 같은 무료 리소스를 통해 NGINX가 MQTT 기반 IoT 시스템에 대해 보안, 로드 밸런싱 및 고가용성을 제공하는 방법을 계속 연구하는 데 도움을 드리고자 합니다.

블로그

문서