MQTT(Message Queuing Telemetry Transport)는 사물 인터넷(IoT) 또는 기계 간(M2M) 장치와 애플리케이션을 인터넷을 통해 연결하는 데 이상적인 널리 사용되는 가벼운 게시-구독 메시징 프로토콜입니다. 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는 커넥티드 카의 공통 표준이 되었습니다. MQTT는 HTTP(Hypertext Transfer Protocol) 프로토콜과 달리 자동차가 사각 지대에 들어가거나 나올 때 또는 연결 상태가 셀 타워를 변경하는 경우에도 지속적인 세션을 유지할 수 있습니다. MQTT는 또한 양방향 통신을 지원하므로 자동차와 클라우드 애플리케이션이 상대방의 응답을 기다리지 않고도 데이터를 보내고 받을 수 있습니다.

HTTP와 MQTT의 차이점은 무엇입니까?

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

HTTP

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

MQTT

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

MQTT의 많은 기능은 이를 IoT 장치(IoT의 "사물")와 백엔드 시스템 간 메시징을 위한 이상적인 프로토콜로 만듭니다. 여기서는 4가지 기능에 초점을 맞추겠습니다.

  • 가벼움 - MQTT는 코드 크기가 작아 센서와 같이 처리 능력과 메모리가 제한적인 장치에서 잘 작동합니다.
  • 신뢰성 - 많은 IoT 기기가 셀룰러 네트워크를 통해 연결됩니다. MQTT는 적은 양의 데이터를 사용하여 압축된 메시지를 전송해야 하는 저대역폭 네트워크에 적합한 프로토콜입니다. 이를 통해 네트워크 대역폭이 제한적이거나 불안정한 경우에도 MQTT가 더욱 안정적이 됩니다.
  • 확장성 - 게시-구독 모델은 장치와 백엔드 시스템을 추가하여 쉽게 확장할 수 있습니다. 두 개의 별도 백엔드 네트워크(가입자)에 게시하는 단일 장치의 한 예는 청구 목적으로 유틸리티 시스템과 주택 소유자가 거주지의 에너지 사용량을 파악하기 위해 액세스할 수 있는 고객용 애플리케이션 모두에 유틸리티 사용 데이터를 전송하는 주거용 스마트 미터입니다.
  • 보안성 – MQTT 메시지는 표준 TLS(전송 계층 보안)로 암호화할 수 있으며 인증에 사용할 수 있는 자격 증명을 지원합니다. 이를 통해 MQTT는 다양한 의료 기기의 건강 모니터 판독 값과 같은 민감한 정보를 처리할 수 있는 IoT 애플리케이션의 안전한 메시징 프로토콜이 됩니다.
MQTT는 어떤 전송 프로토콜을 사용합니까?

MQTT는 기본 전송 프로토콜로 TCP/IP(전송 제어 프로토콜/인터넷 프로토콜)를 지원합니다. 널리 사용되는 이 네트워킹 프로토콜은 클라이언트와 브로커 간에 메시지가 안정적으로 전송되도록 보장합니다.

TCP/IP가 안정적이고 효율적인 것으로 간주되는 데에는 여러 가지 이유가 있습니다.

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

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

추가 자료

NGINX가 MQTT 기반 IoT 시스템을 보호하고, 부하를 분산하고, 고가용성을 제공하는 방법에 대한 연구를 계속하는 데 도움이 되는 다음과 같은 무료 리소스를 제공하게 되어 자랑스럽습니다.

블로그

문서