프로토콜 기본 개념
MQTT는 발행/구독 모델 기반의 경량 메시징 프로토콜로, 낮은 대역폭과 불안정한 네트워크 환경에서 동작하도록 설계되었습니다. IoT 기기, 모바일 애플리케이션, 스마트 디바이스 등 다양한 분야에서 실시간 메시지 전송을 위해 활용됩니다.
메시지 전송 품질(QoS) 수준
- QoS 0: 최대 한 번 전달. 수신자 확인 없이 단방향 발행
- QoS 1: 최소 한 번 전달 보장. 수신 확인(ACK) 실패 시 재전송
- QoS 2: 정확히 한 번 전달 보장. 중복 수신 방지 메커니즘 적용
연결 지속성 관리
재연결 시 누락된 메시지 수신을 위해 클라이언트는 세션 지속 옵션을 활성화할 수 있습니다. 이 경우 서버는 구독 정보와 미전송 메시지를 임시 저장합니다.
실시간 상태 모니터링
네트워크 불안정 대응을 위해 Keep Alive 메커니즘을 구현합니다. 지정된 간격으로 하트비트 신호를 교환하여 연결을 유지하며, 비정상 종료 시 Last Will 메시지를 지정된 주제로 발행합니다.
클라이언트-서버 아키텍처
docker run -d --name mqtt_server \
-p 1883:1883 -p 8883:8883 -p 18083:18083 \
emqx/emqx:5.0
MQTTX는 크로스 플랫폼 클라이언트 도구로 MQTT 5.0 기능을 지원합니다.
발행/구독 메시징 모델
중계 서버(Broker)가 발행자와 구독자 간의 완전한 분리를 관리합니다. 발행자는 특정 주제(Topic)에 메시지를 게시하고, 구독자는 관심 주제를 등록하여 메시지를 수신합니다.
주제 라우팅 시스템
home/livingroom/temperature
sensor/+/status
building/#
계층적 주제 구조와 단일 레벨(+), 다중 레벨(#) 와일드카드를 지원합니다. $SYS/ 접두사는 서버 상태 모니터링을 위한 시스템 주제에 사용됩니다.
보안 연결 설정
TLS/SSL 암호화를 통한 보안 채널 구성이 가능합니다. 기본 포트:
- 비암호화 TCP: 1883
- TLS 암호화: 8883
- WebSocket: 8083
- 암호화 WebSocket: 8084
클라이언트 인증 파라미터
- 고유 식별자(Client ID)
- 사용자 인증 정보(Username/Password)
- 세션 지속 플래그(Clean Session)
- 연결 제한 시간(Timeout)
지속 세션 관리
영구 세션은 네트워크 중단 시에도 QoS 보장과 오프라인 메시지 수신을 가능하게 합니다. Clean Session 플래그로 세션 지속성을 제어합니다.