
MQTT 개요
MQTT(Message Queuing Telemetry Transport)는 발행-구독(Publish-Subscribe) 모델을 기반으로 하는 경량 메시지 전송 프로토콜입니다. IoT(사물인터넷) 및 제한된 네트워크 환경에서 저전력으로 안정적인 데이터 통신이 가능하도록 설계되었습니다. 특히, 네트워크 지연이 발생하거나 불안정한 환경에서도 효율적으로 작동하며, 최소한의 대역폭을 사용하여 메시지를 송수신할 수 있습니다.
MQTT의 개발 배경
MQTT는 1999년 IBM과 Eurotech(이전의 Arcom)에 의해 개발되었습니다. 초기에는 원격으로 산업 장비의 상태를 모니터링하는 용도로 사용되었지만, 이후 IoT의 발전과 함께 스마트 홈, 헬스케어, 산업 자동화 등 다양한 분야에서 활용되고 있습니다. 현재는 OASIS(Open Application Group)에서 표준화하여 유지보수하고 있습니다.
MQTT의 핵심 개념
발행-구독(Publish-Subscribe) 모델
MQTT는 클라이언트 간 직접 데이터를 주고받는 방식이 아닌, 브로커(Broker)를 중개자로 두고 메시지를 전달하는 발행-구독(Publish-Subscribe) 모델을 채택하고 있습니다. 이를 통해 효율적인 데이터 송수신이 가능하며, 다수의 클라이언트가 동일한 데이터를 구독할 수 있습니다.
-
발행자(Publisher): 특정 토픽(Topic)에 메시지를 게시하는 역할을 합니다.
-
구독자(Subscriber): 특정 토픽을 구독하여 해당 메시지를 수신하는 역할을 합니다.
-
브로커(Broker): 발행자와 구독자 간의 메시지를 중개하며, 메시지를 필터링하고 적절한 구독자에게 전달합니다.
MQTT는 HTTP 기반의 통신과 달리, 다수의 클라이언트가 동시에 특정 토픽을 구독하여 메시지를 받을 수 있기 때문에 멀티캐스트(Multicast) 방식에 적합합니다.
토픽(Topic) 기반 메시지 라우팅
MQTT에서는 메시지를 특정 **토픽(Topic)**을 통해 분류하여 전달합니다. 토픽은 계층 구조를 가지며, /
를 사용하여 하위 토픽을 구분합니다.
예를 들어, 스마트 홈 시스템에서 다음과 같은 토픽 구조를 사용할 수 있습니다.
home/livingroom/temperature → 거실 온도 센서 데이터
home/kitchen/temperature → 주방 온도 센서 데이터
home/livingroom/light → 거실 조명 상태
이러한 계층적 구조 덕분에 구독자는 home/livingroom/#
처럼 특정 그룹의 데이터를 한 번에 구독할 수도 있습니다.
QoS(Quality of Service, 서비스 품질) 지원
MQTT는 메시지 전송의 신뢰성을 보장하기 위해 **3가지 수준의 QoS(Quality of Service)**를 제공합니다.
-
QoS 0 (At most once, 최대 1회 전송)
-
메시지를 한 번만 전송하며, 수신 확인(Ack)을 받지 않습니다.
-
네트워크가 불안정한 경우 메시지가 손실될 수 있습니다.
-
주로 비필수적인 데이터(센서 데이터, 로그 등)에 사용됩니다.
-
-
QoS 1 (At least once, 최소 1회 보장)
-
메시지를 적어도 한 번 이상 수신하도록 보장합니다.
-
발행자는 메시지를 보낸 후 PUBACK 응답을 받을 때까지 재전송합니다.
-
메시지가 중복 수신될 가능성이 있습니다.
-
-
QoS 2 (Exactly once, 정확히 1회 전달)
-
메시지를 정확히 한 번만 전달하도록 보장합니다.
-
PUBREC, PUBREL, PUBCOMP와 같은 여러 단계의 확인 절차를 거칩니다.
-
높은 신뢰성이 요구되는 금융 거래, 원격 제어 시스템 등에 사용됩니다.
-
지속적 연결 유지(Keep Alive)
MQTT는 Keep Alive 기능을 통해 클라이언트와 브로커 간 연결을 주기적으로 유지할 수 있습니다. 일정 시간이 지나도 클라이언트가 메시지를 보내지 않으면 브로커가 연결을 종료할 수 있습니다. 이 기능 덕분에 네트워크가 일시적으로 끊어졌다가 재연결되더라도 메시지 전달이 가능합니다.
유지 메시지(Retained Messages) & 지속 세션
MQTT는 네트워크 연결이 끊어져도 메시지를 유지하고, 클라이언트가 재연결 시 필요한 데이터를 받을 수 있도록 **Retained Messages(유지 메시지)**와 Persistent Session(지속 세션) 기능을 제공합니다.
-
Retained Message: 마지막으로 전송된 메시지를 보존하여, 새롭게 구독한 클라이언트도 최신 데이터를 즉시 받을 수 있도록 합니다.
-
Persistent Session: 클라이언트가 연결을 해제했다가 다시 연결하면 이전 상태(QoS 1, 2의 미전송 메시지, 구독 정보 등)를 유지합니다.
MQTT의 장점
-
낮은 대역폭 사용: 최소한의 데이터 패킷으로 메시지를 전송하여 네트워크 비용을 절감할 수 있습니다.
-
경량성: 저전력 IoT 기기에서도 효율적으로 동작합니다.
-
확장성: 발행-구독 모델을 통해 여러 클라이언트가 동시에 데이터를 주고받을 수 있습니다.
-
높은 신뢰성: QoS 설정을 통해 신뢰성 있는 메시지 전송이 가능합니다.
-
보안 기능: TLS/SSL 암호화를 지원하며, ID/비밀번호 기반 인증 및 ACL(Access Control List)으로 접근 제어가 가능합니다.
MQTT 사용 사례
MQTT는 다양한 IoT 및 실시간 데이터 전송 환경에서 활용됩니다.
-
스마트 홈: 스마트 전구, 온도 조절기, 보안 시스템 등에서 센서 데이터를 송수신하는 데 사용됩니다.
-
산업 자동화: 공장에서 기계 장비의 데이터를 모니터링하고 제어하는 데 활용됩니다.
-
의료 기기: 환자의 건강 데이터를 실시간으로 의료진에게 전송하는 데 사용됩니다.
-
자동차 및 교통: 차량 간 통신(V2V), 원격 차량 모니터링 등에 적용됩니다.
결론
MQTT는 제한된 네트워크 환경에서도 안정적인 메시지 전송이 가능한 경량 프로토콜로, IoT 및 실시간 데이터 전송이 필요한 다양한 분야에서 필수적으로 사용되고 있습니다. MQTT를 활용하면 효율적인 데이터 통신을 구현할 수 있으며, IoT 시스템의 성능을 극대화할 수 있습니다. 특히, MQTT의 QoS, 보안, 연결 유지 기능 등을 적절히 활용하면 신뢰성 있는 IoT 네트워크를 구축할 수 있습니다.
1 thought on “MQTT란? IoT 환경에서 최적화된 경량 메시지 프로토콜”