MQTT · 2026-03-08

MQTT QoS별 비용·성능 비교 및 권장 설정

MQTT의 QoS 0·1·2 수준별 전송 비용과 운영 부담을 비교하고 대역폭, 지연, 재전송, 브로커 부하 등 qos 성능 영향 mqtt를 실무 관점에서 분석해 환경별 권장 설정을 제시하는 기술보고서

작성일 : 2026-03-08 ㆍ 작성자 : 관리자
post
목차

개요

MQTT에서 QoS(Quality of Service)는 메시지 전달 신뢰도를 결정한다. 하지만 신뢰도 수준은 비용과 성능에 직접적인 영향을 준다. 이 글에서는 mqtt qos 비용 비교와 qos 성능 영향 mqtt 관점에서 각 수준의 차이점을 설명하고, 실제 환경에 맞는 qos 설정 권장사항을 제시한다.

QoS 개요와 동작 원리

QoS 0 (At most once)

QoS 0은 최대 한 번 전달을 보장한다. 발송 후 재전송을 하지 않으므로 오버헤드가 가장 적다. 지연과 대역폭 부담이 작지만 메시지 손실 위험을 감수한다.

QoS 1 (At least once)

QoS 1은 최소 한 번 전달을 보장한다. 송신자는 PUBACK을 받을 때까지 재전송한다. 중복 수신 가능성이 있어 애플리케이션 수준에서 중복 처리 필요성이 생긴다. 대역폭과 브로커 처리량 부담이 QoS 0보다 크다.

QoS 2 (Exactly once)

QoS 2는 정확히 한 번 전달을 보장한다. PUBREC, PUBREL, PUBCOMP의 4단계 핸드셰이크를 사용해 중복을 제거한다. 신뢰도는 가장 높지만 네트워크 메시지 수와 브로커 상태 관리 비용이 크게 증가한다.

비용 요소별 비교

대역폭 비용

  • QoS 0: 최소 헤더와 페이로드만 전송. 대역폭 효율 높음.
  • QoS 1: 성공 확인을 위한 ACK와 재전송으로 전송량 증가.
  • QoS 2: 다단계 교환으로 트래픽이 가장 많아짐.

브로커 CPU·메모리 부담

QoS 1과 2는 미확인 메시지의 상태를 저장해야 하므로 브로커의 메모리와 디스크 사용이 늘어난다. 특히 QoS 2는 상태 머신을 유지하기 때문에 처리 로직이 복잡해지고 CPU 사용률이 상승한다.

지연(latency)과 처리량

  • QoS 0: 가장 낮은 지연, 높은 처리량.
  • QoS 1: ACK 대기와 재전송 논리로 지연 증가 가능.
  • QoS 2: 핸드셰이크 단계 때문에 지연이 가장 큼. 동시 연결 수가 많은 환경에서는 처리량 저하가 발생할 수 있음.

운영 관점의 비용 산정 방법

실제 비용은 단순 메시지 수뿐 아니라 재전송율, 연결 유지 시간, 브로커 수평 확장 방식 등에 따라 달라진다. 예를 들어 재전송율이 높으면 QoS 1의 대역폭이 예상보다 크게 증가한다. 따라서 mqtt qos 비용 비교는 다음 항목을 고려해야 한다.

  • 평균 메시지 크기와 초당 메시지량
  • 네트워크 신뢰성(패킷 손실률)
  • 브로커의 상태 저장 정책(메모리 vs 디스크)
  • 중복 처리 비용(애플리케이션 레벨)

성능 영향 요약 (qos 성능 영향 mqtt)

간단히 말하면 신뢰도와 비용은 트레이드오프 관계에 있다. qos 성능 영향 mqtt는 다음과 같다.

  • 신뢰도가 높아질수록 네트워크 트래픽과 브로커 부하가 증가한다.
  • 저지연 처리가 중요하면 QoS 0이 유리하다.
  • 중복 허용이 어렵고 정확한 상태 동기화가 필요하면 QoS 2를 고려한다.

환경별 권장 설정 (qos 설정 권장사항)

센서 데이터, 주기적 텔레메트리

주기적이고 빈번한 센서 데이터는 일부 손실을 허용할 수 있다. 대역폭과 비용을 최소화하려면 QoS 0을 권장한다. QoS 1을 사용하면 신뢰도는 올라가지만 브로커와 네트워크 비용이 늘어난다.

중요 이벤트, 경보 메시지

경보나 결제 관련 알림 등 손실을 허용하지 않는 항목은 QoS 1 이상을 권장한다. 애플리케이션에서 중복을 처리하기 어렵다면 QoS 2 고려가 필요하다. 다만 브로커 리소스와 지연을 감수해야 한다.

디바이스 명령, 원격 제어

명령의 정확한 실행이 중요하면 QoS 1이나 2를 사용한다. QoS 1은 재시도 로직으로 높은 성공률을 제공하며, QoS 2는 중복 방지까지 보장한다. 네트워크가 불안정하면 QoS 2의 추가 오버헤드가 비용 상승으로 이어질 수 있다.

실무 적용 체크리스트

  • 메시지 종류별로 QoS 기본값을 지정한다.
  • 중복 허용성, 지연 민감성, 네트워크 신뢰도를 평가한다.
  • 브로커 스펙과 스케일링 비용을 사전 계산한다.
  • 필요 시 애플리케이션 레벨에서 중복 제거 및 재조정 로직을 구현한다.

간단한 구현 예

아래는 Node.js와 Python에서 QoS를 설정하는 예시이다. 각 코드 예제는 기본 연결과 퍼블리시에서 QoS를 지정한다.

// Node.js (mqtt)
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://broker.example.com')
client.on('connect', function () {
  // QoS 0
  client.publish('sensors/temperature', '22.5', { qos: 0 })
  // QoS 1
  client.publish('alerts/critical', 'overheat', { qos: 1 })
})
# Python (paho-mqtt)
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect('broker.example.com', 1883, 60)
# QoS 0
client.publish('sensors/temperature', '22.5', qos=0)
# QoS 1
client.publish('alerts/critical', 'overheat', qos=1)

결론

QoS 선택은 단순한 신뢰도 결정이 아니다. mqtt qos 비용 비교와 qos 성능 영향 mqtt를 함께 고려해 트레이드오프를 판단해야 한다. 높은 신뢰도가 필요하면 비용과 지연을 감수하고 QoS 1·2를 선택한다. 반대로 비용과 처리량 우선이면 QoS 0을 기본으로 하되, 중요한 메시지는 별도 정책을 적용하는 것이 현실적인 접근이다. 마지막으로 운영 중에는 모니터링을 통해 재전송률, 브로커 부하, 지연을 주기적으로 점검해 qos 설정 권장사항을 재검토한다.

mqtt qos 비용 비교 qos 성능 영향 mqtt qos 설정 권장사항 mqtt qos mqtt 성능 메시지 신뢰성 대역폭 최적화 브로커 부하