etc

MQTT란? / mosquitto 설치 및 테스트

inderrom 2023. 6. 26. 17:08

MQTT : Message Queuing Telemetry Transport

  • 경량의 발행-구독 기반 메시징 프로토콜
  • MQTT는 일반적으로 네트워크 상에서 제한된 대역폭을 가진 장치들 사이에서 데이터를 효율적으로 전송하기 위해 설계함

  1. MQTT는 발행-구독 메시징 패턴을 따른다. 이는 메시지를 발행하는 "Publisher"와 해당 메시지를 수신하는 "Subscriber" 사이의 통신을 의미. Publisher는 특정 주제(topic)에 대한 메시지를 발행하고, Subscriber는 관심 있는 주제를 구독하여 해당 주제에 대한 메시지를 수신함.
  2. MQTT는 경량 프로토콜로서, TCP/IP 위에서 동작하며, 대역폭이 제한된 네트워크 환경에서도 효율적으로 작동. 따라서 인터넷 연결이 불안정하거나 대역폭이 작은 장치들 간에 데이터를 전송하는데 많이 사용. 예를 들어, 센서 장치, 제어 시스템, M2M(Machine-to-Machine) 통신 등의 분야에서 MQTT는 널리 사용된다,
  3. MQTT의 특징
    1. 경량 프로토콜: 메시지 전송을 위한 오버헤드가 적어서 대역폭을 절약
    2. 퍼블리셔-서브스크라이버 모델: 발행-구독 패턴을 따르므로 여러 개의 Subscriber가 동시에 메시지를 수신 가능
    3. 유연성: 다양한 클라이언트 및 플랫폼에서 사용할 수 있음
    4. 내결함성: 네트워크 연결이 불안정한 경우에도 데이터 손실을 최소화하고 메시지 전달을 보장
    5. 토픽 기반 메시지 필터링: Subscriber는 관심 있는 주제를 선택하여 메시지를 구독할 수 있음

즉 MQTT는 IoT(Internet of Things) 및 M2M 통신 분야에서 널리 사용되며, 다양한 MQTT 브로커 및 클라이언트 라이브러리가 제공되어 개발 및 구현이 용이.


프로토콜 구성 요소와 사용 방법

  1. MQTT 프로토콜의 구성 요소:
    • Broker(브로커): MQTT 메시지를 수신하고 발행하는 서버. 클라이언트 간의 통신을 조정하고 메시지를 라우팅 한다.
    • Publisher(퍼블리셔): 특정 주제에 대한 메시지를 발행하는 클라이언트.
    • Subscriber(서브스크라이버): 관심 있는 주제를 구독하여 해당 주제의 메시지를 수신하는 클라이언트.
    • Topic(주제): 메시지를 구분하는 논리적인 주제.
  2. MQTT 메시지 전달:
    • Publisher(퍼블리셔)는 Broker(브로커)에게 메시지를 특정 주제로 발행.
    • Broker는 해당 주제를 구독 중인 Subscriber(서브스크라이버)에게 메시지를 전달.
    • Subscriber는 메시지를 수신하고 필요에 따라 처리.
  3. MQTT 토픽(Topic):
    • 토픽은 MQTT 메시지를 발행하거나 수신하는 데 사용되는 주제를 나타냄.
    • 토픽은 계층적인 구조를 가지며, 슬래시("/")로 구분.
    • 예를 들어, "home/living-room/temperature"은 "home"이라는 상위 토픽에 속하고 "living-room"이라는 하위 토픽에 속하며, "temperature"이라는 최하위 토픽.
    • Subscriber는 원하는 토픽을 구독하여 해당 토픽의 메시지를 수신함.
  4. MQTT QoS(Quality of Service, 서비스 품질):
    • MQTT는 메시지 전달의 QoS 수준을 설정할 수 있음.
    • QoS 수준은 메시지의 전달 보장 정도를 나타냄.
      • QoS 0: 최대 한 번의 메시지 전달을 보장하지 않는다. 메시지 손실 가능성이 있음.
      • QoS 1: 적어도 한 번의 메시지 전달을 보장한다. 중복 전송이 발생할 수 있음.
      • QoS 2: 정확히 한 번의 메시지 전달을 보장한다. 중복 전송이 없음.
  5. MQTT 클라이언트 라이브러리:
    • MQTT 프로토콜을 구현하기 위해 다양한 클라이언트 라이브러리 제공.
    • 클라이언트 라이브러리는 다양한 프로그래밍 언어에서 MQTT를 쉽게 사용할 수 있도록 도와준다.
    • 예를 들어, Python에서는 Paho MQTT 라이브러리가 널리 사용됨.
  6. MQTT의 활용:
    • IoT(Internet of Things) 분야에서 센서 데이터 수집 및 제어 시스템과의 통신에 사용.
    • M2M(Machine-to-Machine) 통신에서 다양한 장치 간에 데이터를 교환하기 위해 사용.
    • 모바일 및 웹 애플리케이션과의 실시간 통신에 활용.

설치 및 테스트

 

1. mosquitto 설치

$ brew install mosquitto

2. 실행

$ brew services start mosquitto

 

3. 중지

$ brew services stop mosquitto

 

4. 재실행

$ brew services restart mosquitto

 

5. 비서비스 시작 (이 명령어를 사용하면 $ brew services start mosquitto 를 사용할 필요 없음. )

  • 설치 경로 주의 (설치된 경로에 맞게 입력해준다.)
/usr/local/opt/mosquitto/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf

 

혹시 homebrew에 설치되어있는 app의 경로를 모를 경우 아래 명령어를 통해 경로를 확인할 수 있음

$ brew info [appname]

 

** 또한 port번호 1883이 중복되어 있는 경우 (mac 명령어)

  • 아래 명령어를 통해 1883인 포트번호를 찾고
$ netstat -p tcp -van | grep LISTEN | grep 1883
  • kill한다……
$ kill -9 [프로세스 ID]

 

6) 브로커에 clients를 설치해준다.

$ brew install mosquitto-clients

 

7) 터미널 창 2개를 추가로 띄워 subscribe, publish 해준다. 

$ mosquitto_sub -h [브로커의 IP] -p [포트번호] -t [TOPIC]

# /usr/local/opt/mosquitto/bin/mosquitto_sub -h localhost -p 1883 -t romworld
$ mosquitto_pub -h [브로커의 IP] -p [포트번호] -t [TOPIC] -m [MESSAGE]

# /usr/local/opt/mosquitto/bin/mosquitto_pub -h localhost -p 1883 -t romworld -m 환영합니다

왼쪽은 브로커, 오른쪽 상단은 구독, 하단은 발행이다. sub에서 메세지를 확인할 수 있다.