MQTT Reference
MQTT IoT 프로토콜 레퍼런스
MQTT Reference 소개
이 MQTT 프로토콜 레퍼런스는 CONNECT/CONNACK 핸드셰이크, Keep Alive PING 메커니즘, 비정상 종료 감지를 위한 Will Message 설정, DISCONNECT 패킷 처리 등 MQTT 메시징 라이프사이클 전체를 다루는 검색 가능한 가이드입니다.
QoS 0(최대 1회), QoS 1(최소 1회, PUBACK 확인), QoS 2(정확히 1회, 4단계 핸드셰이크)의 메시지 전달 보장 수준, Retain 플래그 동작, 발행자와 구독자 간 QoS 다운그레이드 규칙을 상세히 설명합니다.
단일 레벨(+)과 다중 레벨(#) 와일드카드를 활용한 토픽 설계 패턴, $SYS 브로커 모니터링 토픽, 포트 8883의 TLS/SSL 암호화 연결, 사용자 인증, ACL 접근 제어, 웹 브라우저용 WebSocket 전송도 포함하고 있습니다.
주요 기능
- Python Paho MQTT 클라이언트 코드로 설명하는 CONNECT, CONNACK, DISCONNECT 패킷 처리
- PINGREQ/PINGRESP 기반 Keep Alive 메커니즘과 설정 가능한 간격
- 비정상 연결 끊김 감지를 위한 Will Message(유언 메시지) 설정
- QoS 0, QoS 1, QoS 2 전달 보장 수준과 프로토콜 흐름 설명
- 브로커에 마지막 메시지를 보관하는 Retain 플래그 동작 원리
- 단일 레벨(+)과 다중 레벨(#) 토픽 와일드카드 패턴 및 실용 예제
- TLS/SSL 암호화 연결, 사용자/비밀번호 인증, ACL 접근 제어 설정
- 포트 9001 기반 브라우저용 WebSocket MQTT 통신 지원
자주 묻는 질문
MQTT의 세 가지 QoS 레벨은 무엇인가요?
QoS 0(At most once)은 전달 확인 없이 메시지를 보내 가장 빠르지만 신뢰성이 낮습니다. QoS 1(At least once)은 PUBACK 확인으로 전달을 보장하지만 중복이 발생할 수 있습니다. QoS 2(Exactly once)는 4단계 핸드셰이크(PUBLISH, PUBREC, PUBREL, PUBCOMP)로 정확히 한 번 전달을 보장하여 결제나 주문 처리에 적합합니다.
MQTT 토픽 와일드카드는 어떻게 작동하나요?
단일 레벨 와일드카드(+)는 토픽의 한 레벨만 매칭합니다. 예를 들어 sensor/+/temperature는 sensor/room1/temperature와 sensor/room2/temperature에 매칭됩니다. 다중 레벨 와일드카드(#)는 나머지 모든 레벨을 매칭하며 마지막 문자여야 합니다. sensor/#는 sensor/temp, sensor/room1/temp 등 모두에 매칭됩니다.
MQTT Will Message란 무엇인가요?
Will Message(유언 메시지)는 CONNECT 단계에서 설정됩니다. 클라이언트가 DISCONNECT 패킷을 보내지 않고 비정상 종료(네트워크 장애, 크래시)되면, 브로커가 사전 설정된 메시지를 지정 토픽에 자동 발행합니다. "offline" 상태를 다른 구독자에게 알리는 데 주로 사용됩니다.
MQTT 연결을 TLS로 어떻게 보호하나요?
포트 8883에서 TLS/SSL을 사용하며, client.tls_set(ca_certs, certfile, keyfile)로 CA 인증서, 클라이언트 인증서, 클라이언트 키를 설정합니다. 추가로 client.username_pw_set()으로 사용자 인증을 설정하고, 브로커의 ACL 파일로 사용자별 토픽 읽기/쓰기 권한을 제어할 수 있습니다.
MQTT의 Retain 플래그란 무엇인가요?
retain=True로 메시지를 발행하면 브로커가 해당 토픽의 마지막 메시지를 보관합니다. 새로운 구독자가 해당 토픽을 구독하면 다음 발행을 기다리지 않고 즉시 보관된 메시지를 수신합니다. 기기의 온라인/오프라인 상태 표시에 유용합니다.
발행자와 구독자의 QoS 레벨이 다르면 어떻게 되나요?
MQTT 브로커는 두 QoS 중 낮은 쪽으로 다운그레이드합니다. 발행자가 QoS 2로 보내도 구독자가 QoS 1로 구독했다면, 구독자는 QoS 1로 메시지를 수신합니다. 실제 적용 QoS는 항상 발행 QoS와 구독 QoS 중 최솟값입니다.
MQTT의 $SYS 토픽은 무엇인가요?
$SYS 토픽은 MQTT 브로커가 발행하는 특수 시스템 토픽으로, 운영 지표를 제공합니다. $SYS/broker/clients/connected(연결된 클라이언트 수), $SYS/broker/messages/received(수신된 총 메시지 수) 등이 있습니다. 읽기 전용이며 브로커 모니터링과 진단에 유용합니다.
MQTT를 웹 브라우저에서 사용할 수 있나요?
네, MQTT는 WebSocket 전송을 지원하여 브라우저 기반 JavaScript 클라이언트가 브로커에 연결할 수 있습니다. transport="websockets"로 클라이언트를 설정하고 포트 9001로 연결합니다. 이를 통해 실시간 IoT 대시보드와 웹 애플리케이션이 플러그인 없이 MQTT로 통신할 수 있습니다.