MQTT · 2026-01-31

MQTT 브로커 무결성과 메시지 영속성 설정

MQTT 브로커에서 메시지 영속성 개념과 구성 요소를 설명하고, Mosquitto와 EMQX 예제 및 운영 관점의 고려사항을 정리한 기술 자료

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

개요: MQTT 영속성이 필요한 이유

IoT 환경에서는 연결이 불안정하거나 클라이언트가 일시적으로 접속을 끊는 일이 잦다. 이때 메시지를 잃지 않으려면 브로커 수준의 영속성(persistence) 설정이 필요하다. 영속성은 구독자의 재접속 시 중요한 메시지를 전달하고, QoS 1·2 메시지의 보장성을 확보하는 핵심 요소다. 이 글에서는 mqtt persistence 설정, 브로커 메시지 영속성 방법, persistent storage mqtt 관점에서 실무에 바로 적용 가능한 설명과 예제를 다룬다.

기본 개념 정리

QoS와 세션 영속성

MQTT의 QoS는 메시지 전달 보장 수준을 나타낸다. QoS 0은 비보장, QoS 1은 최소 한 번, QoS 2는 정확히 한 번 전달을 보장한다. 브로커에서 세션을 영구화하면 재연결 시 구독 정보와 미전달 메시지를 복원할 수 있다. 세션 영속성과 메시지 영속성은 함께 고려할 때 진정한 무결성을 달성한다.

retained 메시지와 영속 스토리지

retained 메시지는 토픽별로 마지막 메시지를 브로커에 보관한다. 구독자가 접속하면 즉시 최신 상태를 전달할 수 있다. 반면, 보장된 전송을 위한 미전달 메시지 저장은 영속 스토리지(persistent storage)에 기록되어야 한다. 파일 시스템, 데이터베이스, RocksDB 같은 임베디드 스토어가 일반적이다.

브로커별 영속성 설정 예시

Mosquitto 설정 예

Mosquitto는 간단한 설정으로 파일 기반 영속성을 지원한다. persistence 옵션과 저장 위치만 지정하면 기본 동작을 활성화할 수 있다.

persistence true
persistence_location /var/lib/mosquitto/
persistence_file mosquitto.db
# 필요 시 로그 수준과 파일 권한 점검
listener 1883
allow_anonymous false

설정 후 브로커 재시작 시 persistence_file에 세션과 미전달 메시지가 저장된다. 운영 환경에서는 데이터 디렉터리에 충분한 용량과 적절한 I/O 성능이 필요하다.

EMQX(예시) 설정

EMQX는 플러그인 형태로 스토리지를 구성할 수 있다. 아래는 개념적 예제이며, 실제 버전별 설정 항목은 공식 문서를 확인한다.

## emqx.conf 예시(개념적)
mnesia.dir = /var/lib/emqx/mnesia
plugin.emqx_retainer = on
message_store.type = rocksdb
message_store.path = /var/lib/emqx/rocksdb

EMQX는 대용량 고성능 환경에서 RocksDB 같은 키값 저장소를 사용해 성능을 확보한다. 장애 복구를 위해 스토리지 백업과 모니터링을 함께 계획해야 한다.

운영 관점의 베스트 프랙티스

  • 스토리지 선택: 지연시간과 쓰기성능을 고려해 SSD나 전용 디스크를 권장.
  • 백업과 복구: 정기 스냅샷과 복구 절차 문서화.
  • 모니터링: 미전달 대기 큐 길이, 디스크 사용률, I/O 지연을 대시보드로 관찰.
  • 리텐션 정책: 오래된 메시지를 자동 삭제하는 정책으로 디스크 과다 사용 방지.
  • 보안: 권한 설정과 접근 제어로 무단 접근 방지.

구체적인 설정 절차(단계별)

  • 요구사항 분석: 보장 수준(QoS), 예상 메시지량, 보관 기간 결정.
  • 스토리지 설계: 용량, IOPS, 내구성 기준으로 스토리지 타입 선택.
  • 브로커 구성: persistence 활성화 및 경로 지정, 필요한 플러그인 적용.
  • 테스트: 연결 끊김, 재접속 시 메시지 복원 동작 검증.
  • 운영: 모니터링·알림 설정과 백업 주기 운영.

문제 발생 시 점검 포인트

메시지 손실이 발생할 때

  • 브로커 로그에서 persistence 관련 오류 확인.
  • 디스크 용량 부족 여부 점검.
  • 세션 만료 정책과 클라이언트의 clean session 플래그 확인.

성능 저하가 발생할 때

  • 디스크 I/O 대기 시간과 큐 길이 확인.
  • 영속성 설정이 동기식으로 되어 있는지 비동기식으로 변경 가능 여부 검토.
  • 필요 시 메시지 리텐션을 줄여 저장량을 조절.

요약

MQTT 브로커의 무결성 확보는 단순히 옵션 하나를 켜는 작업이 아니다. mqtt persistence 설정은 스토리지 선택, 세션 정책, 백업과 모니터링을 함께 고려해야 효과를 발휘한다. Mosquitto와 EMQX 같은 대표 브로커는 각기 다른 구현을 제공하므로 운영 환경과 요구사항에 맞춰 브로커 메시지 영속성 방법을 설계하고, persistent storage mqtt 관점에서 성능과 가용성을 균형 있게 맞추는 것이 핵심이다.

mqtt persistence 설정 브로커 메시지 영속성 방법 persistent storage mqtt mosquitto persistence emqx 영속성 MQTT QoS retained 메시지 세션 영속성