MQTT는 최소한의 전력과 패킷량으로 통신하는 경량 메시지 전송 프로토콜이다. 통신하는데 많은 전력이 들지 않고 대역폭이 제한된 통신환경에 최적화 되어 있기 때문에 사물 통신(M2M), 사물 인터넷(IoT)에 주로 사용된다.
MQTT는 기본적으로 Broker, Publisher, Subscriber 3가지 요소로 구성되어 있다.
MQTT의 전체적인 플로우는 위의 그림과 같다.
Publisher가 특정 Topic에 메세지를 발행한 뒤 Broker는 해당 메세지를 받는다. 해당 Topic을 구독하고 있는 Subscriber는 polling 방식을 통해 주기적으로 Broker에 있는 Topic에 대한 메세지를 요청하고 Broker는 해당 메세지를 Subscriber에게 전달한다.
이와같이 단일 Topic에 여러 Subscriber가 구독할 수 있는 구조 덕분에 MQTT는 1:N 또는 N:N의 통신이 가능하다.
Topic. 화제이다. 말그대로 무수한 메세지들의 화제를 뜻한다. 메세지의 종류를 구분짓는 구분자라고 생각하면 된다.
Topic은 슬래시(/) 형태로 구분되는 계층 구조로 구성되어 있다.
예를 들어보자.
food / spaghetti / cream
위와 같은 Topic은 음식 중 스파게티 그 안에 크림 스파게티만 구독하고 있다고 보면 된다.
만약 음식의 모든 크림 음식을 구독하고 싶다면 어떻게 해야할까?
food / + / cream
스파게티가 위치하던 부분을 플러스(+) 문자를 사용해 1개의 토픽을 임의의 토픽으로 대체하여 모든 크림 음식을 구독할 수 있다.
마지막으로 샵(#) 문자를 통하여 2단계 이상의 하위 토픽을 와일드카드 기능으로 대체가 가능하다.
food / spaghetti / #
MQTT의 서비스 품질을 뜻한다. 이는 메세지를 발행/구독 할 때 메세지의 중요도에 따라 전달 확인 등의 과정을 거치는 기능을 한다. 크게 3단계로 이루어져 있다.