Jgtony Developer blog

MQTT란 무엇인가

MQTTMessage Queuing Telemetry Transport의 약자로서 많은 IOT기기들에 최적화된 가벼운 메세징 프로토콜이다. 기존에 웹에서 통신하던 HTTP등의 프로토콜보다 제한적이고 특수한 상황에서 사용할 수 있는 모바일 특화 프로토콜이라고 이해할 수 있다. 여기서는 간단하게 리눅스 환경에서 MQTT 메세지 브로커를 구현해보고자 한다.

Broker / Publisher / Subscriber

mqtt-intro

MQTT는 사물인터넷을 사용하기 위해 개발된 TCP 기반의 프로토콜로서 낮은 전력 낮은 대역폭 낮은 성능의 환경에서도 사용이 가능하다. 통신하는 방법은 크게는 publisher/subscriber로 진행이 되며 중간에는 브로커(Broker)가 존재한다.

통신의 과정을 설명하자면, Publisher(센서 장치)가 데이터를 브로커에게 전달한하면 각 Subscriber(출력장치 또는 처리 장치)에서 데이터를 받아온다.

이때 각각의 데이터를 주고받을 때 어디로 데이터를 받을지를 정해주는 것이 Topic이다. 각 Publisher는 Topic을 정하고, 그 Topic을 구독하는 Subscriber가 해당 데이터를 받는다. 반대로 해당 Topic을 구독하지 않는 Subscriber는 데이터를 받지 못한다.

배포한 최초의 코드는 이더리움 블록체인에 영구적으로 존재하기 때문에 결점이 있는 코드를 올리게 되면 그냥 못쓰는 DApp이 되어버린다. 그래서 솔리디티에는 보안이 가장 큰 이슈가 될 수 밖에 없다. 반대로 완벽한 스마트 컨트랙트를 검증하고 배포를 했다면, 그대로 영구적으로 실행될 것이라는 것을 의심의 여지 없이 확신할 수 있다. 제3자가 수정을 하거나 예상치 못한 결과를 자아낼 수 없다는 것을 뜻한다.

MQTT TEST

linux mint에서 테스트 하였다.

MQTT Broker 설치

mosquitto 는 MQTT 브로커를 실행할 수 있는 오픈소스이다. 이 브로커는 publish/subscribe를 위한 커맨드라인 유틸리티까지 제공한다.

따라서 리눅스에 Mosquitto를 설치해 보도록 하겠다.

패키지 매니저에서 mosquitto 와 mosquitto-clients 를 직접 설치하거나 아래와 같이 설치할 수 있다.

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients

mosquitto-install

mosquitto 실행하기

Mosquitto는 디폴트로 1883번 포트를 사용하며 보안기능이 모두 꺼져 있으므로 추후에 보안을 위한 셋팅을 해주어야 할 필요가 있다.

이 브로커가 어떤 작업들을 수행하고 있는지 알기 위해서 verbose모드로 실행하도록 해보자.

여기서 아래와 같은 에러가 나오지 않는다면 이 작업은 스킵해도 좋다.

mosquitto-error1

1883번 포트를 이미 사용하고 있다는 에러가 나오면서 브로커가 실행되지 않는다. 이는 mosquitto 브로커가 설치됨과 동시에 실행이 되어 있어 나타나는 에러이다. 따라서 ps -ef | grep mosquitto 를 실행하고 이미 실행되어있는 mosquitto 프로세스를 강제종료 sudo kill 12345 한 후 다시 mosquitto -v 하면 정상적으로 나타난다.

Subscriber

브로커가 정상적으로 실행되었다면, 이제 Publisher와 Subscriber를 만들어보기 위해 CMD창을 두개 더 띄워 본다.

하나의 창에 아래와 같은 명령어를 입력한다.

$ mosquitto_sub -h localhost -i testSub -t debug

-h : mosquitto가 실행되고 있는 서버를 지정한다.

-i : client ID를 의미한다. 생략가능

-t : subscribe 하려는 topic을 지정한다.

즉 이 testSub라는 Subscriber는 debug라는 topic에서 오는 통신을 받을 준비가 되었다.(localhost 안에서)

Publisher

나머지 하나의 CMD창에 아래와 같은 명령어를 입력한다.

$ mosquitto_pub -h localhost -i testPub -t debug -m "TESTING"

-m : 커맨드라인에서 보내고자 하는 메세지

이 testPub라는 Publisher는 debug라는 topic으로 TESTING이라는 메세지를 보냈다. 따라서 브로커가 실행되어있는 한, 위에서 지정한 testSub라는 Subscriber는 해당 메세지를 받을 수 있다.

아래는 테스트 결과이다.

mqtt_success

맨 위의 tilda 창이 MQTT Broker, 왼쪽 아래가 Publisher, 오른쪽 아래가 Subscriber를 나타낸다. Broker를 보면 현재 어떤 일 처리가 일어나고 있는지 확인 할 수 있다.

Comments