# 목차 # ------------------------------------------------------------------

    [MQTT] Mosquitto 설치 및 테스트 (Ubuntu 22.04) - 현재 글

    [MQTT] Mosquitto 테스트 코드 (C code)

    ------------------------------------------------------------------------------

     

      드론의 Cloud API의 요구사항에 Mosquitto가 있었다. 필자가 이전에 다니던 회사에서 자주 사용하던 녀석이지만, 당시 BSP만 개발하던 필자의 입장에서는 패키지만 설치 또는 포팅해주었지 실제 사용한 적은 없다. 관심도 별로 없었고, 그러다가 이제는 필자가 운영플랫폼을 만들기 위해서 해야되는 상황이 되었다. 그래서, 우선 패키지를 설치하고 샘플 프로그램을 작성해보는 선 까지 진행하려 한다. 

     

    1. MQTT (Message Queuing Telemtry Transper) 개요

    1.1. 사용목적

    디바이스간 최소한의 전력과 패킷량으로 통신하기 위해서 개발된 프로토콜이며, 원격 제어와 측정의 목적으로 주로 사용된다. 이러한 통신 프로토콜은 M2M (Machine to Machine)의 통신과 IoT(Internet of Things)와 같은 분야에 적용에 유익하다. 

     

    1.2. MQTT  특징 

       우선 첫째로, 실시간 통신과 낮은 전력사용이 요구되며 또한 비동기 통신을 지원하고 신뢰성을 갖추고있다. 이러한 요구조건을 만족하기 위해서 경량 메시지 포맷을 이용하게 되며, 작은 메모리로도 운영되어야 한다. 또한 멀티유저, 멀티 디바이스를 지원하며 응용코드 변경없이 기능확장이 가능하고, 저장과 전달, 발행과 구독기능을 지원한다. 마지막으로 사용자는 이러한 서비스를 이용하기 위해서 간단한 개념을 이해하여 사용할 수 있도록 하고있다.

     

    1.3. MQTT 구조

      MQTT는 Borker를 중신으로 Publisher(발행자)가 Topic(채널)을 발행하면 브로커(Broker)가 이를 중개하는 구조로, 구독자(Subscriber)는 브로커를 통해 필요한 Topic을 구독하여 메시지를 전달 받을 수 있다. 양 측의 Publisher와 Subscriber는 직접연결이 되지않은 상태이므로 메시지 큐를 사용하여 데이터를 관리하고 전달되는 비동기 방식의 구조를 가지고 있다.

     

     

      

    우선 이정도만 알아두도록 하고 더 자세한 부분은 인터넷을 검색하여 확인해보도록 하자. 어쨋든 내용을 정리하자면, 하나 이상의 시스템이 네트워크로 연결되어있을 때, 각 시스템은 구독자가 될 수 있고, 퍼블리셔도 될수 있다. 일반적으로 퍼블리셔는 센서등 입력값을 처리하는데 주로 사용되고, 서브스크리버는 이를 이용하여 어떠한 행위를 하는 용도로 사용된다. 그리고 관심있는 토픽에 대해서 여러 서브스키리버가 데이터를 동시에 받을 수 도 있다. 

     

    1.4. MQTT 브로커 구성 방식

    1) PC에 MQTT를 설치하여 사용

      PC에 MQTT 관련 소프트웨어를 사용하는 방식으로 대표적으로 Mosquitto (Eclipse, 무료)를 주로 이용

    2) MQTT 서비스 업체 이용방식

      AWS나 CloudMQTT를 이용할 수 있다. 다만, 이 방식의 경우 사용클라이언트의 수와 용량에 따라 비용이 발생된다.

    3) MQTT 하드웨어 이용방식

      임베디드 시스템등을 이용하여 만들어진 MQTT 시스템으로 MQTT.box와 같은 형태로 제공된다. 네트워크를 이용하는 시스템이므로 동작은 보편적인 네트워크 게이트웨이 장비와 유사하다.

     

     

    2. MQTT 설치 및 테스트 (Ubuntu)

      우분투나 데비안은 같은 계열이므로 apt를 이용하여 손쉽게 mosquitto를 설치하여 사용할 수 있다. 

    2.1. Mosquitto 서버 및 클라이언트 설치

    1) 우분투 업데이트

        $ sudo apt update

     

    2) 저장소 추가

      아래의 저장소를 레퍼지터리 리스트에 추가한다.

       $ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa

     

    3) 다운로드 및 설치 

      install 명령으로 서버와 클라리언트 패키지를 설치한다.

      $ sudo apt install mosquitto mosquitto-clients

     

    2.2. 테스트 

      설치가 완료되었으면 테스트를 진행하자. 지금 우분투에 MQTT(mosquitto)를 설치했으니 함께 설치된 도구를 통해서 어떻게 사용하는지 확인 해보도록 하자.  지금 당장은 별다른 설정을 해주지 않아도 된다. 예를들면, 포트 설정이라던지 말이다.

     

    1) mosquitto 버전 확인

      아래의 명령을 이용하여 mosquitto 버전을 확인할 수 있다.

      $ mosquitto -v

     

     

    2) 1:1 퍼블리셔와 섭크라이버 예시

      우선 아랫쪽 터미널과 같이 mossquitto_sub를 이용하여 네트워크주소(localhost, 자신의 ip로서 127.0.0.1과 같다)에서 보내지는 지정된 토픽(myTopic)에 대해서 구독을 하도록 실행하였다.

      $ mosquitto_sub -h localhost -t myTopic

     

      그 다음에 윗쪽 터미널은 퍼플리셔로 localhost에 토픽을 지정(myTopic)하여 메시지를 세번 보냈다.

      $ mosquitto_pub -h localhost -t myTopic -m "First Message" ...

     

     

    그 결과로 구독을 하던 터미널인 아랫쪽 터미널에서는 퍼블리셔가 보낸 메시지를 화면에 출력할 수 있었다.

     

    3) 퍼블리셔 1, 서브스크라이버 2

     만약 구독자가 하나 이상인 경우라면 동일하게 출력될까? 

     

    4) 호스트 시스템에서 발생되는 모든 토픽을 검색하고 싶을 경우에는 아래와 같이 명령을 입력하면, 토픽과 메시지를 같이 출력해 준다. 더 자세한 것은 도움말을 참조하기 바란다. 

      $ mosquitto_sub -h localhost -v -t "#"

     

      결과는 위의 이미지와 같이 동일하게 수신됨을 알수 있다. 아마 네트워크 프로그래밍을 해본 독자라면, 브로드캐스팅을 이용하여 유사하게 만들수 있다는 생각을 할 수 있다. 또한 내부에서만 사용할 경우 네트워크로 포트로 구분하거나 또는 ipc등을 이용하여 만들어서 사용할 수 있다. 다만, 이렇게 만들려면 생각보다 많은 코드를 작성하거나 또는 클래스화 시켜서 사용해야될 것이다.

     

      mosquitto를 이용하면 몇줄만으로 손쉽게 구현할 수 있으며, 큐버퍼를 고민해야 될 필요도 없다. 더군다나 mosquitto는 다양한 언어를 이미 지원하고 있으므로 많은 부분에 활용할 수 있다. 특히 xml등과 함께 사용하면 더욱 편리하게 시용할 수 있다고 한다. 그 부분까지 필자는 해야될 것 같긴한데...

     

    그러면 다음 게시물에서는 C기반으로 간단한 테스트 프로그램을 작성해 보도록 하겠다. 

     

    끝.

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기