조이 컨트롤
MQTT란 본문
MQTT (Message Queuing Telemetry Transport)란
MQTT는 발행/구독(Publish/Subscribe) 모델을 기반으로 하는 경량(Lightweight) 메시징 프로토콜입니다. 원래 IBM의 앤디 스탠포드-클락(Andy Stanford-Clark)과 알렌 니퍼(Arlen Nipper)가 원격 센서와 제어 장치를 위성 네트워크와 같은 제한된 네트워크 환경에서 연결하기 위해 1999년에 개발했습니다. 현재는 OASIS 국제 표준으로 지정되어 있으며, 특히 사물인터넷(IoT) 및 M2M(Machine-to-Machine) 통신 분야에서 매우 널리 사용되고 있습니다.
핵심 개념: 발행/구독 (Publish/Subscribe) 모델
MQTT는 전통적인 클라이언트/서버 모델과 달리, 메시지를 주고받는 주체들을 분리(Decoupling)하는 발행/구독 모델을 사용합니다. 이 모델에는 세 가지 주요 구성 요소가 있습니다.
- 발행자 (Publisher): 특정 주제(Topic)에 대한 메시지를 생성하여 **브로커(Broker)**에게 전송합니다. 발행자는 누가 자신의 메시지를 수신하는지 알 필요가 없습니다.
- 구독자 (Subscriber): 특정 주제(Topic)에 대한 관심을 **브로커(Broker)**에게 등록(Subscribe)합니다. 브로커는 해당 주제로 메시지가 들어오면 이를 구독자에게 전달합니다. 구독자는 누가 메시지를 발행했는지 알 필요가 없습니다.
- 브로커 (Broker): 발행자와 구독자 사이의 중개자 역할을 하는 서버입니다. 모든 발행자로부터 메시지를 수신하고, 해당 메시지의 주제를 구독하고 있는 모든 구독자에게 메시지를 전달(Filtering & Forwarding)합니다. 발행자와 구독자를 시간적, 공간적으로 분리시켜 줍니다.
주요 특징
- 경량성 (Lightweight): 프로토콜 헤더가 매우 작고(최소 2바이트) 통신 오버헤드가 적도록 설계되었습니다. 이는 CPU 성능, 메모리 용량, 배터리 수명 등이 제한적인 저사양 장치나, 대역폭이 낮고 불안정한 네트워크 환경(예: 이동통신망, 위성 통신망)에 매우 적합합니다.
- 비동기 (Asynchronous): 발행자와 구독자가 메시지를 주고받기 위해 동시에 온라인 상태일 필요가 없습니다. 브로커가 중간에서 메시지를 저장하고 있다가 구독자가 접속하면 전달할 수 있습니다 (QoS 레벨 및 세션 설정에 따라 다름).
- 토픽 기반 필터링 (Topic-based Filtering): 모든 메시지는 특정 '토픽(Topic)'으로 발행됩니다. 토픽은 슬래시(/)로 구분되는 계층적 구조(예: 공장A/설비1/온도, 집/거실/조명/상태)를 가집니다. 구독자는 특정 토픽을 명시하거나 와일드카드(+: 단일 레벨 와일드카드, #: 여러 레벨 와일드카드)를 사용하여 원하는 토픽 패턴의 메시지만 선택적으로 수신할 수 있습니다.
- 서비스 품질 (Quality of Service - QoS) 레벨: 메시지 전달의 신뢰성 수준을 3단계로 정의합니다.
- QoS 0 (At most once): 메시지를 최대 한 번 전송합니다. 전송 확인(Acknowledgement)이 없으므로 메시지가 유실될 수 있습니다. 가장 빠르고 오버헤드가 적지만 신뢰성은 가장 낮습니다. "Fire and forget".
- QoS 1 (At least once): 메시지가 최소 한 번은 반드시 전달되도록 보장합니다. 전송 확인(PUBACK)을 받지 못하면 재전송하므로, 네트워크 문제 등으로 인해 중복된 메시지를 수신할 가능성이 있습니다.
- QoS 2 (Exactly once): 메시지가 정확히 한 번만 전달되도록 보장합니다. 4단계 핸드셰이크(PUBREC, PUBREL, PUBCOMP)를 통해 중복 없이 전달을 보장하지만, 가장 복잡하고 오버헤드가 큽니다.
- 세션 유지 (Persistent Sessions): 클라이언트가 오프라인 상태가 되더라도 브로커가 해당 클라이언트의 구독 정보와 전달되지 못한 메시지(QoS 1 및 2)를 저장해 두었다가, 클라이언트가 다시 연결되면 전달해주는 기능입니다.
- 최후 유언 (Last Will and Testament - LWT): 클라이언트가 브로커에 연결할 때 미리 '유언 메시지'를 설정해 둘 수 있습니다. 만약 해당 클라이언트가 네트워크 장애나 예기치 않은 문제로 비정상적으로 연결이 끊어지면, 브로커가 대신 설정된 유언 메시지(예: 장치/ID/상태 토픽으로 오프라인 메시지)를 발행해 줍니다. 이를 통해 다른 장치들이 해당 클라이언트의 상태를 감지할 수 있습니다.
전송 방식 (Transport)
- 일반적으로 안정적인 TCP/IP 연결 위에서 동작합니다.
- 보안을 위해 TLS/SSL을 사용하여 통신 내용을 암호화하는 것이 일반적입니다.
- 더욱 제한적인 환경(예: 저전력 무선 센서 네트워크)을 위한 **MQTT-SN (MQTT for Sensor Networks)**은 UDP나 다른 비-IP 기반 네트워크 위에서도 동작할 수 있습니다.
- 웹 브라우저와의 통신을 위해 WebSocket을 통한 MQTT 연결도 널리 지원됩니다.
주요 응용 분야
- 사물인터넷 (IoT): 센서 데이터 수집, 원격 장치 모니터링 및 제어, 스마트 홈, 웨어러블 기기, 커넥티드 카 등 광범위하게 사용됩니다.
- 모바일 애플리케이션: 실시간 알림(Push Notification), 채팅 애플리케이션 등에서 효율적인 메시지 전달에 활용됩니다.
- 산업용 사물인터넷 (IIoT): 공장의 센서나 장비 데이터를 상위 시스템(SCADA, Historian)이나 클라우드 플랫폼으로 전송하는 데 사용됩니다. (예: OPC UA의 Pub/Sub 모델 전송 방식으로 MQTT 활용)
- SCADA 시스템: 특정 데이터(예: 알람, 이벤트)의 효율적인 전파에 사용될 수 있습니다.
장점
- 매우 가볍고 효율적이어서 저사양/저전력 장치에 적합합니다.
- 낮은 대역폭 및 불안정한 네트워크 환경에서도 비교적 안정적으로 동작합니다.
- 발행/구독 모델로 송신자와 수신자가 분리되어 시스템 유연성과 확장성이 높습니다.
- 토픽 기반 필터링으로 유연한 데이터 라우팅이 가능합니다.
- QoS 레벨을 통해 애플리케이션 요구사항에 맞는 신뢰성을 선택할 수 있습니다.
단점
- 중앙 브로커에 의존적이므로, 브로커 장애 시 전체 시스템에 영향을 줄 수 있습니다 (고가용성 구성 필요).
- MQTT 자체는 메시지 내용(Payload)의 형식을 정의하지 않으므로, 송수신자 간 별도의 형식 약속(예: JSON, Protobuf, 텍스트)이 필요합니다.
- QoS 2 레벨은 통신 오버헤드가 상당히 큽니다.
- 보안은 주로 전송 계층 보안(TLS/SSL)과 브로커의 인증/인가 설정에 크게 의존합니다.
현재 상태 (2025년 4월 기준)
MQTT는 IoT 및 M2M 통신을 위한 사실상의 표준 프로토콜 중 하나로 확고히 자리 잡았습니다. Amazon Web Services (AWS IoT Core), Microsoft Azure (IoT Hub), Google Cloud Platform (Cloud IoT Core) 등 주요 클라우드 서비스 제공업체들이 MQTT를 공식적으로 지원하고 있으며, 수많은 오픈 소스 및 상용 브로커 구현체와 클라이언트 라이브러리가 존재합니다. 최신 버전인 MQTT v5는 오류 보고 강화, 세션 만료 설정, 토픽 별칭 등 다양한 개선 사항을 포함하며 지속적으로 발전하고 있습니다.
요약하자면, MQTT는 발행/구독 모델을 사용하는 매우 가볍고 효율적인 메시징 프로토콜로, 특히 리소스가 제한적이거나 네트워크 상태가 좋지 않은 환경에서 장치 간의 데이터를 안정적으로 교환하는 데 최적화되어 있으며 IoT 시대의 핵심 통신 기술 중 하나입니다.

'산업용 통신 프로토콜' 카테고리의 다른 글
| 셀룰러란 (0) | 2025.04.15 |
|---|---|
| 산업용 WLAN이란 (0) | 2025.04.15 |
| OPC UA란 (0) | 2025.04.15 |
| WirelessHART란 (0) | 2025.04.15 |
| CC-Link IE란 (0) | 2025.04.15 |