MQTT 프로토콜을 알아봅시다

MQTT(Message Queue for Telemetry Transport) 프로토콜

푸시 기술(push technology)에서 일반적으로 사용되는 HTTP, TCP 등의 통신과 같은 클라이언트-서버 방식 대신, 메시지 매개자(broker)가 사이에서 메시지를 수신하고, 송신자가 특정 메시지를 발행(publish)하고 수신자가 메시지를 구독(subscribe)하는 방식으로, 대역폭(Bandwidth), 리소스(resource) 사용이 낮은 편이고, 가볍고 간편한 프로토콜(protocol)입니다.

전력 사용량도 적기 때문에 IoT와 모바일 기기의 M2M(Machine to Machine) 통신을 할 때 적합한 기술입니다.



-Broker(중개인) / Publisher(발행자) / Subscriber(구독자)

Broker(중개인)란 Publisher와 Subscriber 사이에 메시지를 관리하여 전송해주는 중앙 관리자입니다. 대표적인 Broker로 mosquitto, HiveMQ, Rabbit MQ, IBM MQ, Vertx, mosca, ActiveMQ 등이 있습니다.

Publisher(발행자)는 특정 Topic(화제)을 통해 Broker(중개인)에 메시지를 전송합니다. Broker는 Publisher가 발행한 Topic을 가지고 있고, Subscriber(구독자)는 Topic 기준으로 Broker에 구독을 요청합니다.

Subscriber의 polling(주기적인 체크) 방식을 이용하여 Broker에 있는 Topic을 조회해 갑니다.


-Topic(화제)

Topic은 Publish와 Subscriber가 발행하고 구독할 수 있는 채널로 이해할 수 있습니다.

Publisher와 Subscriber는 Topic을 기준으로 메시지를 발행하거나 구독합니다.

Topic은 문자열로 구성되어 있기 때문에 / 를 이용하여 계층적으로 구성할 수 있어서 대량의 센서 기기들을 효율적으로 관리 할 수 있습니다.



-QoS

QoS(Quality of Service)란 서비스의 질을 보장해주는 레벨을 말합니다. 서비스의 종류에 따라서 적당한 QoS 레벨을 선택해야 합니다.


Level 0 (At most Once)

-메시지는 한 번만 전달되며 전달의 성공 여부는 확인하지 않는 레벨입니다. 유실 가능성이 높습니 다.


Level 1 (At least Once)

-메시지는 최소 한 번 이상 전달되며 전달 여부는 확인하지 않습니다. 중복전달 가능성이 있습니다.


Level 2 (Exactly Once)

-메시지는 반드시 한 번만 전달됩니다. 유일하게 핸드셰이킹 과정이 있으며, 중복 전달할 일은 없 습니다. 높은 품질을 보장하지만, 성능의 희생이 있습니다.

 발행자와 구독자 모두 QoS를 지정할 수 있지만 발행자가 지정한 최대 QoS 수준이 우선 설정됩니 다. 예를 들어 발행자의 QoS 수준을 0이라고 지정했을 때, 구독자의 QoS 수준을 2로 지정했더 라도, 브로커에 의해 무시되고 ‘QoS 0’ 수준의 서비스를 받게 됩니다.


참고 출처)

https://khj93.tistory.com/entry/MQTT-MQTT%EC%9D%98-%EA%B0%9C%EB%85%90

https://jgtonys.github.io/iot/2018/07/13/mqtt-test/

https://kay0426.tistory.com/4

https://skibis.tistory.com/280

https://sambalim.tistory.com/79

Copyright © infoRAD Corp.  All Rights Reserved.