MQTT
IT 위키
Message Queuing Telemetry Transport
발행-구독(Publish-Subscribe) 구조를 쓰는 경량 메시지 전송 프로토콜
- 1999년 IBM 이 유전 파이프라인 감시용으로 만들었고, 현재는 OASIS 표준이다.
- 헤더가 최소 2바이트로 매우 작아, 대역폭이 좁고 전력이 제한된 환경에 적합하다.
- IoT 와 M2M 통신의 사실상 표준으로 쓰인다.
- TCP 1883번 포트를 쓰고, TLS 적용 시 8883번을 쓴다.
- 발행자(Publisher) : 메시지를 보내는 쪽. 센서 등
- 브로커(Broker) : 중개 서버. 모든 메시지가 여기를 거친다
- 구독자(Subscriber) : 관심 있는 주제의 메시지를 받는 쪽
발행자와 구독자는 서로를 알지 못한다. 브로커의 토픽(Topic)을 통해서만 연결되므로 한쪽이 바뀌어도 다른 쪽에 영향이 없다.
토픽은 `home/livingroom/temperature` 처럼 계층 구조로 쓰며, `+`(한 단계)와 `#`(그 아래 전부) 와일드카드로 구독할 수 있다.
| 수준 | 보장 | 설명 |
|---|---|---|
| QoS 0 | At most once | 한 번 보내고 확인하지 않는다. 유실 가능 |
| QoS 1 | At least once | 확인될 때까지 재전송한다. 중복 도착 가능 |
| QoS 2 | Exactly once | 정확히 한 번 전달한다. 가장 느리고 무겁다 |
- Last Will and Testament : 클라이언트가 비정상 종료하면 브로커가 미리 등록해 둔 유언 메시지를 대신 발행한다. 장치 연결 끊김을 감지하는 데 쓴다.
- Retained Message : 토픽의 마지막 메시지를 보관해, 새로 구독한 클라이언트가 즉시 현재 값을 받게 한다.
- Keep Alive : 일정 주기로 PINGREQ 를 보내 연결 상태를 확인한다.
- 기본적으로 평문이다. TLS 적용이 필요하다.
- 사용자명·비밀번호 인증을 지원하지만 평문 전송되므로 TLS 와 함께 써야 한다.
- 브로커에서 토픽별 접근 제어를 설정한다. 설정을 빠뜨린 공개 브로커가 노출되는 사고가 자주 발생한다.
