Networks/MQTT

MQTT란?

iKay 2017. 10. 21. 22:28
반응형

이번에 프로젝트에 MQTT를 사용하게 되어서 MQTT에 대해 간단히 정리한다. 

 

통신시 다수의 클라이언트로부터 정보를 받거나, 다수의 클라이언트를 일괄적으로 제어하기 위해 주로 MQTT가 사용된다. 특히, TCP 기반에서 IoT를 제어한다면 MQTT를 사용하는 것을 고려해볼 만 하다. 

 

 

1. MQTT란? 

 

MQTT(Message Queue for Telemetry Transport)는 broker를 사이에 두고 클라이언트간 publish / subscribe 방식을 통해 통신하고, bandwidth, resource 사용이 낮은 편이고, 가볍고 간편한 messaging protocol이다. 전력 사용율도 낮기 때문에 IoT와 모바일 기기의 M2M(Machine to Machine) 통신시 적합하다.

 

현재 MQTT는 공개된 프로토콜로써 사용하는데 로열티를 낼 필요 없어 사용하는데도 부담이 없다. 그러나 아직 표준화 작업이 완벽히 끝나지는 않았다.

 

MQTT는 Port#로 1883을 사용하고, SSL상에서는 8883을 사용한다.   

 

 

 

2. MQTT구조: Broker, Publish 그리고 Subscribe란?

 

MQTT는 Broker를 사이에 두고 topic을 통해, 클라이언트간 Publish / Scribe 방식을 통해 메시지를 주고 받는다. 메 다음 그림을 보자.

 

 

 

 

위 그림에 대해 설명을 하자면 다음과 같다. 

 

① topic1을 Client1, Client2, Client4 subscribe 한다. 이때, Client3은 topic2를 subscribe한다. 이때, Client는 API 서버, 모바일, 웹 등 다른 여러가지 것들이 될 수 있다.  

 

 Client1이 topic1에 msg를 publish 한다. 

 

③ topic1을 subscribe 하던 Client1, Client2, Client4 에게만 msg가 전달된다. topic2를 subscribe 하던 client3은 msg를 받지 않는다. 

 

즉, 브로커는 Client가 subscribe 하는 topic에 대해서만 메시지를 전달한다. 

 

 

3. 특정 topic만 subscribe? 

 

topic은 linux directory 구조처럼 slach(/)를 갖는 계층 구조로 관리된다. 예를 들어, 어떤 company의 사물들을 관리하기 위해, 다음 그림과 같이 topic 구조를 설계할 수 있겠다. 그 구조가 마치 REST API와 비슷한 모습을 보이는 듯 하다. 

 

 

 

 

만약, "company/vehicles/arrival/vehicle1" 을 subscribe한다면, vehicle1에 대한 departure 정보를 메시지로 받을 수 있다.   

 

또한, 특정 topic만 subscribe 하기 위해서 와일드 카드(#, +) 를 사용할 수 있다. #은 multi-level, +는 single level에 사용된다. 

 

예를 들어, "company/vehicles/#"을 하면 모든 회사 차량의 arrive와 departure 정보를 얻을수 있다. 그리고 "company/vehicles/+/vehicle3"을 vehicle3에 대해서만 arrival과 departure 정보를 얻을 수 있다.

 

이러한 topic 구조는 하나의 사물로 부터 필요한 여러 정보를 얻을 수 있게 하고, 반대로 여러 사물을 엮어 관리하기 쉽게 만든다.

 

 

4. QoS?

 

QoS(Quality of Service) 는 다음과 같이 3단계가 있다. 3단계의 옵션 중 적절한 것을 사용하면 되겠다.

  • 0: Fire & Forget. Message는 한 번만 전달되고 전달여부를 확인하지 않는다. 
  • 1: Message가 한 번 이상 전달되나, Hand-Shake 가 없기 때문에 중복전송 될 수도 있다.  
  • 2: Message는 한 번 만 전달된다. Hand-Shake 과정이 있다. 

 

 

 

 

 

반응형

'Networks > MQTT' 카테고리의 다른 글

MQTT 발행(publish)과 구독(subscribe)  (0) 2018.10.07
MQTT server(broker) 설치하기  (0) 2017.12.23