MQTT
MQTT(Message Queuing Telemetry Transport)
MQTT는 Publish/Subscribe 메시징 프로토콜로 M2M(machine-to-machine)이나 IOT(Internet of things)에서 사용하기 유용한 프로토콜이다. IOT를 위해 낮은 전력, 낮은 대역폭 환경에서도 사용할 수 있도록 설계되었다.
역사와 설계
1999년에 처음 개발되었으나, IOT의 갑작스런 큰 성장과 저전력 스마트 디바이스 간의 연결 및 통신의 필요성에 따라 최근에 유명해졌다. 대역폭과 CPU제한을 중점적으로 고려해 낮은 오버헤드로 구축된 프로토콜이다.
MQTT는 Publish/Subscribe 프로토콜이다. 클라이언트는 publisher, subscriber 둘 중 하나나 둘 다 모두로 연결할 수 있다.
특징
Publish / Subscribe
MQTT는 데이터를 발행(publish)하고, 관심 있는 주제를 구독(subscribe) 하는 것이 기본 원칙이다.
publisher, subscriber 모두 Broker에 대한 클라이언트로 작동.
- publisher는 Topic에 대한 내용을 발행 하고, subscribe는 Topic에 구독한다.
Topic
- publisher와 subscriber는 Topic을 기준으로 메시지를 발행하거나 구독한다.
- 문자열로 구성되어 있고,
/
를 사용해 구분할 수 있다.
Message Bus
- Broker가 메시지 버스를 만들고 그 버스에 연결된 Application들이 publish/subscribe를 통해 데이터를 주고 받을 수 있다.
QoS
QoS(Quality of Service)란 서비스의 질이란 뜻으로, MQTT에서는 QoS의 레벨들이 있고 서비스의 종류에 따라 선택할 수 있다.
Level 0 (At most once)
- 메시지를 한번만 전달한다.
- Fire and Forget이라고도 함.
- 한번만 전달하고 전달 여부는 확인하지 않는다.
Level 1 (At least once)
- 메시지는 최소 한번은 전달된다.
- Broker가 Publisher에게 PUBACK을 보내 전달 성공을 알린다.
- PUBACK가 오지 않으면 다시 보낸다.
- PUBACK가 중간에 loss되면 Subscribe가 중복메시지를 받을 수 있다.
Level 2 (Exactly once)
- 메시지는 반드시 한번 전달된다.
- 메시지가 처리될 때까지 publisher/subscriber 모두 메시지를 로컬에 저장한다.
- PUBREC이 분실되어 Publisher가 다시 메시지를 보내도, Broker는 메시지를 갖고 있기 때문에 Subscriber에게 다시 메시지를 보내지 않고 Publisher에게 PUBREC를 다시 보낸다.
- Publisher가 PUBREC를 받으면 PUBREL를 보내고 Broker는 그 때 메시지를 지운다.