MQTT(Message Queueing Telemetry Transport)는 IoT와 같은 제한된 혹은 대규모 트래픽을 처리하기 위한 프로토콜입니다.
TCP/IP 프로토콜 위에서 동작하지만 더 가볍고 기존 프로토콜의 여러 제약에서 자유롭습니다.
QoS(Quality of Service)란?
QoS는 데이터 전송 과정에서 품질을 보장하는 레벨-수준을 의미합니다.
IoT는 Wifi, Bluetooth, ZigBee와 같은 무선 네트워크 망에서 통신하기 때문에 유선 통신보다 더 불안정한 환경에서 동작합니다.
이처럼 불안정한 통신 망에서 프로토콜 수준에서 품질을 보장하기 위한 기술이 QoS입니다.
MQTT의 QoS 레벨
때로는 메시지의 전송을 보장해야 하며 어떤 경우는 안정성이 떨어지더라도 성능을 우선시해야 하는 경우도 있습니다.
QoS에서는 품질 보장의 정도를 QoS 레벨로 나누어서 관리합니다. 예를 들어 MQTT에서는 3가지 QoS 레벨을 관리합니다.
QoS 레벨 0은 보내고 잊습니다.QoS 레벨 1은 최소 한 번은 보냅니다.QoS 레벨 2는 반드시 한 번만 보냅니다.
메시지는 QoS 레벨과 함께 전달되며 레벨에 따라서 지정된 품질을 보장합니다.
따라서 각 메시지가 서로 다른 QoS 레벨에 의해서 지정되며 어떤 메시지를 보내는지에 따라서 품질을 다르게 정할 수 있습니다.
MQTT의 QoS 레벨 0: At most once
메시지는 최대 한 번 전달되거나 전달되지 않을 수 있습니다.
이는 네트워크에서 메시지에 대한 품질 보장을 어떠한 방법으로도 하지 않겠다는 것을 의미합니다.
품질 보장의 의무가 없으므로 메시지는 저장되지 않습니다. Publisher는 메시지를 송신하고 즉시 삭제합니다.
QoS=0는 실행 후 삭제(Fire and Forget)이라고 부르며 가장 빠른 전송 모드입니다.
MQTT의 QoS 레벨 1: At least once
QoS=1은 기본 전송 모드입니다. 메시지는 항상 최소 한 번 전달됩니다.
Publisher는 수신 확인을 완료하지 못하면 메시지는 DUP 플래그가 설정되어 다시 송신합니다.
따라서 Subscriber는 동일한 메시지를 여러 번 수신 할 수 있습니다.
MQTT의 QoS 레벨 2: Extactly once
QoS=2는 가장 안전하지만 가장 느린 전송 모드입니다. 메시지는 반드시 한 번만 전달됩니다.
네트워크에서 완전한 품질을 보장하며 이를 위한 PUBACK 과정에서 3 Way Handshake가 추가됩니다(Receive, Release, Complete).
PUBREC에서 Loss가 생겨 Publisher에서 메시지를 다시 보내더라도 Broker는 이전 상태를 모두 알고 있기 때문에 메시지를 중복으로 보내지 않습니다.
Publisher는 PUBREC를 수신하면 PUBREL를 발생시킵니다. 이제 Publisher는 더 이상 중복 메시지를 보내지 않습니다.
PUBCOM를 받은 Broker와 Publisher는 메시지가 완전히 전송되었으니 더 이상 메시지를 저장 할 필요가 없습니다.
정리 및 복습
QoS는 데이터 전송 과정에서 품질을 보장하는 수준을 의미합니다.- MQTT의
QoS 레벨 0은 최대 한 번보냅니다. - MQTT의
QoS 레벨 1은 최소 한 번 이상보냅니다. Publisher는PUBACK를 받기 전까지 메시지를 중복으로 송신합니다. - MQTT의
Qos 레벨 2는 정확히 한 번보냅니다. 이를 위해3 Way Handshake가 추가됩니다(Receive, Release, Complete).
'CS & ITS > CS' 카테고리의 다른 글
비선점 프로세스 스케줄링(Non-Preemptive scheduling) (0) | 2024.02.20 |
---|---|
WS(Web Server)와 WAS(Web Application Server) 차이점 (0) | 2023.12.28 |
SQL 구문 쿼리를 위한 Statement와 Prepared statement 차이점 (0) | 2023.12.19 |
Ad-Hoc 쿼리와 저장 프로시저(SP, Stored Procedures) 차이점 (0) | 2023.12.18 |
FQCN(Full Qualified Class Name)이란? (0) | 2023.11.27 |