etc
MQTT란? / mosquitto 설치 및 테스트
inderrom
2023. 6. 26. 17:08
MQTT : Message Queuing Telemetry Transport
- 경량의 발행-구독 기반 메시징 프로토콜
- MQTT는 일반적으로 네트워크 상에서 제한된 대역폭을 가진 장치들 사이에서 데이터를 효율적으로 전송하기 위해 설계함
- MQTT는 발행-구독 메시징 패턴을 따른다. 이는 메시지를 발행하는 "Publisher"와 해당 메시지를 수신하는 "Subscriber" 사이의 통신을 의미. Publisher는 특정 주제(topic)에 대한 메시지를 발행하고, Subscriber는 관심 있는 주제를 구독하여 해당 주제에 대한 메시지를 수신함.
- MQTT는 경량 프로토콜로서, TCP/IP 위에서 동작하며, 대역폭이 제한된 네트워크 환경에서도 효율적으로 작동. 따라서 인터넷 연결이 불안정하거나 대역폭이 작은 장치들 간에 데이터를 전송하는데 많이 사용. 예를 들어, 센서 장치, 제어 시스템, M2M(Machine-to-Machine) 통신 등의 분야에서 MQTT는 널리 사용된다,
- MQTT의 특징
- 경량 프로토콜: 메시지 전송을 위한 오버헤드가 적어서 대역폭을 절약
- 퍼블리셔-서브스크라이버 모델: 발행-구독 패턴을 따르므로 여러 개의 Subscriber가 동시에 메시지를 수신 가능
- 유연성: 다양한 클라이언트 및 플랫폼에서 사용할 수 있음
- 내결함성: 네트워크 연결이 불안정한 경우에도 데이터 손실을 최소화하고 메시지 전달을 보장
- 토픽 기반 메시지 필터링: Subscriber는 관심 있는 주제를 선택하여 메시지를 구독할 수 있음
즉 MQTT는 IoT(Internet of Things) 및 M2M 통신 분야에서 널리 사용되며, 다양한 MQTT 브로커 및 클라이언트 라이브러리가 제공되어 개발 및 구현이 용이.
프로토콜 구성 요소와 사용 방법
- MQTT 프로토콜의 구성 요소:
- Broker(브로커): MQTT 메시지를 수신하고 발행하는 서버. 클라이언트 간의 통신을 조정하고 메시지를 라우팅 한다.
- Publisher(퍼블리셔): 특정 주제에 대한 메시지를 발행하는 클라이언트.
- Subscriber(서브스크라이버): 관심 있는 주제를 구독하여 해당 주제의 메시지를 수신하는 클라이언트.
- Topic(주제): 메시지를 구분하는 논리적인 주제.
- MQTT 메시지 전달:
- Publisher(퍼블리셔)는 Broker(브로커)에게 메시지를 특정 주제로 발행.
- Broker는 해당 주제를 구독 중인 Subscriber(서브스크라이버)에게 메시지를 전달.
- Subscriber는 메시지를 수신하고 필요에 따라 처리.
- MQTT 토픽(Topic):
- 토픽은 MQTT 메시지를 발행하거나 수신하는 데 사용되는 주제를 나타냄.
- 토픽은 계층적인 구조를 가지며, 슬래시("/")로 구분.
- 예를 들어, "home/living-room/temperature"은 "home"이라는 상위 토픽에 속하고 "living-room"이라는 하위 토픽에 속하며, "temperature"이라는 최하위 토픽.
- Subscriber는 원하는 토픽을 구독하여 해당 토픽의 메시지를 수신함.
- MQTT QoS(Quality of Service, 서비스 품질):
- MQTT는 메시지 전달의 QoS 수준을 설정할 수 있음.
- QoS 수준은 메시지의 전달 보장 정도를 나타냄.
- QoS 0: 최대 한 번의 메시지 전달을 보장하지 않는다. 메시지 손실 가능성이 있음.
- QoS 1: 적어도 한 번의 메시지 전달을 보장한다. 중복 전송이 발생할 수 있음.
- QoS 2: 정확히 한 번의 메시지 전달을 보장한다. 중복 전송이 없음.
- MQTT 클라이언트 라이브러리:
- MQTT 프로토콜을 구현하기 위해 다양한 클라이언트 라이브러리 제공.
- 클라이언트 라이브러리는 다양한 프로그래밍 언어에서 MQTT를 쉽게 사용할 수 있도록 도와준다.
- 예를 들어, Python에서는 Paho MQTT 라이브러리가 널리 사용됨.
- 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에서 메세지를 확인할 수 있다.
