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는 그 때 메시지를 지운다.
김땡땡's blog

김땡땡's blog

김땡땡