MQTT 설치및실행가이드 2016 년 12 월 경북대학교컴퓨터학부통신프로토콜연구실 정중화, 최동규 godopu16@gmail.com, supergint@gmail.com 목 차 1. 서론... 2 2. MQTT 란?... 3 2.1 MQTT 소개... 3 2.2 MQTT BROKER MOSQUITTO 소개... 4 3. MOSQUITTO BROKER 설치... 5 3.1 BROKER 다운로드... 5 3.2 BROKER 설치... 5 3.3 BROKER 실행... 8 3.4 BROKER 테스트... 9 4. PAHO 를이용한 PUB-SUB 구현... 10 4.1 JRE 7 설치... 10 4.2 PAHO LIBRARY 다운로드... 11 4.3 PAHO LIBRARY 예제... 12 4.4 테스트... 13 1
1. 서론 사물인터넷 (IoT : Internet of Things) 의개념은 1999년케빈애쉬톤 (Kevin Ashton) 에의해최초로사용되었다. 초기에케빈애쉬톤이사용을하던개념은 RFID 태그를활용한시스템의발전을시작으로개념이조금씩변화되어, 최근에는유비쿼터스컴퓨팅을포함하여생활속유무선네트워크로연결할수있는모든사물들로범주가커졌다. 사물인터넷은 M2M 기술을인터넷으로확장하여사물은물론, 현실과가상세계등모든정보와상호작용할수있는인프라개념을의미한다. 사물인터넷은기존네트워크통신망에만국한되어있는것이아니라주변에다양한가전제품, 전자기기, 모바일등사물대사물, 사람대사물간의네트워크를포괄하는차세대패러다임이다. 사물이인터넷에연결됨으로인해사용자에게다양한가치를제공할뿐아니라, 데이터의수집, 온라인을통한실시간관찰, 원격제어, 정보관리등을활용하여사용자에맞는맞춤형서비스제공도가능하다. 사물인터넷인프라가구축된다면무선네트워크, 센서, 스마트기기등기술발전및보급확산으로무수히많은기기가네트워크에접속할것으로예상되어네트워크혼잡이예상된다. 따라서기기간통신인 D2D (Device to Device) 통신지원기술도개발되어야한다. 이러한사물인터넷의인프라구축이완료된다면사물인터넷의영향력은일상생활모든부분까지확대될것이다. 특히의료, 교통, 제조등다양한분야에서기존의프로세스에큰변화를줄것이다. Figure 1. 사물인터넷 3대구성요소인간과사물, 사물과사물간의통신과적절한서비스의상호작용이이루어져야사물인터넷인프라의최대한의효율을낼수있다. 사물의요소는우리가일반적으로사용하는전자기기및가전제품뿐만아니라경량화된 CPU, 센서등도포함하고있기에현재인터넷기술인 TCP/IP 프로토콜스택을맞추기에는불가능하다. 사물인터넷은주로낮은성능의소형기기나센서등을사용하기때문에사용할수있는자원이한정적이다. 사물인터넷환경은낮은전력, 불안정한통신상황, 프로그램의경량화등의특성을가지기때문에기존의프로토콜들보다는다른경량화된프로토콜이필요하다. 2
현재국제적인획일화된표준은존재하지않지만 ITU-T, onem2m, 3GPP, IETF, IEEE 등의다양한표준화기구에서국제적인표준을확립하기위해글로벌한 IoT/M2M 서비스기술을연구하고있다. ITU-T와 onem2m 등은주로스마트헬스케어나스마트홈과같은서비스플랫폼표준기술을개발하고있으며, 3GPP, IETF, IEEE 등의표준기구는네트워크통신을위한프로토콜을주로연구한다. 현재표준화의선두주자인 3GPP는기대만큼의수익이나오지않아소강상태에머무르고있으며, IETF는대표적인프로토콜로 CoAP을핵심적으로사용하고있다. IEEE는원활한 M2M 통신을제공하기위해 IEEE 802.x 계열의무선통신기술을확장하는표준개발이이루어지고있다. 국내에서의표준활동은 TTA를중심으로 M2M 서비스요구사항, 이동통신무선접속기술, 표준플랫폼간의인터페이스등을표준화하는작업을 ITU-T, onem2m 등과의국제표준화공동협력을추진하고있다. 2. MQTT 란? 2.1 MQTT 소개 MQTT는 1999년 IBM에서 M2M과사물인터넷에서사용하기위해만들어진경량의 Publish- Subscribe기반메시지프로토콜이다. 사물인터넷의한계인낮은전력, 낮은대역폭, 낮은성능등의환경에서도사용할수있도록설계됐다. 가전기기, 빌딩, 집, 산업등다양한영역에서의정보를수집할수있다. MQTT는메시지를 Publish 하고, 관심있는주제를 Subscribe 하는것을기본원칙으로한다. Publish-Subscribe 모델은센서들가운데 Broker가필요하다. Broker는관심있는 Topic을기반으로클라이언트들에게메시지를나눠주는역할을한다. 이때클라이언트는 Publisher 와 Subscriber 모두를지칭한다. Publish와 Subscribe는 Topic을기반으로작동한다. Topic 은 / 를이용해서계층적으로구성할수있어대량의센서기기들을중복현상없이효율적으로관리할수있다. 3
Figure 2. MQTT System 개요도 MQTT로통신을하기위해서는우선 Publisher가브로커에연결을요청해야한다. 연결이완료된후 Publisher는관심있는주제로브로커에게정보를전송할수있다. 만약연결을끝내고싶을때는 Publisher가브로커에게연결해제요청을전송하면된다. MQTT는신뢰성을위해 3가지의 QoS(Quality of Service) 레벨을정의한다. Qos 0 레벨은메시지를최대 1번만전송하는방식으로메시지가잘도착했는지중간에손실되었는지알수없다. QoS 1 레벨은메시지를적어도한번이상보내는방식으로메시지가잘도착하면수신측에서 ACK 메시지를전송한다. 이 ACK 메시지를보고 Publish/Subscribe가잘되었는지확인할수있다. QoS 2 레벨은메시지를정확히 1번전송한다. Publish를하게되면수신측에서잘받았으면 PUBACK를송신측으로보내게되고, 송신측이 PUBACK까지잘받았다면다시 PUBREL 메시지를보낸후수신측으로부터 PUBCOMP를받게되면메시지전송이완료된다. QoS 2는가장신뢰성이높은방식이지만큰오버헤드때문에낮은성능의기기나좋지못한네트워크환경에서는사용하기힘들다. 2.2 MQTT Broker Mosquitto 소개 Mosquitto는이클립스에서만든 MQTT 프로토콜버전 3.1과 3.1.1을구현한오픈소스메시지브로커입니다. Mosquitto는 publish/subscribe 모델을이용한경량화통신기능을제공합니다. 이프로그램은저전력센서, 모바일기기, 임베디드컴퓨터사이의통신과같은 IoT 환경에서의통신에적합합니다. 4
3. Mosquitto broker 설치 MQTT 프로토콜을사용하기위해오픈소스로제공되는 Mosquitto 브로커를설치합니다. 3.1 Broker 다운로드 Mosquitto 브로커를다운로드하기위해 http://mosquitto.org/download/ 로이동하여 windows 버전의설치파일을다운로드받습니다. Figure 3. Mosquitto 설치파일다운로드 3.2 Broker 설치 다운로드받은설치파일을실행시킵니다. Mosquitto는내부적으로보안을위한 OpenSSL과 Pthread 라이브러리를사용하기때문에 OpenSSL을설치하고 Pthread dll 파일을다운로드하여야합니다. 설치중설치파일과 dll파일을다운로드할수있는링크를알려주니해당링크로이동하여 OpenSSL 설치파일과 Pthread dll파일을다운로드합니다. 나머지는기본설정으로두고설치를계속진행합니다. 5
Figure 4. OpenSSL & Pthread dll 다운로드 Mosquitto 설치가끝나면설치중다운로드한 PthreadVC2.dll 파일은 Mosquitto 디렉터리 (C:\Program Files (x86)\mosquitto) 에넣어주고, 다운로드한설치파일을 이용하여 OpenSSL 을설치합니다. OpenSSL 설치시 OpenSSL dll 설치디렉터리를그림과같이변경 시켜줍니다. 다른설정은변경하지않고설치를진행합니다. 6
Figure 5. OpenSSL 설치 OpenSSL 설치가완료되면 OpenSSL 이설치된디렉터리 (C:\OpenSSL-Win32\bin) 에있는모 든 dll 파일들을 Mosquitto 디렉터리 (C:\Program Files (x86)\mosquitto) 에복사합니다. Figure 6. OpenSSL dll 파일들 7
3.3 Broker 실행 다음과같은순서로 Mosquitto 를실행합니다. 1) CMD를실행합니다. 2) Mosquitto 디렉터리 (C:\Program Files (x86)\mosquitto) 로이동합니다. à cd C:\Program Files (x86)\mosquitto 3) mosquitto.exe를실행합니다. à mosquitto.exe -v Mosquitto 브로커실행 Figure 7. Mosquitto 실행화면 8
3.4 Broker 테스트 Mosquitto 가제대로설치되었는지알아보기위해다음과같은순서로 mosquitto 를테스트 합니다. 먼저 mosquitto_sub 프로그램을 simpletest 토픽을구독하도록실행합니다. 1) CMD를실행합니다. 2) Mosquitto 디렉터리 (C:\Program Files (x86)\mosquitto) 로이동합니다. à cd C:\Program Files (x86)\mosquitto 3) mosquitto_sub.exe 를실행합니다. à mosquitto_sub.exe h localhost t simpletest mosquitto_sub.exe 실행 Figure 8. mosquitto_sub.exe 실행화면 9
이제다음과같은순서로 mosquitto_pub 프로그램을 simpletest 토픽을구독하고있는클라 이언트들에게메시지를전달하도록실행후메시지가전달되는것을확인합니다. 1) CMD를실행합니다. 2) Mosquitto 디렉터리 (C:\Program Files (x86)\mosquitto) 로이동합니다. à cd C:\Program Files (x86)\mosquitto 3) mosquitto_pub.exe 를실행합니다. à mosquitto_pub.exe h localhost t simpletest m Hello Mosquitto mosquitto_pub.exe 실행 4. Paho 를이용한 Pub-Sub 구현 MQTT 를쉽게사용할수있도록도와주는 JAVA 기반의 Paho 라이브러리가존재합니다. Paho 라이브러리를이용하여 Mosquitto 에게데이터를보내는 publisher 와, publish 된데이터 를받는 Subscriber client 를구현해보도록하겠습니다. 4.1 JRE 7 설치 MQTT Paho 라이브러리는자바로구현되어졌기때문에사용하기위해서는 JDK가필요합니다. JAVA 는 Oracle이소유하고있으므로 Oracle 홈페이지로이동합니다. http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 주소로접속하여 JDK 설치파일을다운로드합니다. 10
Figure 9. JDK 다운로드 4.2 Paho library 다운로드 Paho library 를사용하기위해 Paho JAR (JAVA Archive) 파일을다운로드합니다. http://mvnrepository.org/artifact/org.eclipse.paho/org.eclipse.paho.client.mqttv3/1.1.0 로이 동하면 Paho 라이브러리 JAR 파일을다운로드할수있습니다. Figure 10. Paho library 다운로드 11
4.3 Paho library 예제 Paho library를편하게사용할수있도록간단한예제를만들었습니다. Eclipse를이용하여프로젝트를 Import한후실행시켜봅니다. 예제는 http://protocol.knu.ac.kr 에방문하시면다운로드받을수있습니다. 다운로드한파일의압축을풀어주세요. 압축을푼디렉터리를 Workspace로하여이클립스를실행한후아래그림의절차를따라하여프로젝트를 import 합니다. Figure 11. import 프로젝트절차 12
4.4 테스트 프로젝트 import 가완료되었으면, 앞의 3.3 Broker 실행 페이지를참고하여 mosquito.exe 프로그램을실행한후아래의그림을참고하여프로젝트에 Broker IP Address 를 Arguments 로추가한후 Paho_Subscriber, Paho_Publisher 순으로실행합니다. Figure 12. 프로젝트실행환경구성 Figure 13. 프로젝트실행화면 13