MQTT란 Machine 대 Machine 통신에 사용되는 표준 기반 메시징 프로토콜이다.
스마트 센서, 웨어러블 및 기타 사물 인터넷(IoT) 디바이스는 일반적으로 리소스 제약이 있는 네트워크를 통해 제한된 대역폭으로 데이터를 전송하고 수신해야 한다.
이러한 IoT 디바이스는 MQTT를 데이터 전송에 사용하는데, 구현이 쉽고 데이터를 효율적으로 전달할 수있다.
MQTT 장점
가볍고 효율적임
MQTT를 IoT 디바이스에 구현할 때는 최소한의 리소스가 필요합니다. 따라서 작은 마이크로컨트롤러에도 사용될 수 있습니다. 예를 들어 가장 작은 MQTT 제어 메시지는 데이터 2바이트만큼 작습니다. MQTT 메시지 헤더도 작기 때문에 네트워크 대역폭을 최적화할 수 있습니다.
확장성
MQTT 구현에는 최소량의 코드가 필요하며 작업 시 아주 작은 전력만 소비됩니다. 이 프로토콜은 또한 많은 수의 IoT 디바이스와의 통신을 지원하기 위한 기본적인 기능을 갖추고 있습니다. 따라서 MQTT 프로토콜을 구현하여 수백만 개의 디바이스에 연결할 수 있습니다.
신뢰성
많은 IoT 디바이스는 대역폭은 낮고 지연 시간은 긴 신뢰할 수 없는 셀룰러 네트워크를 통해 연결합니다. MQTT에는 IoT 디바이스에서 클라우드에 다시 연결하는 데 소요되는 시간을 줄여주는 기능이 기본적으로 탑재되어 있습니다. 또한 최대 1회(0), 최소 1회(1) 및 정확히 1회(2)라는 3가지 서비스 품질 수준을 정의하여 IoT 사용 사례에 필요한 신뢰성을 보장합니다.
보안
개발자는 MQTT를 사용하면 메시지를 손쉽게 암호화하고 OAuth, TLS1.3, 고객 관리형 인증서 및 기타 최신 인증 프로토콜을 사용하여 디바이스와 사용자를 인증할 수 있습니다.
우수한 지원
Python과 같은 다수의 언어가 MQTT 프로토콜 구현을 광범위하게 지원합니다. 따라서 개발자는 모든 유형의 애플리케이션에서 최소한의 코드 작업으로 빠르게 이 프로토콜을 구현할 수 있습니다.
MQTT 작동 원리
MQTT 프로토콜은 Pub / Sub 모델의 원칙을 기반으로 작동한다.
기존의 네트워크 통신에서는 클라이언트와 서버가 서로 직접 통신하는데, 클라이언트가 서버의 리소스 또는 데이터를 요청하면 서버가 이를 처리한 후, 응답을 다시 보낸다.
그러나 MQTT는 Pub / Sub 패턴을 사용하여 메시지 발신자(게시자)와 메시지 수신자(구독자)를 분리한다.
대신에 메시지 브로커라고 하는 제 3의 구성 요소가 게시자와 구독자간의 통신을 처리한다. 이 브로커가 하는일은 게시자로부터 수신되는 모든 메시지를 필터링하고 구독자에게 전송하는것이다.
브로커는 게시자와 구독자를 아래와 같이 분리한다.
공간분리
게시자와 구독자는 서로의 네트워크 위치를 모르며 IP주소 또는 포트 번호와 같은 정보를 교환하지 않는다.