MQTT 브로커 성능: max inflight와 세션 설정
MQTT 브로커에서 max inflight와 세션 설정이 성능에 미치는 영향과 측정·조정 방법을 초보자도 이해하기 쉽게 정리한 성능 최적화 전략
목차
개요
작은 센서 네트워크부터 대규모 IoT 플랫폼까지 MQTT 브로커 성능은 안정성에 직결된다. 특히 메시지 전송 중 동시 처리를 제한하는 max inflight와 연결 상태 및 재접속 시 동작을 결정하는 세션(session) 설정은 트래픽 패턴에 따라 성능 병목과 데이터 손실의 원인이 된다. 이 글은 개념, 영향, 측정 방법, 튜닝 절차와 예시 설정을 단계적으로 설명한다.
핵심 개념 이해
max inflight란
max inflight은 한 클라이언트(또는 브로커가 관리하는 클라이언트)에 대해 동시에 전송 중(ack를 기다리는 상태)인 QoS 1·2 메시지 수의 상한이다. 이 값이 낮으면 네트워크 대기 시 전송률이 제한되고, 너무 높으면 메모리와 CPU 사용량이 급증할 수 있다.
세션 설정의 의미
세션 설정은 클라이언트 연결 상태를 브로커가 어떻게 유지할지 결정한다. 주요 항목은 세션 만료 시간(session expiry interval), 클린 세션(clean start/clean session) 플래그, 오프라인 메시지 큐 길이 등이다. 세션 보존 정책에 따라 재연결 시 메시지 전달 보장과 저장 공간 요구량이 달라진다.
성능에 미치는 영향
- 메모리 사용: inflight 한도와 큐 크기 증가 시 브로커 메모리 소비가 늘어난다.
- 지연(latency): inflight가 너무 낮으면 전송 대기 시간 증가로 지연이 발생한다.
- 스루풋: 적절한 inflight 수치는 네트워크 대역폭을 효율적으로 사용해 처리량을 높인다.
- 복구와 신뢰성: 세션 보존을 길게 하면 재접속 시 미처리 메시지 전달이 보장되지만, 저장소 및 관리 부담 증가.
측정 지표와 도구
튜닝 전후 비교를 위해 다음 지표를 수집한다.
- 초당 메시지 처리량(Pub/Sub TPS)
- 평균 응답 지연(ms)
- 브로커 메모리·CPU 사용률
- 네트워크 재전송 비율 및 클라이언트 재접속 횟수
테스트 도구로는 가벼운 부하 생성기(예: MQTT 탐침 스크립트, JMeter MQTT 플러그인, mosquitto_pub 반복 스크립트)를 추천한다. 생산 환경에서는 APM이나 브로커 자체 모니터링 지표를 활용한다.
튜닝 절차
- 현재 환경에서 기준 성능 측정: 정상 트래픽과 피크 트래픽에서 지표 수집.
- 문제 원인 분류: 지연, 메모리 초과, 메시지 손실 등 우선순위 결정.
- max inflight 조정: 단계적으로 증가시키며 TPS와 지연 변화를 관찰.
- 세션 정책 검토: 클린 세션 사용 여부, 세션 만료 시간, 오프라인 큐 크기 설정.
- 반복 테스트 및 안정화: 변경 후 장애 여부와 리소스 사용량을 모니터링하며 최적값 도출.
실무 예시
아래는 일반적인 브로커 설정 예시다. 실제 제품마다 설정 이름과 위치가 다르니 문서 확인이 필요하다.
## 브로커 예시 설정 (YAML 스타일)
max_inflight_messages: 200
max_offline_queue_size: 10000
session_expiry_interval: 86400 # 초 단위, 1일
clean_start_default: false
클라이언트 라이브러리 쪽 예시(의사 코드):
client = MQTTClient('id')
client.max_inflight = 50
client.clean_start = False
client.session_expiry = 3600 # 1시간
실전에서 자주 만나는 상황과 대응
- 메모리 급증: inflight와 오프라인 큐 크기를 줄이고 메시지 만료 정책 설정.
- 높은 지연: inflight 수를 늘려 네트워크 왕복 시간에 의한 대기 해소.
- 재접속 시 메시지 누락: 세션 만료 시간을 늘리거나 QoS를 적절히 설정.
권장값과 보수적 접근
초기 배포는 보수적으로 시작해 점진적 확장을 권장한다. 작은 값으로 시작해 모니터링 기반으로 늘리면 급격한 리소스 소모를 피할 수 있다. 또한 브로커와 클라이언트 양쪽에서 inflight 정책을 일치시키면 예측 가능한 동작을 얻는다.
마무리
MQTT 브로커의 max inflight와 세션 설정은 트래픽 특성, 네트워크 품질, 하드웨어 자원에 따라 최적값이 달라진다. 측정과 반복적인 조정으로 가능한 성능 개선을 확보하고, 모니터링을 통해 변화에 유연하게 대응하는 것이 핵심이다.