- 신뢰성 있는 데이터 전송 및 원격제어를 위해 만들어진 프로토콜이다. (ISO 표준)
- 열악한 네트워크 환경에서 센서 하나 정도 달린 작은 기기들의 데이터 전송 및 원격제어를 위해 만들어졌다.
- IoT 에서는 인터넷에서 자주 사용되는 HTTP 프로토콜을 쓰기도 하지만, MQTT라는 IoT용 프로토콜도 자주 사용한다.
특징
- 실시간, 최소 전력, 신뢰성 있는 비동기적 메시징 방식 (TCP/IP 기반)
- 경량 프로토콜
- 이벤트 방식의 N:N 통신 지원
구성
Broker
- 메시지가 들어오는 통로이다.
- 반드시 Broker를 통해서만 통신이 가능하다.
- 메시지의 전송 여부, 에러 여부를 확인할 수 있다.
Publisher & Subscriber
누구나 발행/구독을 할 수 있으며, 동시에 할 수도 있다.
MQTT 메시징 방식
토픽 (Topic)
- 메시지에 태그를 건다
- 구독자는 원하는 토픽만 선택해서 메시지를 받는다
주제 선정 방법
- 가급적 선행 슬래시를 사용하지 않을 것
- /home/floor/room1
(X)
- home/floor/room1
(O)
- 공백을 사용하지 않을 것
- home/floor/my room
(X)
- home/floor/room
(O)
- 짧고 간결하게 유지할 것
- 길어질 경우 데이터 용량이 늘어난다
- ASCII 문자만 사용할 것
- home/floor/room
(O)
- 집/1층/방
(X)
- 아이디를 넣어주면 좋다
- 확장성을 염두에 두고 만들면 좋다
- 특정 주제를 사용한다
- 거실에 센서가 3개 있는 경우
- home/livingroom/temp
- home/livingroom/humid
- home/livingroom/bright
서비스 품질 QoS (Quality of Service)
- Publisher가 QoS를 결정해서 publish 한다.
- QoS Level 설정
- Level 0: 한 번 보내면 끝
- Level 1: 구독자가 메시지를 받았는지 불확실하면 정해진 수만큼 재전송 (중복 위험)
- Level 2: 메시지를 정확히 한 번 수신할 수 있도록 철저히 감시하며 신호 품질을 보장
=> QoS Level이 높을 수록 품질이 보장되지만, 대역폭을 많이 소모한다.
wildcard
- 한 번에 다량의 메시지를 관리할 때 사용한다.
- 단일 레벨:
+
, 중간 계층을 선택해서 동일한 하위 계층의 메시지를 읽어온다.
- 멀티 레벨:
#
, 가장 마지막에 추가할 수 있으며 상위 계층의 모든 하위 계층 메시지를 읽어온다.
인바운드 설정
localhost에서는 별도의 IP 설정 없이 접속을 할 수 있지만, 외부에서 접속할 경우 IP를 이용한 접속이 필요하다. 때문에 인바운드 설정을 해주어야 한다.
# conf 파일 가장 아래에 문구 추가
# /etc/mosquitto/mosquitto.conf
port 1883
allow_anonymous true