IoT 메시징 기술 중 MQTT(Message Queuing Telemetry Transport) 는 가장 널리 쓰이는 IoT 표준 프로토콜입니다.
🧩 1. MQTT 개요
항목설명
| 정식 명칭 | Message Queuing Telemetry Transport |
| 개발 배경 | IBM과 Eurotech가 1999년에 원격 석유 파이프라인 모니터링용으로 개발 |
| 표준화 | OASIS 표준 (v3.1.1, v5.0) |
| 통신 모델 | Publish / Subscribe 기반 (브로커 중심 구조) |
| 전송 계층 | TCP/IP (기본 포트 1883, TLS는 8883) |
| 목적 | 저전력, 저대역폭 환경에서 효율적 메시지 교환 |
⚙️ 2. 동작 구조 (Publish / Subscribe)
MQTT는 중앙 브로커(Broker) 를 통해 클라이언트 간 메시지를 중계합니다.
[Device A] ---Publish---> [Broker] ---Distribute---> [Device B, C] (topic: /sensor/temp)
주요 구성요소
| 구성 요소 | 역할 |
| Publisher | 데이터를 보내는 장치 (예: 센서) |
| Subscriber | 특정 토픽을 구독하는 장치 (예: 서버, 대시보드) |
| Broker | 메시지를 중계하는 서버 (예: Mosquitto, EMQX, HiveMQ) |
🧵 3. 핵심 개념
| 개념 | 설명 |
| Topic | 메시지 채널 이름 (home/livingroom/temp 등) |
| Message | 송신되는 실제 데이터 (JSON, 문자열, 바이너리 가능) |
| QoS (Quality of Service) | 메시지 전달 보장 수준 (0, 1, 2 단계) |
| Retain Message | 마지막 메시지를 브로커가 저장해 신규 구독자에게 즉시 전송 |
| Last Will Message | 클라이언트 비정상 종료 시 브로커가 대신 발송하는 메시지 |
📶 4. QoS (전송 보장 수준)
| QoS | 의미 | 보장 수준 | 네트워크 부하 |
| 0 | At most once | 한 번만 보냄 (손실 가능) | 최소 |
| 1 | At least once | 수신 보장 (중복 가능) | 중간 |
| 2 | Exactly once | 중복 없이 한 번만 | 최대 |
예:
센서 데이터는 QoS 0~1, 금융/제어 명령은 QoS 2 사용.
🔐 5. 보안 구조
| 계층 | 기술 | 설명 |
| 전송 계층 | TLS/SSL | 포트 8883 사용, 인증서 기반 암호화 |
| 인증 방식 | ID/Password, JWT, X.509 인증서 | MQTT CONNECT 패킷 내 인증정보 포함 |
| ACL (Access Control List) | 토픽별 Publish/Subscribe 권한 관리 | 브로커에서 정의 |
💡 6. MQTT 패킷 구조 (간략)

총 14개 패킷 타입이 존재 (CONNECT, PUBLISH, SUBSCRIBE, PINGREQ 등)
🧰 7. MQTT 예제
🖥️ 서버 (브로커)
- 오픈소스 예: Mosquitto
-
sudo apt install mosquitto mosquitto-clients sudo systemctl enable mosquitto
💬 발행 (Publish)
mosquitto_pub -h localhost -t "home/temp" -m '{"value":24.3}'
📥 구독 (Subscribe)
mosquitto_sub -h localhost -t "home/temp"
출력:
{"value":24.3}
🧠 8. MQTT 클라이언트 코드 예시
ESP32 (Arduino)
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
WiFi.begin("SSID", "PASS");
client.setServer("192.168.0.10", 1883);
}
void loop() {
if (!client.connected()) client.connect("ESP32Client");
client.publish("sensor/temp", "23.4");
delay(2000);
}
Python (Paho MQTT)
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("localhost", 1883, 60)
client.publish("home/temp", '{"value":25.1}')
🏗️ 9. MQTT 기반 IoT 아키텍처 예시

- 데이터 전송: MQTT
- 실시간 처리: Kafka / Redis Stream
- 시각화: Grafana / Node-RED
⚖️ 10. 장단점 요약
| 장점 | 단점 |
| 경량, 저전력 통신에 최적화 | TCP 기반 → 초저전력(배터리)엔 다소 부담 |
| QoS로 메시지 신뢰성 제어 가능 | 메시지 순서 보장은 별도 처리 필요 |
| 브로커 기반으로 네트워크 확장 용이 | 브로커 장애 시 전체 영향 |
| 다양한 언어 라이브러리 존재 | 브로커 운영/보안 설정 필요 |
'하드웨어 > 상식' 카테고리의 다른 글
| I²S : Inter-IC Sound (0) | 2025.10.22 |
|---|---|
| RabbitMQ (0) | 2025.10.15 |
| UF2 : USB Flashing Format (0) | 2025.10.13 |
| Oscillator(발진기) 설명 및 신호 측정 (0) | 2025.10.04 |
| LoRa(Long Range) : 저전력 광역 통신망(LPWAN) (0) | 2025.09.30 |