MQTT 5 핵심 기능: 메시지 만료와 사용자 속성
MQTT 5의 주요 기능을 입문자 관점에서 쉽게 설명한 글. 메시지 만료, 사용자 속성, 이유 코드, 세션 관리와 실무 적용 사례 중심의 요약
목차
들어가며
MQTT 5는 이전 버전보다 프로토콜 수준에서 더 많은 메타데이터와 제어를 제공한다. 이 글은 mqtt5 기능 설명을 목표로, 특히 메시지 만료와 사용자 속성(user properties)을 중심으로 핵심 개념과 실무 활용을 쉽게 풀어쓴다. 처음 접하는 사람도 이해할 수 있도록 예제와 패턴을 함께 제시한다.
MQTT 5에서 달라진 점 개괄
MQTT 5는 연결과 메시지 전송에 다양한 프로퍼티(properties)를 추가해 세밀한 제어가 가능하다. 주요 변경점은 다음과 같다.
- 메시지 만료(Message Expiry Interval)
- 사용자 속성(User Properties)
- 이유 코드(Reason Codes)와 상세한 응답
- 세션 만료(Session Expiry Interval)
- 응답 주제(Response Topic)와 상관 데이터(Correlation Data)
메시지 만료 (Message Expiry Interval)
개념
메시지 만료는 퍼블리시된 메시지가 브로커 또는 구독자에서 더 이상 유효하지 않은 시간을 초 단위로 지정한다. 지정 시간이 지나면 브로커는 그 메시지를 전달하지 않거나 저장소에서 삭제한다. 이 기능은 실시간성 요구가 높은 데이터(센서 값, 실시간 알림)에 유용하다.
특징과 동작
- 퍼블리셔가 PUBLISH 패킷에 Message Expiry Interval를 설정한다.
- 브로커는 메시지를 큐잉하거나 즉시 전달하며, 만료 시간이 지나면 해당 메시지를 폐기한다.
- 보유 메시지(retained)에도 만료 시간을 적용할 수 있다.
예시: mqtt v5 메시지 만료 사용법
간단한 MQTT 클라이언트 예를 통해 메시지 만료를 설정하는 방식을 보여준다. 아래 예제는 pseudo-config 형태로 개념 설명에 초점을 둔다.
{
"topic": "sensors/temperature",
"payload": "22.5",
"properties": {
"messageExpiryInterval": 30 // 초 단위
}
}
위와 같이 설정하면, 해당 메시지는 퍼블리시 후 30초가 지나면 더 이상 전달되지 않는다. 실무에서는 유효 기간을 서비스 요구에 맞춰 설정하고, 장기간 저장이 필요한 메시지는 만료를 생략한다.
사용자 속성 (User Properties)
개념
사용자 속성은 키-값 쌍으로 메시지에 메타데이터를 붙이는 기능이다. 이는 프로토콜 레벨에서 애플리케이션 데이터를 분리하고, 브로커나 중간 시스템이 메시지를 라우팅하거나 필터링할 때 활용할 수 있다.
활용 사례
- 메시지 우선순위 표시 (priority=high)
- 데이터 버전 정보 포함 (version=1.2)
- 지역 기반 라우팅 (region=seoul)
예시: mqtt5 user properties 예제
아래 예제는 PUBLISH 시 사용자 속성을 포함하는 형식이다. 실제 라이브러리에서는 프로퍼티 필드를 제공한다.
{
"topic": "devices/abc/events",
"payload": "{ \"status\": \"on\" }",
"properties": {
"userProperties": [
{ "key": "deviceType", "value": "thermostat" },
{ "key": "firmware", "value": "v2.0" }
]
}
}
사용자 속성은 브로커가 라우팅 규칙을 적용하거나, 수신 애플리케이션이 별도 처리 로직을 적용할 때 유용하다. 예를 들어 deviceType으로 구독 필터를 구성할 수 있다.
이유 코드와 응답 처리
MQTT 5는 이전보다 상세한 이유 코드(reason codes)를 제공해 실패 원인을 명확히 전달한다. CONNECT, SUBSCRIBE, PUBLISH 등에 대해 긍정·부정 응답을 구체적으로 받을 수 있다. 이로 인해 예외 처리와 재시도 로직을 더 정교하게 설계할 수 있다.
세션 만료와 상태 관리
Session Expiry Interval은 세션 지속 시간을 제어한다. 클라이언트가 연결을 끊은 뒤 브로커가 세션 상태(구독 정보, 큐에 있는 메시지 등)를 얼마나 오래 보관할지 설정한다. 이 값으로 연결 재수립 시의 동작을 결정한다.
응답 주제과 상관 데이터
Response Topic과 Correlation Data는 request-reply 패턴 구현을 단순화한다. 퍼블리셔는 수신자가 응답을 보낼 주제와 상관 데이터를 함께 보내 응답을 매칭할 수 있다. 이는 RPC 스타일 통신을 구성할 때 유용하다.
실무 적용 패턴
다음은 MQTT 5 기능을 활용한 실무 패턴 정리이다.
- 실시간 데이터: 메시지 만료를 짧게 설정해 오래된 데이터 전달을 방지
- 메타데이터 기반 라우팅: user properties로 라우팅 키를 추가
- 상태 지속성: 세션 만료를 서비스 요구에 맞춰 설정해 재연결 시 상태 보존
- RPC 스타일: response topic과 correlation data로 요청-응답 매칭
간단한 체크리스트
- 메시지 만료 필요 여부 판단
- 사용자 속성으로 전달할 메타데이터 목록 정의
- 세션 만료 정책과 보안 고려
- 이유 코드 기반 예외 처리 설계
맺음말
MQTT 5는 프로토콜 차원에서 메시지의 생명주기와 메타데이터 관리를 강화했다. mqtt5 기능 설명이 처음인 독자라도, 메시지 만료와 사용자 속성의 개념을 이해하면 실무에서 훨씬 유연한 설계가 가능하다. 마지막으로 작은 예제부터 적용해 요구사항에 맞는 프로퍼티 조합을 찾아가는 접근을 권한다.