MQTT란 무엇인가요?
메시지 큐잉 텔레메트리 전송(MQTT)은 사물 인터넷(IoT) 또는 기기 간 통신(M2M) 장치와 애플리케이션을 인터넷으로 연결하는 데 적합한, 널리 사용되는 경량 발행-구독 메시징 프로토콜입니다. MQTT는 대역폭이 낮거나 전력이 제한된 환경에서도 효율적으로 작동하도록 설계되어 다수의 원격 클라이언트를 사용하는 애플리케이션에 이상적입니다. 소비자 가전, 자동차, 운송, 제조, 의료 등 다양한 산업에서 사용됩니다.
MQTT는 어떻게 작동하나요?
MQTT를 통해 연결된 디바이스 또는 애플리케이션을 클라이언트라고 합니다. 이러한 클라이언트는 특정 토픽이나 여러 토픽에 메시지를 게시하거나 구독합니다. 구독한 클라이언트는 해당 토픽에 게시된 모든 메시지를 수신하므로, 여러 디바이스와 서비스 간에 효율적이고 내결함성 있는 데이터 교환이 가능합니다.
MQTT 아키텍처의 핵심에는 브로커가 있습니다. 브로커는 클라이언트와 클라이언트가 구독하는 토픽을 추적하고, 메시지를 처리하며, 해당 메시지를 적절한 시스템으로 전달하는 서버입니다.
MQTT 프로토콜 버전
MQTT 프로토콜의 주요 버전 몇 가지가 표준으로 채택되었습니다. OASIS는 프로토콜 개정 작업을 관리하고 각 버전에 대한 전체 사양을 유지합니다. MQTT는 개정될 때마다 프로토콜의 기능이 확장되었으므로, 사용 중인 디바이스와 브로커가 어떤 MQTT 버전을 준수하는지 파악하는 것이 중요합니다.
MQTT 메시지 유형 및 형식
MQTT 메시지에는 여러 유형이 있으며, 각 메시지 유형에는 호환 장치와 애플리케이션이 따라야 하는 특정 형식이 있습니다. MQTT 프로토콜은 개정판마다 형식과 메시지 유형이 다릅니다. MQTT 프로토콜의 각 사양에서 전체 메시지 유형 목록을 확인할 수 있습니다.
가장 일반적인 세 가지 메시지 유형은 CONNECT, PUBLISH, SUBSCRIBE입니다. 각 MQTT 메시지에는 헤더, 페이로드 및 선택적 플래그가 포함됩니다. 메시지 유형에 따라 페이로드의 길이는 달라질 수 있습니다. 예를 들어 PUBLISH 메시지의 페이로드에는 구독 중인 모든 장치로 전송할 데이터가 포함되며, 데이터 필드의 길이는 메시지 크기에 직접적인 영향을 줍니다. 기본적으로 MQTT 장치는 보안이 적용되지 않은 경우 포트 1883을 사용하고, SSL/TLS 암호화가 활성화된 경우 포트 8883을 사용하여 연결합니다.
MQTT가 실제로 활용되는 사례에는 어떤 것이 있나요?
스마트 자동차는 MQTT가 실제로 활용되는 대표적인 사례입니다. 자동차 제조업체들이 원격 진단과 차량 관리부터 연료비 결제와 엔터테인먼트에 이르기까지 다양한 기능을 지원하는 새로운 기능을 추가하면서, MQTT는 커넥티드 카의 보편적인 표준으로 자리 잡았습니다. MQTT는 하이퍼텍스트 전송 프로토콜(HTTP)과 달리 자동차가 통신 음영 지역을 드나들거나 연결되는 기지국이 바뀌더라도 지속적인 세션을 유지할 수 있습니다. 또한 MQTT는 양방향 통신을 지원하므로 자동차와 클라우드 애플리케이션이 상대방의 응답을 기다리지 않고도 데이터를 더욱 쉽게 주고받을 수 있습니다.
HTTP와 MQTT의 차이점은 무엇인가요?
HTTP와 MQTT는 모두 인터넷을 통해 데이터를 전송하는 데 사용되는 네트워크 프로토콜입니다. 두 프로토콜의 차이점을 살펴보겠습니다.
HTTP
- 클라이언트가 서버에 요청을 보내면 서버가 요청된 데이터로 응답하는 요청-응답 프로토콜입니다.
- 주로 웹 서버와 브라우저 간에 웹 콘텐츠(예: HTML 문서, 이미지, 양식 데이터)를 전송하도록 설계되었습니다.
- 예: 웹 브라우저(클라이언트)가 웹 서버에 요청을 보내면, 서버는 웹페이지 형태의 데이터로 응답합니다.
MQTT
- 클라이언트가 토픽을 구독하고 다른 클라이언트가 해당 토픽에 게시한 메시지를 수신하는 경량 발행-구독 메시징 프로토콜입니다.
- 낮은 대역폭, 연결 안정성 및 전력 소비가 중요한 고려 사항인 네트워크 토폴로지와 장치를 위해 설계되었습니다.
- 예: 위의 스마트 자동차 시나리오.
사물 인터넷(IoT)에서 MQTT를 사용하는 이유는 무엇인가요?
MQTT는 여러 특성 덕분에 IoT 디바이스(IoT의 ‘사물’)와 백엔드 시스템 간 메시징에 이상적인 프로토콜입니다. 여기서는 네 가지 특성에 중점을 둡니다:
- 경량성 – MQTT는 코드 크기가 작아 센서처럼 처리 능력과 메모리가 제한된 장치에서도 원활하게 작동합니다.
- 안정성 – 많은 IoT 디바이스가 셀룰러 네트워크를 통해 연결됩니다. MQTT는 더 적은 데이터를 사용하는 간결한 메시지가 필요한 저대역폭 네트워크에 적합한 프로토콜입니다. 따라서 네트워크 대역폭이 제한적이거나 불안정한 경우에도 MQTT는 더욱 안정적으로 작동합니다.
- 확장성 – 발행-구독 모델은 장치와 백엔드 시스템을 추가하여 손쉽게 확장할 수 있습니다. 단일 장치가 서로 다른 두 백엔드 네트워크(구독자)에 데이터를 발행하는 예로는 주거용 스마트 계량기가 있습니다. 이 계량기는 공공요금 청구를 위해 에너지 사용량 데이터를 유틸리티 사업자의 시스템으로 전송하는 동시에, 주택 소유자가 가정의 에너지 사용량을 확인할 수 있도록 고객용 애플리케이션에도 전송합니다.
- 보안성 – MQTT 메시지는 표준 전송 계층 보안(TLS)을 사용해 암호화할 수 있으며, 인증에 사용할 수 있는 자격 증명을 지원합니다. 따라서 MQTT는 다양한 의료 기기의 건강 모니터링 측정값과 같은 민감한 정보를 처리하는 IoT 애플리케이션에 적합한 안전한 메시징 프로토콜입니다.
MQTT는 어떤 전송 프로토콜을 사용하나요?
MQTT는 기본 전송 프로토콜로 전송 제어 프로토콜/인터넷 프로토콜(TCP/IP)을 지원합니다. 널리 사용되는 이 네트워크 프로토콜은 클라이언트와 브로커 간에 메시지가 안정적으로 전송되도록 보장합니다.
TCP/IP가 안정적이고 효율적인 것으로 평가되는 데에는 몇 가지 이유가 있습니다:
- 오류 감지 및 수정 – 다양한 기법을 통해 데이터 패킷의 무결성을 확인하고, 재전송 메커니즘을 사용해 손실된 패킷을 복구합니다.
- 흐름 제어 – 주어진 네트워크에 맞는 최적의 속도로 데이터를 전송하여 전송 지연을 방지하고 효율적인 통신을 촉진합니다.
- 다중화 – 여러 데이터 스트림을 하나의 연결을 통해 전송할 수 있으므로 여러 애플리케이션이 동시에 동일한 연결을 사용할 수 있습니다.
- 호환성 – 다양한 기기 및 운영 체제에서 작동합니다.
- 확장성 – 대량의 트래픽을 처리할 때도 성능 저하 없이 크고 복잡한 네트워크에서 작동하도록 설계되었습니다.
TCP/IP가 가장 일반적으로 사용되지만, MQTT 메시지를 전송하는 유일한 방식은 아닙니다. MQTT 프로토콜은 사용자 데이터그램 프로토콜(UDP)과 WebSocket에서도 작동합니다.

