MQTT · 2026-01-15

QoS와 메시지 순서 보장: 인플라이트와 세션 핵심

MQTT에서 메시지 순서 보장과 인플라이트, 지속 세션의 상호작용을 초보자도 이해하기 쉽게 정리한 기술적 요약

작성일 : 2026-01-15 ㆍ 작성자 : 관리자
post
목차

개요

무엇을 다루나

이 글은 MQTT에서 메시지 순서 보장의 범위와 한계, 인플라이트(inflight) 개념, 그리고 세션 상태가 어떻게 결합되어 동작하는지를 설명한다. 처음 접하는 독자도 이해할 수 있도록 용어를 풀고 실제 동작 흐름을 단계적으로 제시한다.

QoS와 메시지 순서의 기본

QoS 수준 요약

  • QoS 0: 최대 한 번 전송. 순서 보장 없음.
  • QoS 1: 적어도 한 번 전송. 중복 가능성 존재.
  • QoS 2: 정확히 한 번 전송. 중복 제거를 위한 추가 절차 존재.

메시지 순서 보장과 현실

브로커와 클라이언트 간의 전송은 네트워크 특성에 따라 지연과 재전송이 발생한다. QoS는 전송 신뢰성에 초점을 맞추지만, 끝에서 끝까지의 전역적 순서 보장은 보장하지 않는다. 즉, 같은 퍼블리셔에서 순서대로 보낸 메시지라도 네트워크 경로와 재전송, 병렬 처리가 개입하면 순서가 뒤바뀔 수 있다.

인플라이트(inflight) 이해

인플라이트란

인플라이트는 아직 확인(ack)을 받지 못한 전송 중인 메시지들의 집합이다. 클라이언트는 인플라이트 윈도우 크기만큼의 메시지까지 보내고, 그 이후에는 확인을 기다려야 한다. 이 메커니즘은 재전송 관리와 리소스 제어 목적을 동시에 수행한다.

인플라이트 제한이 메시지 순서에 미치는 영향

  • 작은 윈도우: 순차 전송이 강제되어 동일 퍼블리셔 내부의 순서 유지 가능성이 높아진다.
  • 큰 윈도우: 병렬 전송이 늘어나면서 네트워크 지연 차이로 순서가 섞일 가능성이 커진다.
  • 재연결 시 인플라이트 상태의 처리 방식에 따라 중복 또는 재정렬이 발생할 수 있다.

세션과 지속성

세션 상태와 clean session

MQTT 세션은 클라이언트의 접속 상태와 서브스크립션, 미처 전달된 메시지(큐잉)를 관리한다. clean session(true)은 연결 종료 시 서버가 상태를 제거함을 의미한다. 반대로 clean session(false)은 세션을 유지하여 재연결 시 미전달 메시지와 서브스크립션을 복원한다.

persistent session mqtt 이해

지속 세션(persistent session)은 미전달 메시지 큐와 인플라이트 상태의 일부 정보를 유지한다. 이로 인해 재연결 시 다시 전송되는 메시지의 순서와 중복 처리가 발생할 수 있다. 특히 QoS 1과 QoS 2 메시지는 확인 상태에 따라 재전송 로직이 작동하므로, 세션 유지 여부와 인플라이트 관리가 메시지 순서에 직접적인 영향을 준다.

구현 관점에서의 흐름

메시지 전송 시나리오

  • 클라이언트 A가 메시지 M1, M2, M3를 순차로 발행한다.
  • 인플라이트 윈도우가 2이면 M1과 M2가 전송되고 M3는 대기열에 남는다.
  • M1의 ack가 지연되면 M2는 브로커에 먼저 도착하더라도 M1이 처리되기 전까지 순서가 유지되는 것은 보장되지 않는다.

간단한 동작 예시 코드

# PSEUDO MQTT SEQUENCE
client.connect(clean_session=false)
client.inflight_limit = 2
client.publish(topic, payload=M1, qos=1, packet_id=101)
client.publish(topic, payload=M2, qos=1, packet_id=102)
client.publish(topic, payload=M3, qos=1, packet_id=103)
# 브로커 ack 순서에 따라 재전송 또는 중복 발생 가능

설계 팁과 권장 설정

운영 환경별 고려사항

  • 순서가 중요하면: 단일 퍼블리셔에서 작은 인플라이트 윈도우 및 QoS 2 사용 검토.
  • 중복보다 지연을 줄이려면: QoS 1과 적절한 인플라이트 크기 조합 사용.
  • 재연결과 장애 복구: persistent session을 켜고, 재전송 정책과 중복 필터링을 구현.

체크리스트

  • 요구사항에 따른 QoS 수준 결정
  • 인플라이트 윈도우 크기 테스트
  • 세션 지속성 설정과 재연결 시 동작 검증
  • 클라이언트/브로커의 중복 처리 로직 점검

결론

mqtt 메시지 순서 보장은 QoS만으로 완벽히 해결되지 않는다. 인플라이트 크기와 세션 지속성 설정이 함께 작용한다. 설계 시 QoS, inflight 제한, persistent session mqtt 이해를 바탕으로 트레이드오프를 명확히 정의하면 운영 중 예기치 않은 재전송이나 중복을 줄일 수 있다. 마지막으로 테스트를 통해 실제 네트워크 조건에서 동작을 검증하는 절차가 필수적이다.

mqtt 메시지 순서 보장 mqtt inflight 설명 persistent session mqtt 이해 MQTT QoS 인플라이트 윈도우 메시지 중복 제어 MQTT 세션 재연결 전략