MQTT란?

dyeon-dev·2023년 8월 22일
1

IoT 가벼운 데이터를 위한 송수신

MQTT는 HTTP, TCP등의 통신과 같이 클라이언트-서버 구조로 이루어지는 것이 아닌, 중개인(Broker)을 통해 송신자가 특정 메시지를 발행( Publish)하고 수신자가 메시지를 구독(Subscribe) 구조로 이루어진다.
즉, 중개인(broker)을 통해 메시지가 송수신된다.

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

Broker란 Publisher와 Subscriber 사이에 메시지를 관리하여 전송해주는 중앙 관리자이다.
Publisher는 특정 Topic(화제)를 통해 Broker에 메시지를 전송한다. Broker는 Publisher가 발행한 Topic을 가지고 있고
Subscriber는 Topic을 기준으로 Broker에 구독을 요청한다. Subscriber의 polling(주기적인 체크) 방식을 이용하여 Broker에 있는 Topic을 조회해 간다.

Topic(화제)

Topic을 기준으로 Publish와 Subscriber가 메시지를 발행하거나 구독한다. Topic은 문자열로 구성되어 있기 때문에 /을 이용하여 계층적으로 구성할 수 있어서 대량의 센서 기기들을 효율적으로 관리할 수 있다.

-> 랜덤값으로 지정

QOS란?

MQTT는 QoS를 제공하는데 3단계로 나뉘어져있다.
QoS(Quality of Service)란 서비스의 질을 보장해주는 레벨을 말한다. QoS의 단계가 높아질 수록 통신의 품질은 향상되지만, 그에 따라 성능 저하의 가능성이 있으므로 서비스의 종류에 따라서 적당한 레벨을 선택해야 한다.

Level 0 (At most Once)
메시지는 한번만 전달되며 전달의 성공여부는 확인 하지 않는 레벨이다.

Level 1 (At least Once)
메시지는 최소 한번이상 전달되며 Publisher에게 PUBACK을 전달하여 성공 여부를 알린다.

하지만 Publishr가 PUBACK을 성공적으로 받지 못하면 Subscriber에게 중복메시지를 보내는 경우가 생긴다.

Level 2 (Exactly Once)
메시지는 반드시 한번만 전달된다. PUBACK방식을 PUBREC으로 핸드셰이킹 함으로써 Broker가 PUBACK을 받지 못하더라도 Broker에게 메시지를 보냈다는 사실을 알고 있기 때문에 중복메시지를 보내지 않는다.

MQTT 브로커 구동하기

MQTT 프로토콜을 구현하는 브로커들은 아래와 같이 여러 것들이 있다.

  • Mosquitto
  • HiveMQ
  • mosca
  • ActiveMQ
  • RabbitMQ (Plug-in 형태로 지원)

Mosquitto 브로커로 MQTT 실습하기

https://mosquitto.org/download/
위 링크에서 운영체제에 맞는 mqtt 파일 다운로드

아래의 정보를 받음
OnSuccess
OnFailure
OnMessageArrived
Publish

문자열과 데이터 등이 메시지에 들어있음

프로세스 종료 전에 메모리가 점유되어 있기 때문에 아래 함수는 필수로 들어가야 한다.

MQTTAsyc_freeMessage(Message)
MQTTAsyc_free(topicName)

if q = 종료
else s = 토픽전송

0개의 댓글