IT/기타

[IT] MQTT 프로토콜에 대해

땅일단 2024. 12. 14. 21:50

MQTT란?

MQTT는 Publisher, Broker, Subscriber의 세 가지 분류로 이루어진 프로토콜이다.

Publisher가 Broker 에게 특정 Topic으로 메시지를 보내면, Subscriber는 Broker로부터 받고 싶은 Topic만을 구독하여 메시지를 받는다.

 

 

장점

Python, Java 등 많은 언어들이 지원하고 있다.

메시지 헤더가 작고, 리소스를 적게 소모하기 때문에 대역폭이 낮다. 즉 불안정한 네트워크에서도 사용할 수 있다.

페이스북 메신저가 MQTT 프로토콜을 이용한다고 한다.

 

 

단점

Publisher와 Subscriber가 모두 온라인 상태여야만 메시지를 구독할 수 있다.

 

 

구조와 와일드카드

Topic은 트리 구조로 이루어져 있으며, 와일드카드를 사용할 수 있다.

와일드카드의 종류는 #, + 두 가지이다.

#은 해당 레벨과 하위 레벨의 모든 Topic을 구독한다.

+는 해당 레벨을 확장한다.

 

예를 들어 product, product/food, product/device/phone 이라는 Topic이 있다고 하자.

이때 product/# 를 구독한다면, 위 세 가지 Topic으로 오는 메시지를 모두 받을 수 있다.

 

product/user1/food, product/user2/food 라는 Topic이 있을 때,

product/+/food를 구독한다면, 위 두 가지 Topic을 모두 받을 수 있다.

 

 

QoS

MQTT는 신뢰성을 보장하기 위해 QoS(Quality of System)이라는 기능을 제공하는데, 0부터 2까지 세 가지 단계가 있다.

0: 메시지를 보내기만 하고 잘 갔는지는 확인하지 않음

1: 메시지를 보낸 후 메시지가 전달되었다는 답장을 받고, 만약 못 받았다면 답장이 올 때까지 계속 보냄

2: 메시지를 확실하게 딱 한 번 보냄. 부하가 클 수 있음