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

+ Recent posts