[MQTT] MQTT의 개념
사물 통신(M2M: Machine to Machine), 사물 인터넷(IoT: Internet of Things)과 같이 대역폭이 제한된 통신 환경에 최적화하여 개발된 푸시 기술(push technology) 기반의 경량 메시지 전송 프로토콜이다.
MQTT 프로토콜은 푸시 기술(push technology)에서 일반적으로 사용되는 클라이언트/서버 방식 대신, 메시지 매개자(broker)를 통해 송신자가 특정 메시지를 발행(publish)하고 수신자가 메시지를 구독(subscribe)하는 방식을 사용한다. 즉, 매개자(broker)를 통해 메시지가 송수신된다.
Broker(중개인) / Publishr(발행자) / Subscriber(구독자)
Broker란 Publishr와 Subscriber 사이에 메시지를 관리하여 전송해주는 중앙 관리자이다.
Publishr(발행자)는 특정 Topic(화제)을 통해 Broker(중개인)에 메시지를 전송한다. Broker는 Publishr가 발행한 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)
메시지는 최소 한번이상 전달되며 Publishr에게 PUBACK을 전달하여 성공 여부를 알린다.
하지만 Publishr가 PUBACK을 성공적으로 받지 못하면 Subscriber에게 중복메시지를 보내는 경우가 생긴다.
Level 2 (Exactly Once)
메시지는 반드시 한번만 전달된다. PUBACK방식을 PUBREC으로 핸드셰이킹 함으로써 Broker가 PUBACK을 받지 못하더라도 Broker에게 메시지를 보냈다는 사실을 알고 있기 때문에 중복메시지를 보내지 않는다.
MQTT 설치 및 테스트