지금 개발하러갑니다

MQTT 프로토콜 본문

서버 개발

MQTT 프로토콜

jspark1215 2020. 1. 12. 22:58

MQTT란?

MQTT는 M2M, IOT를 위한 프로토콜로서, 최소한의 전력과 패킷량으로 통신하는 프로토콜입니다. 따라서 IOT와 모바일 어플리케이션 등의 통신에 매우 적합한 프로토콜입니다.

MQTT란?

MQTT는 M2M, IOT를 위한 프로토콜로서, 최소한의 전력과 패킷량으로 통신하는 프로토콜입니다. 따라서 IOT와 모바일 어플리케이션 등의 통신에 매우 적합한 프로토콜입니다.

MQTT는 HTTP, TCP등의 통신과 같이 클라이언트-서버 구조로 이루어지는 것이 아닌, Broker, Publisher, Subscriber 구조로 이루어집니다.

 

Publisher는 Topic을 발행(publish) 하고, Subscriber는 Topic에 구독(subscribe)합니다. Broker는 이들을 중계하는 역할을 하며, 단일 Topic에 여러 Subscriber가 구독할 수 있기 때문에, 1:N 통신 구축에도 매우 유용합니다.

MQTT에서 Topic은 /를 사용해서 구성되기 때문에,

 

위와 같이 계층을 구성한다면, IOT 센서와 같은 데이터를 관리하기에 매우 용이합니다.

MQTT는 QoS(Quality of Service)를 제공하는데, 총 3단계로 나뉘어져 있습니다.

* 0 : 메세지는 한번만 전달되며, 전달이후의 수신과정을 체크하지 않는다. 
* 1 : 메세지는 한번 이상 전달되고, 핸드셰이킹 과정을 추적하나, 엄격하게 추적하지 않기 때문에 중복수신의 가능성이 있다.
* 2 : 메세지는 한번만 전달되고, 핸드셰이킹의 모든 과정을 체크한다.

QoS의 단계가 높아질 수록 통신의 품질은 향상되지만, 그에 따라 성능 저하의 가능성이 있으므로. MQTT의 QoS는 프로젝트의 특성에 따라 결정되어야 합니다.

MQTT 브로커 구동하기

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

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

그 중에서도 유명한 브로커 중 하나인 Mosquitto를 사용해보도록 하겠습니다. Mosquitto를 간편하게 실행하기 위해 docker를 사용하겠습니다.
공식 docker 이미지 링크

docker을 실행하고, 아래와 같이 실행합니다.

$ docker run -it -p 1883:1883 -p 9001:9001 -v /mosquitto/data -v /mosquitto/log eclipse-mosquitto
 
docker로 Mosquitto 컨테이너 구동 결과

브로커를 실행했으니, MQTT-Explorer 라는 툴을 이용해 topic에 publish하고, Python에서 subscribe하여 데이터를 가져오는 예제를 실행해보도록 하곘습니다.

MQTT Explorer 링크

 
MQTT Explorer

MQTT Explorer를 구동하고, 브로커의 ip주소를 입력하여 브로커에 접속합니니다.

MQTT Explorer를 통해서는 데이터를 publish하고, subscribe를 하여 publish된 데이터를 확인해보겠습니다.

MQTT Explorer로도 publish되었는지 확인할 수 있지만, MQTT를 응용해볼 수 있도록 Python를 사용하여 예제를 작성해보곘습니다.

import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
 print(“Connected with result code “+str(rc))
 client.subscribe(“/test/1”) # Topic /test/1 을 구독한다.
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
 print(msg.topic+” “+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(“127.0.0.1”) # — 브로커 IP 주소
client.loop_forever()

위 코드는 /test/1 topic에 subscribe하는 예시코드이며, Paho 패키지를 사용하여 MQTT 브로커에 접속할 수 있습니다.

 
MQTT Explorer

그러면 이제 MQTT Explorer에서 Publish 메뉴의 Topic 입력란에 /test/1 을 입력하고, 밑의 입력창에서 raw를 선택하여 test1 이라는 문자열 데이터를 /test/1 topic에 데이터를 publish해보겠습니다.

 
Publish 결과

MQTT Explorer에서 publish하게되면, 위에서 작성한 Python 코드의 결과를 아래와 같이 확인할 수 있습니다.

 

'서버 개발' 카테고리의 다른 글

Locust로 서버 성능 테스트하기  (0) 2020.01.12
SSH Key란? SSH Key 사용하기  (0) 2020.01.12
MQTT 프로토콜 - 와일드카드  (0) 2020.01.12
Flask-Migrate 에러  (0) 2020.01.12
Comments