MQTT 이해하기: 경량 IoT 메시징 프로토콜의 작동 원리
IoT 세상에서 센서가 원격 기기로 데이터를 전송하는 능력은 주로 MQTT, 즉 가볍고 대역폭 효율이 높은 발행/구독 프로토콜로 구현됩니다. 발행자(publisher), 구독자(subscriber), 브로커(broker) 같은 용어가 생소하다면, 이 가이드가 메시지가 어떻게 전달되는지, 왜 MQTT가 효율적인지, 그리고 실시간으로 어떻게 실험해 볼 수 있는지 명확히 설명해 드립니다.
MQTT란 무엇인가?
MQTT(Message Queuing Telemetry Transport)는 인터넷이나 로컬 네트워크상에서 기기들이 정보를 교환할 수 있게 하는 규칙 집합입니다. 저전력, 제한된 대역폭 환경을 위해 설계되어, 아주 작은 메시지와 이벤트 기반 방식을 사용하며, 기기가 새로운 정보를 공유하거나 수신해야 할 때만 데이터를 전송합니다.
각 기기는 발행자(데이터 전송)와 구독자(데이터 수신) 역할을 동시에 수행할 수 있습니다. 많은 프로토콜과 달리 MQTT는 기기 간에 메시지를 직접 라우팅하지 않고, 모든 통신이 브로커라는 중앙 엔티티를 거쳐 갑니다.
MQTT 브로커와 클라이언트
클라이언트(발행, 구독, 또는 둘 다)는 브로커와만 통신합니다. 브로커를 국경의 세관원이라고 생각하면 됩니다: 들어오는 모든 패키지를 받아 올바른 목적지로 전달합니다. 이 디커플링 덕분에 네트워크가 확장 가능하고 기기 설계가 단순해집니다.
대표적인 브로커로는 다음과 같습니다.
- Mosquitto – 윈도우, 리눅스, macOS에서 로컬로 실행 가능한 무료 오픈소스 브로커.
- EMQX – 고급 클러스터링 기능을 갖춘 오픈소스 브로커.
- HiveMQ Cloud, CloudMQTT 같은 호스팅 옵션은 관리형 클라우드 브로커를 제공합니다.
MQTT 작동 방식
브로커는 모든 MQTT 동작의 중심에 있습니다. 발행자는 특정 토픽(topic)으로 브로커에 메시지를 보냅니다. 토픽은 슬래시(/)로 구분된 계층적 문자열입니다(예: factory/line1/temperature). 해당 토픽을 구독한 클라이언트만 메시지를 받습니다.
이 토픽 기반 라우팅 덕분에:
- 발행자는 하나의 메시지를 여러 구독자에게 중복 없이 보낼 수 있습니다.
- 구독자는 여러 발행자의 여러 토픽을 동시에 구독할 수 있습니다.
- 구독하지 않은 클라이언트는 불필요한 데이터를 받지 않아 대역폭을 절약합니다.
구체적인 예시
온도 센서와 압력 센서가 있는 공장 현장을 상상해 보세요. 두 센서는 각기 다른 토픽으로 발행합니다.
- 온도 토픽:
factory/line1/temperature – 페이로드: 25.3°C
- 압력 토픽:
factory/line1/pressure – 페이로드: 18.7 psi
구독자 1은 온도만 관심 있어 첫 번째 페이로드를 받고, 구독자 2는 압력만 관심 있어 두 번째 페이로드를 받습니다. 브로커가 이 라우팅을 자동으로 처리합니다.


일반적인 발행 명령어
로컬 Mosquitto 브로커에서 명령줄로 메시지를 발행할 수 있습니다:
mosquitto_pub -h localhost -t retain/topic -m "Take a hike"
각 옵션 의미:
-h localhost – 브로커 주소.
-t retain/topic – 토픽 이름.
-m "Take a hike" – 구독 중인 클라이언트가 받을 페이로드.
MQTT Explorer, MQTTX 같은 그래픽 클라이언트를 사용하면 발행/구독을 사용자 친화적인 인터페이스로 실험할 수 있어 초보자도 쉽게 시작할 수 있습니다.
마무리
브로커와 토픽으로 구동되는 MQTT의 발행/구독 모델은 IoT 기기들이 통신할 수 있는 단순하고 효율적이며 확장 가능한 방법을 제공합니다. 이 핵심 개념을 익히면 제조업, 스마트 홈 등 다양한 분야에서 강력한 애플리케이션을 구현할 수 있습니다.