현재 재직 중인 회사에서는 PNS(Push Notification Server, Push Server)라는 서버가 있습니다. 이 PNS 서버는 사내 주요 서비스의 메시징 기능을 담당하고 있으며, 실시간 메시지 전송과 알림을 처리하는 중요한 역할을 하고 있습니다.
이렇게 핵심 기능인 PNS는 사실 MQTT 브로커의 구현체이며, MQTT 프로토콜을 사용하여 메시지를 주고받는 구조로 이루어져 있습니다.
이번 글에서는 실시간 메세지 전송의 기반이 되는 MQTT에 대해 정리해보고자 합니다.

MQTT는 Message Queuing Telemetry Transport의 약자로, 원격 장치들 간의 데이터 전송을 위한 경량 메시징 프로토콜입니다.
1990년대 IBM과 Eurotech에 의해 개발되어, 원격 감시 시스템(telemetry) 및 산업용 장치의 데이터 수집을 효율적으로 처리하기 위해 만들어졌습니다.
석유, 가스 등의 대형 산업에서는 수많은 센서들이 다양한 데이터를 보내오는데, 중앙 시스템에서 이러한 데이터를 수집하고 관리하는 것은 매우 중요합니다. 이러한 통신 환경을 간소화하기 위해 MQTT가 설계되었습니다.
그렇다면 왜 MQTT는 다양한 곳에서 사용되고 있을까요? 그 이유는 다음과 같은 주요 특징과 장점에 있습니다
MQTT에서 클라이언트는 특정 Topic에 메시지를 Publish하거나 Subscribe하며, Broker는 이러한 메시지를 받아 구독한 다른 클라이언트에게 전달하는 중개 역할을 합니다.
MQTT는 Publish/Subscribe(발행/구독) 모델을 기반으로 동작합니다.
이 구조는 다음과 같이 요약할 수 있습니다
Topic에 메시지를 발행하는 역할Publisher가 보낸 메시지를 받아 적절한 Subscriber에게 전달하는 중개자 역할Topic를 브로커에 등록해 두고, 해당 Topic에 대한 메시지를 수신
💡 클라이언트와 브로커
- MQTT의 클라이언트는
Publisher와Subscriber역할을 동시에 수행할 수 있습니다.- 클라이언트는 메시지를 발행하거나 구독하거나, 두 가지를 모두 할 수 있습니다.
- 브로커(Broker)는 클라이언트 간 메시지를 라우팅하고, 메시지 큐잉과 QoS 관리 등 MQTT 시스템에서 중추적인 역할을 담당합니다
MQTT에서 토픽(Topic)은 Publisher와 Subscriber 간 메시지 교환의 기준입니다. 클라이언트는 자신이 구독할 토픽을 지정하고, 해당 토픽의 메시지를 수신합니다.
토픽은 대소문자를 구분하는 UTF-8 문자열이며, /로 구분된 계층적 구조를 가집니다.
예시: home/kitchen/fridge, vehicles/car/status
MQTT는 와일드카드 기능을 통해 특정 주제 범위에 걸쳐 메시지를 받을 수 있습니다.
foo/+/bar)foo/#)$로 시작하는 토픽은 예약된 토픽으로, 애플리케이션에서는 사용하지 못함토픽 필터는 특정 패턴에 맞는 토픽을 구독하는 기능입니다.
| 필터 | 수신 가능 | 수신 불가능 |
|---|---|---|
| home/kitchen/+ | home/kitchen/fridge home/kitchen/oven | home/kitchen/fridge/temperature (추가 레벨이 있기 때문에 불가능) |
| home/# | home/kitchen/fridge home/kitchen/oven home/livingroom/sofa home/kitchen/fridge/temperature | - |
| vehicles/+/status | vehicles/car/status vehicles/bike/status | vehicles/car/status/battery |
MQTT는 메시지 전송의 신뢰성을 보장하기 위해 세 가지 QoS 레벨을 제공합니다




QoS Downgrade는 MQTT 프로토콜에서 발생하는 현상으로, Publisher가 메시지를 높은 QoS로 전송하더라도, Subscriber가 낮은 QoS로 구독하면 메시지가 더 낮은 QoS로 전송되는 것을 말합니다.
즉, Publisher와 Subscriber가 서로 다른 QoS를 설정할 경우, 항상 더 낮은 QoS가 적용됩니다.
예를들면?💡 QoS Downgrade 현상은 메시지 신뢰성과 네트워크 부하 간의 균형을 맞추기 위한 설계입니다.
클라이언트가 비정상적으로 연결이 끊어졌을 때, 미리 설정된 "유언 메시지"가 브로커를 통해 다른 구독자에게 발송됩니다.
이를 통해 클라이언트의 상태를 추적하거나 긴급 상황을 알릴 수 있습니다. 장치 상태 모니터링이나 장애 알림에 매우 유용한 기능입니다.
MQTT는 다양한 산업 분야에서 널리 사용되고 있습니다.
대표적인 사례MQTT는 경량 메시징 프로토콜로, 저전력 및 제한된 네트워크 환경에서 효율적으로 작동하며, 주로 IoT 장치 간 실시간 데이터 전송에 사용됩니다.
핵심 특징
한계점과 보완
정리하자면 MQTT는 IoT와 실시간 메시징에서 정말 유용한 프로토콜입니다.