MQTT(Message Queuing Telemetry Transport)는 사물 인터넷(IoT) 또는 기계 간(M2M) 장치와 애플리케이션을 인터넷을 통해 연결하는 데 이상적인 널리 사용되는 가벼운 게시-구독 메시징 프로토콜입니다. MQTT는 낮은 대역폭이나 저전력 환경에서 효율적으로 작동하도록 설계되어 많은 수의 원격 클라이언트가 있는 애플리케이션에 이상적인 선택입니다. 가전제품, 자동차, 운송, 제조, 의료 등 다양한 산업에서 사용됩니다.
MQTT를 통해 연결된 장치나 애플리케이션을 클라이언트 라고 합니다. 이러한 클라이언트는 특정 주제 나 여러 주제 에 대한 메시지를 게시 및/또는 구독합니다. 구독한 클라이언트는 해당 주제에 게시된 모든 메시지를 수신하여 다양한 장치와 서비스 간에 효율적이고 장애 방지적인 데이터 교환이 가능해집니다.
MQTT 아키텍처의 핵심은 브로커 입니다. 브로커는 클라이언트(및 클라이언트가 구독한 모든 주제)를 추적하고, 메시지를 처리하고, 해당 메시지를 적절한 시스템으로 라우팅하는 역할을 하는 서버입니다.
MQTT 프로토콜의 몇 가지 주요 버전이 표준으로 채택되었습니다. OASIS 조직은 프로토콜의 개정을 관리하고 각 버전에 대한 완전한 사양을 유지 관리합니다. MQTT는 각 개정판에서 프로토콜 기능 세트를 확장했으므로 장치와 브로커가 어떤 버전의 MQTT를 따르는지 아는 것이 중요합니다.
MQTT 메시지에는 여러 유형이 있으며, 각 메시지 유형에는 적합한 장치와 애플리케이션이 따라야 하는 특정 형식이 포함되어 있습니다. MQTT 프로토콜의 개정 내용은 형식과 메시지 유형에 따라 다양합니다. 메시지 유형의 전체 목록은 MQTT 프로토콜의 각 사양에서 확인할 수 있습니다.
가장 일반적인 세 가지 메시지 유형은 CONNECT, PUBLISH, SUBSCRIBE입니다. 각 MQTT 메시지에는 헤더, 페이로드 및 선택적 플래그가 포함되어 있습니다. 메시지 유형에 따라 페이로드의 길이는 달라질 수 있습니다. 예를 들어, PUBLISH 메시지에서 페이로드에는 모든 구독 장치로 전송할 데이터가 포함되며 데이터 필드의 길이는 메시지 크기에 직접적인 영향을 미칩니다. 기본적으로 MQTT 장치는 보안되지 않은 방식으로 포트 1883에 연결되거나 SSL/TLS 암호화가 활성화된 경우에는 포트 8883에 연결됩니다.
스마트카는 MQTT가 실제로 적용된 좋은 예입니다. 자동차 제조업체가 원격 진단, 차량 관리, 연료 지불, 엔터테인먼트 등 모든 것을 지원하는 새로운 기능을 추가함에 따라 MQTT는 커넥티드 카의 공통 표준이 되었습니다. MQTT는 HTTP(Hypertext Transfer Protocol) 프로토콜과 달리 자동차가 사각 지대에 들어가거나 나올 때 또는 연결 상태가 셀 타워를 변경하는 경우에도 지속적인 세션을 유지할 수 있습니다. MQTT는 또한 양방향 통신을 지원하므로 자동차와 클라우드 애플리케이션이 상대방의 응답을 기다리지 않고도 데이터를 보내고 받을 수 있습니다.
HTTP와 MQTT는 모두 인터넷을 통해 데이터를 전송하는 데 사용되는 네트워크 프로토콜입니다. 차이점을 살펴보겠습니다.
MQTT의 많은 기능은 이를 IoT 장치(IoT의 "사물")와 백엔드 시스템 간 메시징을 위한 이상적인 프로토콜로 만듭니다. 여기서는 4가지 기능에 초점을 맞추겠습니다.
MQTT는 기본 전송 프로토콜로 TCP/IP(전송 제어 프로토콜/인터넷 프로토콜)를 지원합니다. 널리 사용되는 이 네트워킹 프로토콜은 클라이언트와 브로커 간에 메시지가 안정적으로 전송되도록 보장합니다.
TCP/IP가 안정적이고 효율적인 것으로 간주되는 데에는 여러 가지 이유가 있습니다.
TCP/IP는 가장 일반적이기는 하지만 MQTT 메시지를 전송하는 데 유일한 선택은 아닙니다. MQTT 프로토콜은 UDP(User Datagram Protocol)와 웹소켓에서도 작동합니다.
NGINX가 MQTT 기반 IoT 시스템을 보호하고, 부하를 분산하고, 고가용성을 제공하는 방법에 대한 연구를 계속하는 데 도움이 되는 다음과 같은 무료 리소스를 제공하게 되어 자랑스럽습니다.