Unisquads
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

MQTT (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.14 23:11

MQTT

이름

MQTT

정식 명칭

Message Queuing Telemetry Transport

분류

통신 프로토콜, IoT 프로토콜

개발

IBM (Andy Stanford-Clark, Arlen Nipper)

발표 연도

1999년

표준화 기구

OASIS (2014), ISO/IEC 20922 (2016)

기반 모델

발행-구독(Publish-Subscribe) 모델

주요 용도

사물인터넷(IoT), 머신 투 머신(M2M) 통신

기술 상세 정보

통신 방식

TCP/IP 기반, 경량 메시징

기본 구성 요소

발행자(Publisher), 구독자(Subscriber), 브로커(Broker)

주요 특징

경량성, 저대역폭, 불안정한 네트워크 환경 적합, QoS(서비스 품질) 수준 지원

QoS 수준

0(최대 한 번), 1(최소 한 번), 2(정확히 한 번)

보안

TLS/SSL 암호화, 사용자 인증 지원

포트

1883 (비암호화), 8883 (TLS/SSL 암호화)

대표적 구현

Eclipse Mosquitto, EMQ X, HiveMQ

관련 프로토콜

MQTT-SN(Sensor Networks), WebSocket을 통한 MQTT

적용 분야

스마트 홈, 원격 모니터링, 모바일 알림, 자동차 통신, 산업 자동화

최신 버전

MQTT 5.0 (2019년 OASIS 표준)

1. 개요

MQTT(Message Queuing Telemetry Transport)는 경량의 메시지 기반 통신 프로토콜이다. 주로 대역폭이 제한되거나 네트워크 연결이 불안정한 환경에서, 장치 간에 효율적으로 데이터를 교환하기 위해 설계되었다. 기본적으로 발행/구독(Pub/Sub) 모델을 채택하여, 메시지를 발행하는 클라이언트와 특정 주제를 구독하는 클라이언트 간의 통신을 중앙 브로커가 중개하는 구조를 가진다.

이 프로토콜은 원래 1999년 IBM의 앤디 스탠퍼드-클라크와 아르콤의 필립스가 유선망을 통한 센서 네트워크와 위성 링크를 모니터링하기 위해 개발하였다[1]. 이후 2014년에 OASIS 표준 기구의 공식 표준으로 채택되었고, 2019년에는 ISO/IEC 국제 표준(ISO/IEC 20922)으로도 승인되었다.

MQTT의 주요 목표는 단순성, 낮은 전력 소비, 최소한의 네트워크 대역폭 사용이다. 따라서 헤더가 매우 작고, 다양한 QoS(Quality of Service) 수준을 제공하여 네트워크 품질에 따라 메시지 전달 보장성을 선택할 수 있다. 이러한 특징들 덕분에 MQTT는 사물인터넷(IoT) 애플리케이션의 사실상(de facto) 표준 통신 프로토콜로 자리 잡았다.

2. MQTT의 역사와 배경

MQTT는 1999년 IBM의 엔지니어 앤디 스탠퍼드-클라크(Andy Stanford-Clark)와 아를렌 니퍼(Arlen Nipper)에 의해 개발되었다. 당시 그들은 석유 파이프라인 모니터링을 위한 원격 통신 시스템을 필요로 했으며, 기존 프로토콜이 너무 무겁고 대역폭 소비가 많다는 문제를 해결하고자 했다. 특히 위성 통신과 같이 대역폭이 제한적이고 비용이 높으며, 연결 상태가 불안정한 환경에서도 효율적으로 동작할 수 있는 경량 메시징 프로토콜을 목표로 설계되었다.

이 프로토콜의 초기 이름은 'MQ Telemetry Transport'였다. 여기서 'MQ'는 IBM의 메시지 큐 제품군인 'MQSeries'를 가리키는 것이었으나, 프로토콜 자체는 특정 벤더에 종속되지 않는 개방형 표준으로 발전했다. 2010년에는 이클립스 재단(Eclipse Foundation)의 오픈 소스 프로젝트인 paho의 일부가 되었고, 2014년에는 OASIS(구조화 정보 표준 진흥 협회)에 의해 표준화되었다. 이후 2019년에는 ISO(국제표준화기구)와 IEC(국제전기기술위원회)의 국제 표준(ISO/IEC 20922)으로도 채택되었다.

MQTT의 발전은 사물인터넷(IoT)의 급속한 성장과 궤를 같이한다. 초기 산업 자동화 및 M2M(Machine-to-Machine) 통신에 주로 사용되던 이 프로토콜은, 저전력 장치와 불안정한 네트워크 환경에서의 효율성 덕분에 IoT 시대의 핵심 통신 프로토콜로 자리 잡게 되었다.

3. MQTT의 핵심 개념

MQTT의 핵심 동작 원리는 발행/구독 모델에 기반한다. 이 모델에서는 메시지를 보내는 발행자와 메시지를 받는 구독자가 직접 연결되지 않는다. 대신, 중앙의 MQTT 브로커가 모든 메시지의 중개자 역할을 한다. 발행자는 특정 주제에 해당하는 메시지를 브로커로 보내고, 브로커는 해당 주제를 구독하고 있는 모든 클라이언트에게 그 메시지를 전달한다. 이 방식은 통신 당사자 간의 결합도를 낮추고 확장성을 높이는 장점이 있다.

시스템의 중심에는 MQTT 브로커가 위치한다. 브로커는 메시지의 수신, 필터링, 전달을 책임지는 서버이다. MQTT 클라이언트는 발행자, 구독자, 또는 둘 다의 역할을 할 수 있는 장치나 애플리케이션이다. 클라이언트는 브로커에 연결하여 메시지를 발행하거나 원하는 주제를 구독한다. 클라이언트와 브로커 간의 연결은 TCP/IP를 기반으로 하며, 연결 수립 시 CONNECT와 CONNACK 패킷을 교환한다.

메시지가 전달되는 경로는 토픽이라는 문자열로 식별된다. 토픽은 계층 구조를 가지며, 슬래시(/)로 구분한다. 예를 들어, home/livingroom/temperature와 같은 형식이다. 구독자는 단일 토픽을 정확히 구독하거나, home/+/temperature와 같은 와일드카드를 사용하여 여러 토픽을 한 번에 구독할 수 있다. 메시지 전달의 신뢰성 수준은 QoS 등급으로 정의된다.

QoS 레벨

이름

설명

메시지 전달 보장

0

At most once (최대 한 번)

메시지는 최대 한 번 전달된다. 확인 응답 없음.

Fire and Forget

1

At least once (최소 한 번)

메시지는 최소 한 번 전달된다. 확인 응답 필요.

중복 전송 가능

2

Exactly once (정확히 한 번)

메시지는 정확히 한 번 전달된다. 4-way 핸드셰이크 사용.

중복 없음

QoS 0은 가장 빠르지만 신뢰성이 낮고, QoS 2는 가장 신뢰성 높지만 오버헤드가 크다. 애플리케이션의 요구사항에 따라 적절한 QoS 레벨을 선택한다.

3.1. 발행/구독(Pub/Sub) 모델

발행/구독 모델은 MQTT의 근본적인 통신 패러다임이다. 이 모델에서는 메시지를 보내는 주체인 발행자와 메시지를 받는 주체인 구독자가 직접적으로 연결되지 않는다. 대신, 중앙의 MQTT 브로커가 모든 메시지의 중개자 역할을 한다. 발행자는 특정 토픽에 메시지를 게시하고, 구독자는 관심 있는 토픽을 브로커에 등록한다. 브로커는 수신한 메시지를 해당 토픽을 구독하고 있는 모든 클라이언트에게 전달하는 책임을 진다.

이 구조는 전통적인 클라이언트-서버 모델이나 점대점 통신과는 명확히 구분된다. 발행자는 구독자가 누구인지, 몇 명인지 알 필요가 없으며, 구독자 역시 메시지가 어디에서 왔는지 알지 못한 채 원하는 정보만을 받을 수 있다. 이러한 결합도의 감소는 시스템의 확장성과 유연성을 크게 향상시킨다. 새로운 구독자를 추가하거나 발행자를 변경하는 것이 기존 구성 요소에 영향을 미치지 않는다.

발행/구독 모델의 주요 이점은 다음과 같이 정리할 수 있다.

이점

설명

공간 결합도 해제

발행자와 구독자는 서로의 존재를 알 필요가 없다.

시간 결합도 해제

통신 당사자들이 동시에 연결되어 있을 필요가 없다.[2]

확장성

하나의 토픽에 다수의 발행자와 구독자가 참여할 수 있다.

유연한 네트워크 토폴로지

네트워크 구조 변경이 애플리케이션 로직에 미치는 영향이 적다.

이 모델은 특히 사물인터넷 환경에 적합하다. 수많은 센서(발행자)가 데이터를 생성하고, 다양한 애플리케이션(구독자)이 그 데이터를 선택적으로 소비하는 구조를 자연스럽게 반영하기 때문이다. 예를 들어, 온도 센서는 "home/livingroom/temperature" 토픽에 데이터를 발행하면, 이 토픽을 구독한 스마트폰 앱, 데이터베이스 저장 서비스, 에어컨 제어 장치 등이 각자의 목적에 맞게 해당 데이터를 활용할 수 있다.

3.2. 브로커(Broker)와 클라이언트(Client)

MQTT 아키텍처의 중심에는 브로커와 클라이언트라는 두 가지 핵심 구성 요소가 존재한다. 이 두 요소는 발행/구독 모델을 기반으로 메시지 흐름을 관리하며, 브로커는 중앙 허브 역할을, 클라이언트는 메시지를 생산하거나 소비하는 끝단 역할을 담당한다.

브로커는 모든 메시지 교환의 중심 서버이다. 브로커의 주요 임무는 클라이언트로부터 수신한 메시지를 적절한 구독자에게 전달하는 것이다. 브로커는 연결 관리, 인증 및 권한 부여, 토픽 기반 메시지 라우팅, 지정된 QoS 수준에 따른 메시지 전달 보장 등의 기능을 수행한다. 브로커는 수많은 클라이언트의 동시 연결을 처리하고, 오프라인 클라이언트를 위한 메시지 보관(이를 세션과 지속 세션으로 관리함)도 담당한다[3]. 브로커의 구현체에는 Mosquitto, EMQX, HiveMQ 등이 있다.

반면, 클라이언트는 MQTT 프로토콜을 사용하여 브로커에 연결하는 모든 장치 또는 애플리케이션을 의미한다. 클라이언트는 발행자(Publisher), 구독자(Subscriber), 또는 두 역할을 모두 수행할 수 있다. 발행자 클라이언트는 특정 토픽에 메시지를 생성하여 브로커로 보내고, 구독자 클라이언트는 관심 있는 토픽을 브로커에 등록(구독)하여 해당 토픽의 메시지를 수신한다. 클라이언트는 리소스가 제한된 임베디드 장치, 스마트폰 앱, 웹 애플리케이션, 서버 프로그램 등 매우 다양할 수 있다.

브로커와 클라이언트의 관계는 다음과 같은 표로 요약할 수 있다.

역할

주요 기능

예시

브로커

메시지 라우팅, 연결 관리, 세션 및 구독 상태 유지, 보안 정책 적용

Mosquitto 서버, EMQX 클라우드 서비스

클라이언트 (발행자)

특정 토픽으로 메시지를 생성 및 전송

온도 센서, 모바일 앱

클라이언트 (구독자)

특정 토픽을 구독하고 해당 메시지를 수신

데이터베이스 서버, 대시보드 웹 페이지

클라이언트 (이중 역할)

메시지를 발행하고 동시에 다른 토픽을 구독

스마트 홈 중앙 제어기

이 분리된 아키텍처는 시스템의 확장성과 유연성을 높인다. 클라이언트는 서로를 직접 알 필요 없이 오직 브로커와만 통신하면 되며, 브로커는 클라이언트 간의 결합도를 낮추고 효율적인 메시지 배포를 가능하게 한다.

3.3. 토픽(Topic)과 QoS(Quality of Service)

토픽은 메시지가 전송되는 가상 채널 또는 주소 체계이다. 클라이언트는 특정 토픽을 구독하여 해당 주제의 메시지를 수신하거나, 특정 토픽으로 메시지를 발행한다. 토픽은 계층 구조를 가지며, 슬래시(/)로 구분된 문자열로 표현된다. 예를 들어, home/livingroom/temperature와 같은 형식이다. 와일드카드 문자인 +(단일 레벨)와 #(다중 레벨)을 사용하여 여러 토픽을 한 번에 구독할 수 있다[4].

QoS는 메시지 전달의 신뢰성 수준을 정의하는 MQTT의 핵심 메커니즘이다. 네트워크 환경과 애플리케이션 요구사항에 따라 세 가지 레벨 중 선택할 수 있다.

QoS 레벨

값

의미

전송 보장

설명

QoS 0

0

최대 한 번(At most once)

없음

메시지는 최선형(Best-effort)으로 한 번 전송되며, 수신 확인이나 재전송을 하지 않는다. 데이터 유실 가능성이 있지만 오버헤드가 가장 적다.

QoS 1

1

최소 한 번(At least once)

수신 확인

발행자는 수신 확인(PUBACK) 패킷을 받을 때까지 메시지를 저장하고 재전송한다. 수신 측은 중복 메시지를 처리할 수 있어야 한다.

QoS 2

2

정확히 한 번(Exactly once)

핸드셰이크

4단계 핸드셰이크를 통해 메시지의 중복 수신을 방지하며, 가장 높은 신뢰성을 보장한다. 네트워크 및 처리 오버헤드가 가장 크다.

QoS 설정은 발행 시점에 결정되며, 브로커와 구독 클라이언트 간의 실제 전송 품질은 발행 QoS와 구독 시 요청된 QoS 중 더 낮은 값으로 조정된다. 이는 네트워크 대역폭이 제한된 사물인터넷 환경에서 효율적인 리소스 관리를 가능하게 한다.

4. MQTT 프로토콜의 특징

MQTT는 사물인터넷 환경에 최적화된 통신 프로토콜로, 몇 가지 뚜렷한 특징을 가지고 있다. 이러한 특징들은 제한된 자원을 가진 장치들이 효율적으로 통신할 수 있도록 설계되었다.

가장 두드러진 특징은 경량 프로토콜이라는 점이다. MQTT의 프로토콜 헤더는 최소 2바이트로 매우 작으며, 메시지 오버헤드가 적다. 이는 대역폭이 제한된 네트워크나 배터리 수명이 중요한 임베디드 시스템에서 큰 장점으로 작용한다. 또한, 클라이언트 측 구현체의 코드 풋프린트가 작아 메모리와 처리 능력이 부족한 마이크로컨트롤러에서도 실행이 가능하다.

통신 방식은 기본적으로 비동기 통신을 기반으로 한다. 발행자(Publisher)는 메시지를 보내고 즉시 다른 작업을 수행할 수 있으며, 구독자(Subscriber)는 메시지가 도착하면 비동기적으로 처리한다. 이는 실시간 반응성이 요구되는 시스템에 적합하다. 또한, 발행/구독 모델 덕분에 발행자와 구독자는 서로를 직접 알 필요가 없고, 토픽을 매개로 느슨하게 결합된다. 이는 시스템 확장성과 유연성을 크게 향상시킨다.

네트워크 상태가 불안정한 환경을 대비한 설계도 중요한 특징이다. QoS 수준을 통해 메시지 전달 보장 정도를 0, 1, 2 중에서 선택할 수 있다. 특히, Last Will and Testament 기능은 클라이언트가 예기치 않게 연결이 끊어졌을 때 브로커가 미리 지정된 메시지를 대신 발행하도록 한다. 지속 세션 기능은 클라이언트가 오프라인 상태일 때 놓친 메시지를 재연결 시 받을 수 있도록 보장한다.

4.1. 경량 프로토콜

MQTT는 이름 그대로 경량성을 최우선 설계 목표로 삼은 메시징 프로토콜이다. 이 프로토콜은 제한된 대역폭과 불안정한 네트워크 환경, 낮은 처리 성능과 메모리를 가진 임베디드 장치에서도 효율적으로 동작하도록 만들어졌다. 이러한 설계 철학은 TCP/IP 위에서 동작하는 다른 프로토콜들에 비해 매우 작은 프로토콜 오버헤드를 가능하게 한다. MQTT의 헤더는 최소 2바이트만으로 구성될 수 있으며, 메시지 페이로드 또한 최소화되어 전송된다.

이러한 경량성은 여러 측면에서 구현된다. 첫째, 고정 헤더가 매우 간결하며, 연결 수립 과정이 단순하다. 둘째, 메시지 유형이 제한적이고 명확하여 파싱과 처리가 빠르다. 셋째, 토픽 기반의 발행-구독 모델은 수신자가 명시적으로 지정되지 않아도 되어 주소 지정 정보가 필요 없다. 결과적으로 MQTT는 HTTP와 같은 프로토콜에 비해 네트워크 트래픽과 장치의 전력 소모를 크게 줄일 수 있다.

경량 프로토콜의 특성은 아래 표와 같이 주요 설계 요소에서 드러난다.

설계 요소

경량성 구현 방식

프로토콜 헤더

최소 2바이트, 옵션 필드만 필요시 추가

연결 제어

CONNECT/CONNACK 패킷으로 간단한 핸드셰이크

메시지 타입

14가지로 제한된 고정 패킷 유형

데이터 전송

페이로드 외 불필요한 메타데이터 최소화

상태 관리

클라이언트 상태를 브로커가 유지하여 클라이언트 부담 감소

이러한 특성 덕분에 MQTT는 저전력 광역 네트워크(LPWAN)나 셀룰러 네트워크(예: NB-IoT, LTE-M)와 같이 리소스가 극도로 제한된 환경에서도 널리 채택되었다. 경량성은 단순히 패킷 크기만을 의미하는 것이 아니라, 프로토콜 전체의 단순성과 구현의 용이성을 포함하는 핵심 개념이다.

4.2. 비동기 통신

MQTT는 기본적으로 비동기 통신 방식을 채택한다. 이는 메시지를 보내는 클라이언트가 메시지를 받는 클라이언트의 즉각적인 응답을 기다리지 않고, 브로커에게 메시지를 전송한 후 자신의 작업을 계속할 수 있음을 의미한다. 발행자는 메시지를 브로커에 전달하는 즉시 연결을 끊을 수 있으며, 구독자는 자신이 온라인 상태가 될 때까지 메시지를 브로커로부터 비동기적으로 수신할 수 있다. 이 모델은 네트워크 대역폭이 제한적이거나 연결이 불안정한 사물인터넷 환경에 매우 적합하다.

비동기 통신의 핵심은 발행/구독 모델에 기반을 둔다. 발행자와 구독자는 서로를 직접 알 필요가 없으며, 오직 공통의 관심사인 토픽을 통해 간접적으로 연결된다. 발행자가 특정 토픽으로 메시지를 발행하면, 브로커는 해당 토픽을 구독하고 있는 모든 구독자에게 메시지를 비동기적으로 전달한다. 이 과정에서 발행자는 구독자가 메시지를 성공적으로 받았는지 여부를 알 수 없으며, 그 책임은 브로커와 QoS 수준에 의해 관리된다.

이러한 비동기 특성은 시스템의 확장성과 응답성을 크게 향상시킨다. 수천 개의 장치가 브로커에 연결되어 있어도, 개별 장치의 상태나 응답 지연이 전체 시스템에 직접적인 영향을 미치지 않는다. 또한, 클라이언트는 네트워크 연결이 일시적으로 끊어졌다가 복구되어도, 적절한 QoS 설정을 통해 놓친 메시지를 브로커로부터 다시 전달받을 수 있다. 이는 MQTT가 실시간성이 요구되지만 연결이 항상 안정적이지 않은 환경에서 널리 사용되는 주요 이유 중 하나이다.

4.3. 네트워크 불안정성 대응

MQTT는 제한된 대역폭과 불안정한 네트워크 환경에서도 신뢰할 수 있는 메시지 전달을 보장하기 위해 여러 메커니즘을 제공한다. 핵심은 QoS 수준이다. QoS는 메시지 전달의 신뢰성 수준을 정의하며, 0, 1, 2의 세 단계로 구분된다. 각 수준은 네트워크 품질에 따라 적절히 선택되어 사용된다.

QoS 수준은 다음과 같이 동작한다. QoS 0은 '최대 한 번' 전송으로, 메시지는 한 번만 발송되고 수신 확인을 하지 않는다. 이는 데이터 손실이 허용되는 시나리오에 적합하다. QoS 1은 '적어도 한 번' 전송으로, 발신자는 수신 확인(PUBACK) 패킷을 받을 때까지 메시지를 재전송한다. 이로 인해 메시지 중복이 발생할 수 있다. QoS 2는 '정확히 한 번' 전송으로, 네 단계의 핸드셰이크 과정을 통해 메시지 중복을 완전히 제거하며 가장 높은 신뢰성을 보장한다.

QoS 수준

별칭

신뢰성

메시지 중복 가능성

네트워크 오버헤드

0

최대 한 번(At most once)

낮음

가능함

매우 낮음

1

적어도 한 번(At least once)

중간

발생함

중간

2

정확히 한 번(Exactly once)

높음

없음

높음

이 외에도 MQTT는 연결이 끊겼을 때를 대비한 지속 세션과 Last Will and Testament 메커니즘을 갖추고 있다. 클라이언트는 연결 시 지속 세션을 요청할 수 있으며, 이 경우 브로커는 클라이언트의 구독 정보와 미처리 메시지(QoS 1, 2)를 유지한다. 클라이언트가 재연결하면 이 상태가 복원된다. LWT는 클라이언트가 예기치 않게 연결이 끊어졌을 때 브로커가 대신 지정된 토픽에 '유언' 메시지를 발행하도록 설정하는 기능이다. 이를 통해 시스템은 비정상 종료를 감지하고 대응할 수 있다.

5. MQTT 메시지 구조와 패킷

MQTT 프로토콜은 고정된 헤더, 가변 헤더, 페이로드로 구성된 패킷을 교환하여 통신한다. 모든 패킷은 2바이트의 고정 헤더로 시작하며, 여기에는 패킷 유형, 플래그, 남은 길이(Remaining Length) 정보가 포함된다. 남은 길이 필드는 가변 바이트 방식으로 인코딩되어 최대 256MB까지의 메시지 크기를 효율적으로 표현할 수 있다.

패킷 유형은 총 14가지로 정의되어 있으며, 주요 패킷은 다음과 같다.

패킷 유형

값

설명

CONNECT

1

클라이언트가 브로커에 연결을 요청한다.

CONNACK

2

브로커가 연결 요청에 대한 응답을 보낸다.

PUBLISH

3

메시지를 발행한다.

PUBACK

4

QoS 1 수준의 발행 메시지에 대한 확인 응답이다.

SUBSCRIBE

8

특정 토픽을 구독하도록 요청한다.

SUBACK

9

구독 요청에 대한 확인 응답이다.

PINGREQ

12

연결 유지를 위한 핑 요청이다.

PINGRESP

13

핑 요청에 대한 응답이다.

DISCONNECT

14

정상적인 연결 종료를 알린다.

가변 헤더는 특정 패킷 유형에 따라 존재하며, 예를 들어 PUBLISH 패킷에는 토픽 이름과 패킷 식별자(Packet Identifier)가 포함된다. 페이로드는 실제 전송할 애플리케이션 메시지 데이터를 담으며, CONNECT 패킷의 경우 클라이언트 ID, 사용자 이름, 비밀번호 등의 연결 정보를 포함한다. 메시지의 크기를 최소화하기 위해 바이너리 데이터를 그대로 전송할 수 있다는 점이 특징이다.

6. 주요 활용 분야

MQTT는 특히 제한된 자원을 가진 장치들 간의 효율적인 통신에 적합하여, 사물인터넷 분야에서 널리 채택되었다. 센서나 액추에이터와 같은 엣지 장치는 MQTT 클라이언트로 동작하여 브로커를 통해 데이터를 발행하거나 구독한다. 이는 실시간으로 원격 모니터링, 제어, 데이터 수집을 가능하게 하며, MQTT의 경량 특성과 불안정한 네트워크 환경에서의 신뢰성은 IoT 애플리케이션의 핵심 요구사항을 충족시킨다.

모바일 환경에서도 MQTT는 중요한 역할을 한다. 배터리 수명이 제한된 스마트폰이나 태블릿은 MQTT의 저전력 소비와 간헐적 연결을 효율적으로 처리할 수 있는 비동기 통신 모델의 이점을 얻는다. 이를 통해 푸시 알림, 실시간 채팅, 소셜 미디어 업데이트 전송 등에 활용되며, 네트워크 상태 변화에 강건하게 대응한다.

실시간 데이터 스트리밍 분야에서는 MQTT의 낮은 지연 시간과 확장성이 강점으로 작용한다. 금융 시장의 주가 틱 데이터, 산업 현장의 기계 상태 모니터링, 스마트 그리드의 에너지 소비 데이터, 위치 기반 서비스 등 빠른 데이터 전달이 필수적인 애플리케이션에 적합하다. 발행/구독 모델은 하나의 데이터 소스가 다수의 구독자에게 동시에 메시지를 배포하는 것을 용이하게 한다.

주요 활용 분야

대표적 적용 예시

사물인터넷

스마트 홈 자동화, 원격 센서 네트워크, 산업용 IoT 플랫폼

모바일 애플리케이션

푸시 알림 서비스, 실시간 메신저, 모바일 게임 상태 동기화

실시간 데이터 스트리밍

주식 시세 전송, 실시간 대시보드, 차량 텔레메트리, 로그 집계

6.1. 사물인터넷(IoT)

MQTT는 제한된 컴퓨팅 자원과 불안정한 네트워크 환경을 가진 사물인터넷 디바이스에 최적화된 통신 프로토콜이다. 센서, 액추에이터, 게이트웨이 등 다양한 IoT 장치들이 에너지 효율적으로 데이터를 교환할 수 있도록 설계되었다. 경량 프로토콜 특성으로 인해 배터리 수명이 긴 장치에서도 장기간 운영이 가능하며, 발행/구독 모델을 통해 하나의 메시지를 다수의 구독자에게 효율적으로 전파할 수 있다.

주요 적용 사례로는 스마트 홈 환경에서의 조명 제어, 온도 조절, 보안 시스템 연동이 있다. 또한 산업 IoT 분야에서는 공장 자동화 시스템의 기계 상태 모니터링, 원격 제어, 예측 정비에 널리 사용된다. MQTT의 QoS 수준을 활용하면 네트워크 품질에 따라 메시지 전달의 신뢰성을 유연하게 조정할 수 있어, 상황에 맞는 통신을 보장한다.

다음 표는 사물인터넷에서 MQTT가 해결하는 일반적인 과제와 그 대응 방식을 보여준다.

IoT 환경의 과제

MQTT의 대응 방식

제한된 대역폭과 높은 레이턴시

작은 패킷 헤더와 페이로드로 통신 오버헤드 최소화

불안정한 네트워크 연결

지속 세션과 QoS 수준을 통한 메시지 전달 보장

디바이스의 낮은 전력 소비 요구

경량 프로토콜과 효율적인 연결 관리로 에너지 절약

다양한 장치와 시스템 간 통합

표준화된 프로토콜과 토픽 기반의 유연한 메시지 라우팅

이러한 특성들 덕분에 MQTT는 수많은 IoT 플랫폼과 클라우드 서비스의 표준 통신 수단으로 채택되었다. 예를 들어, Amazon Web Services IoT Core, Microsoft Azure IoT Hub, Google Cloud IoT Core 등 주요 클라우드 제공자들은 MQTT를 기본 프로토콜로 지원한다.

6.2. 모바일 애플리케이션

MQTT는 모바일 애플리케이션 환경에서 효율적인 통신을 가능하게 하는 프로토콜이다. 모바일 환경은 배터리 수명, 불규칙한 네트워크 연결, 제한된 대역폭 등 여러 제약 조건을 가지고 있다. MQTT의 경량 설계와 비동기 통신 방식은 이러한 제약을 극복하는 데 적합하다. 애플리케이션이 네트워크에 항상 연결되어 있을 필요 없이, 메시지를 발행하거나 필요한 토픽을 구독할 수 있어 배터리 소모를 줄일 수 있다.

특히 푸시 알림, 실시간 채팅, 위치 기반 서비스, 소셜 미디어 피드 업데이트 등에 활용된다. 예를 들어, 채팅 애플리케이션에서는 각 채팅방을 하나의 토픽(Topic)으로 설정하고, 사용자는 해당 토픽을 구독하여 실시간으로 메시지를 수신할 수 있다. MQTT 브로커(Broker)는 메시지의 중개자 역할을 하여, 발행자가 오프라인 상태인 구독자에게도 메시지를 전달할 수 있도록 QoS(Quality of Service) 수준에 따라 메시지를 보관한다.

다음은 MQTT가 모바일 애플리케이션에 적합한 이유를 정리한 표이다.

특징

모바일 애플리케이션에서의 이점

경량 프로토콜

제한된 대역폭에서도 효율적 통신 가능, 데이터 요금 절감

비동기 통신 (Pub/Sub)

배터리 소모 감소, 네트워크 연결이 끊겨도 메시지 큐잉 가능

QoS 지원

네트워크 상태에 관계없이 메시지 전달 보장 수준 선택 가능

지속적 세션

재연결 시 중단된 메시지 수신 가능

이러한 특성으로 인해 MQTT는 사물인터넷(IoT) 기기와 모바일 앱을 연결하는 브릿지 역할을 하기도 한다. 사용자는 스마트폰 앱을 통해 원격지의 IoT 장치 상태를 모니터링하거나 제어 명령을 발행할 수 있다.

6.3. 실시간 데이터 스트리밍

MQTT의 발행/구독 모델과 낮은 지연 시간, 효율적인 메시지 배달 특성은 실시간으로 데이터를 생성, 전송, 소비해야 하는 다양한 스트리밍 시나리오에 적합한 프로토콜로 자리 잡았다. 센서 네트워크나 사물인터넷 이상으로, 빠르게 변화하는 데이터의 흐름을 관리하는 데 널리 활용된다.

주요 적용 분야로는 실시간 위치 추적 시스템이 있다. 차량, 배송 물품, 모바일 장치 등 이동체의 GPS 좌표 데이터가 토픽을 통해 지속적으로 발행되고, 관제 센터나 모니터링 애플리케이션이 해당 토픽을 구독하여 지도 상에 실시간으로 위치를 표시한다. QoS 수준을 조정하여 네트워크 상태에 따라 데이터의 신뢰성과 실시간성을 균형 있게 설정할 수 있다. 또한 주식 시세, 암호화폐 가격, 스포츠 경기 실황 점수와 같은 금융 및 엔터테인먼트 분야의 실시간 피드 전송에도 적극적으로 사용된다. 수많은 클라이언트가 동일한 시장 데이터 토픽을 구독하며, 새로운 데이터가 발행되는 즉시 전달받을 수 있다.

아래 표는 MQTT 기반 실시간 데이터 스트리밍의 주요 유형과 특징을 정리한 것이다.

적용 분야

전송 데이터 예시

주요 요구사항

적합한 QoS

위치 추적

GPS 좌표, 속도, 방향

낮은 지연, 빈번한 업데이트

QoS 0 또는 1

금융 시세

주식 가격, 호가, 체결량

정확성, 확장성, 실시간성

QoS 1

실시간 모니터링

서버 메트릭, 네트워크 상태

신뢰성, 경보 즉시 전달

QoS 1 또는 2

협업 애플리케이션

문서 편집 커서 위치, 채팅 메시지

순간적 동기화, 상태 공유

QoS 0 또는 1

이러한 스트리밍 활용은 MQTT 5.0에서 도입된 공유 구독(Shared Subscriptions) 기능으로 더욱 강화되었다. 이 기능을 통해 고가용성과 부하 분산이 필요한 스트리밍 서비스에서, 여러 구독자 클라이언트가 하나의 토픽을 공유하여 메시지 처리 부하를 분산시킬 수 있다. 결과적으로 MQTT는 단순한 장치 제어를 넘어서, 시간에 민감한 데이터의 효율적인 스트리밍 인프라의 핵심 프로토콜로 역할을 수행한다.

7. 대표적인 MQTT 브로커 및 클라이언트

MQTT 생태계는 다양한 오픈 소스 및 상용 브로커와 클라이언트 라이브러리로 구성되어 있으며, 각각 다른 프로그래밍 언어와 플랫폼을 지원합니다.

대표적인 오픈 소스 MQTT 브로커로는 Eclipse Mosquitto가 있습니다. C 언어로 작성된 경량 브로커로, 표준 MQTT 3.1.1 및 5.0을 완벽 지원하며, 설치와 구성이 간편하여 가장 널리 사용됩니다. EMQ X는 고성능과 대규모 클러스터링을 지원하는 Erlang 기반의 브로커입니다. HiveMQ는 기업용 상용 브로커로, 높은 확장성과 안정성, 전문적인 지원을 제공합니다. Apache ActiveMQ Artemis와 RabbitMQ (MQTT 플러그인 사용 시)도 MQTT 프로토콜을 지원하는 메시징 미들웨어로 활용됩니다.

클라이언트 측면에서는 거의 모든 주요 프로그래밍 언어를 위한 라이브러리가 존재합니다. 예를 들어, Paho 프로젝트는 Eclipse Foundation에서 관리하는 공식 MQTT 클라이언트 라이브러리 모음으로, Java, C, C++, Python, JavaScript 등 다양한 언어 버전을 제공합니다. 모바일 개발을 위한 Android와 iOS 전용 라이브러리도 포함되어 있습니다. 또한, MQTT.js는 Node.js 환경에서 널리 쓰이는 JavaScript 클라이언트 라이브러리입니다.

유형

이름

주요 특징

라이선스

브로커

Eclipse Mosquitto

경량, 표준 완벽 지원, 널리 사용됨

EPL/EDL

브로커

EMQ X (현 EMQX)

고성능, 클러스터링, Erlang 기반

아파치 2.0

브로커

HiveMQ

기업용, 상용, 고가용성

상용

클라이언트 라이브러리

Eclipse Paho

다중 언어 지원, 공식 프로젝트

EPL/EDL

클라이언트 라이브러리

MQTT.js

Node.js 환경용 JavaScript 라이브러리

MIT

이러한 도구들은 개발자가 특정 요구사항(예: 장치 제한, 처리량, 보안 수준, 개발 언어)에 맞춰 MQTT 시스템을 구축할 수 있도록 선택지를 제공합니다.

8. 보안 고려사항

MQTT는 기본적으로 가볍고 개방된 프로토콜로 설계되었기 때문에, 초기 버전에는 보안 기능이 포함되지 않았다. 그러나 실제 산업 환경과 사물인터넷 적용 시에는 인증, 권한 부여, 데이터 기밀성과 무결성이 필수적이다. 이를 위해 MQTT는 TCP/IP 기반의 표준 네트워크 보안 기술을 활용하며, 주로 사용자 이름/비밀번호 인증과 TLS/SSL 암호화를 결합하여 보안을 강화한다.

인증과 권한 부여는 가장 기본적인 보안 수단이다. 대부분의 MQTT 브로커는 클라이언트 연결 시 사용자 이름과 비밀번호를 요구하는 기능을 제공한다. 이를 통해 허가되지 않은 장치의 접속을 차단할 수 있다. 더 나아가, ACL을 설정하여 특정 클라이언트가 특정 토픽에 대해 발행하거나 구독할 수 있는 권한을 세밀하게 제어한다. 예를 들어, 하나의 센서 장치는 자신의 데이터를 발행하는 토픽에만 쓰기 권한을 가지고, 제어 명령을 구독하는 토픽에는 읽기 권한만 가질 수 있다.

데이터의 기밀성을 보장하기 위해서는 통신 채널 전체를 암호화하는 것이 효과적이다. MQTT는 TLS를 사용하여 브로커와 클라이언트 간의 통신을 암호화한다. 이는 MQTT 3.1.1에서 표준 포트 8883이 공식적으로 TLS용으로 지정되면서 더욱 표준화되었다. TLS 암호화는 메시지 내용이 제3자에 의해 도청되는 것을 방지하고, 서버 인증서를 통해 클라이언트가 연결하는 브로커의 신원을 확인할 수 있게 한다. 네트워크가 불안정하거나 대역폭이 제한된 환경에서는 TLS 핸드셰이크의 오버헤드를 고려해야 하지만, 현대의 경량화된 TLS 구현체는 많은 IoT 디바이스에서도 실행 가능하다.

보안 계층

구현 방법

주요 목적

연결 수준

TLS/SSL 암호화

통신 채널의 기밀성과 무결성 보장, 브로커 신원 확인

클라이언트 인증

사용자 이름/비밀번호, 클라이언트 인증서

연결 시도 장치의 신원 확인

접근 제어

ACL

토픽 기반의 발행/구독 권한 세부 관리

이러한 보안 메커니즘은 함께 사용될 때 가장 효과적이다. 예를 들어, TLS로 암호화된 채널 위에서 사용자 인증을 수행하고, ACL로 세부 권한을 관리하는 것이 일반적인 보안 구성이다. 또한, MQTT 5.0에서는 향상된 인증 메커니즘을 지원하여 보안 절차를 더욱 유연하게 만든다.

8.1. 인증과 권한 부여

MQTT 브로커는 클라이언트의 연결을 허용하기 전에 인증을 요구할 수 있다. 가장 일반적인 방식은 사용자 이름과 비밀번호를 이용한 인증이다. 클라이언트는 CONNECT 패킷에 이 자격 증명을 포함하여 전송하고, 브로커는 이를 검증하여 연결을 승인하거나 거부한다. 일부 구현체에서는 클라이언트 인증서를 사용한 X.509 인증과 같은 더 강력한 방법도 지원한다.

인증 이후에는 권한 부여, 즉 특정 작업에 대한 접근 제어가 이루어진다. 대표적인 권한 부여 메커니즘은 ACL이다. ACL 규칙은 클라이언트 ID나 사용자 이름을 기준으로 특정 토픽에 대한 구독, 발행, 또는 두 가지 모두를 허용하거나 금지한다. 예를 들어, 특정 클라이언트가 "sensor/temperature" 토픽에는 데이터를 발행만 할 수 있고, "actuator/light" 토픽에는 구독만 할 수 있도록 세밀하게 제어할 수 있다.

권한 종류

설명

예시 토픽 필터

구독(Subscribe)

특정 토픽 또는 토픽 필터로 메시지를 수신할 수 있는 권한

home/+/temperature

발행(Publish)

특정 토픽으로 메시지를 전송할 수 있는 권한

home/livingroom/light

모두(All)

구독과 발행 모두 가능한 권한

$SYS/broker/uptime

권한 부여는 시스템의 보안과 데이터 무결성을 유지하는 데 필수적이다. 잘못 구성된 ACL은 권한 없는 클라이언트가 중요한 토픽에 메시지를 발행하거나 기밀 데이터를 구독하는 것을 허용할 수 있다. 따라서 프로덕션 환경에서는 반드시 인증과 함께 엄격한 권한 부여 정책을 구성하고 정기적으로 검토해야 한다.

8.2. TLS/SSL 암호화

MQTT는 기본적으로 평문 통신을 사용하므로, 전송 중인 데이터의 기밀성과 무결성을 보장하기 위해 TLS/SSL 암호화를 적용하는 것이 필수적이다. TLS/SSL은 MQTT 브로커와 MQTT 클라이언트 간의 통신 채널을 암호화하여, 메시지 내용이 제3자에 의해 도청되거나 변조되는 것을 방지한다. 일반적으로 표준 MQTT 포트(1883) 대신 암호화된 포트(8883)를 사용하여 연결을 수립한다.

암호화 구현 방식은 주로 두 가지로 나뉜다. 첫째는 전송 계층 보안을 통해 전체 연결을 암호화하는 방식이다. 이 경우 모든 MQTT 패킷이 암호화되어 전송되며, 클라이언트 인증서를 사용한 강력한 클라이언트 인증도 가능하다. 둘째는 웹소켓을 통한 MQTT 연결에 TLS를 적용하는 방식으로, 웹 브라우저 기반 클라이언트에서 주로 사용된다.

암호화 방식

설명

일반 사용 포트

Native TLS

TCP 연결 위에 직접 TLS를 적용하는 표준 방식.

8883

WebSocket over TLS

웹소켓 연결을 통해 MQTT를 사용하고, 그 웹소켓 연결에 TLS를 적용.

443

TLS/SSL을 구성할 때는 강력한 암호화 제품군을 선택하고, 유효한 인증서를 사용해야 한다. 자체 서명된 인증서는 개발 및 테스트 환경에서는 사용될 수 있으나, 프로덕션 환경에서는 공인된 인증 기관에서 발급받은 인증서를 사용하는 것이 보안상 안전하다. 이를 통해 중간자 공격을 방지하고 통신 상대방의 신원을 확인할 수 있다.

9. MQTT 5.0의 주요 개선사항

MQTT 5.0은 2019년 3월에 공식 표준으로 출시된 주요 프로토콜 업데이트이다. 이전 버전인 MQTT 3.1.1에 비해 확장성, 유연성, 진단 기능이 크게 향상되었으며, 대규모 및 복잡한 사물인터넷 시스템을 더 효율적으로 지원하도록 설계되었다.

주요 개선사항 중 하나는 향상된 세션 및 메시지 생명주기 관리이다. 새로운 '세션 만료 간격(Session Expiry Interval)' 속성을 통해 클라이언트가 연결을 끊은 후에도 브로커가 세션 상태를 유지할 시간을 명시적으로 설정할 수 있다. 또한 '메시지 만료 간격(Message Expiry Interval)' 속성이 도입되어 발행자가 메시지의 유효 기간을 설정할 수 있게 되어, 오래된 데이터가 구독자에게 전달되는 것을 방지한다. 프로토콜의 확장성을 높이기 위해 '사용자 속성(User Properties)'이 추가되어, 개발자가 메시지나 연결 요청에 메타데이터 키-값 쌍을 첨부할 수 있게 되었다.

개선 분야

MQTT 5.0의 주요 기능

설명

진단 및 피드백

이유 코드(Reason Code)

모든 응답 패킷에 작업 성공/실패의 구체적인 이유를 포함하여 문제 해결을 용이하게 함.

흐름 제어

공유 구독(Shared Subscriptions)

동일한 토픽을 여러 구독자 클라이언트가 로드 밸런싱 방식으로 공유하여 메시지 처리 부하를 분산시킴.

할당량 관리

최대 패킷 크기 협상

연결 시 클라이언트와 브로커가 수용 가능한 최대 패킷 크기를 협상하여 리소스 초과 사용을 방지함.

페이로드 형식

페이로드 형식 표시(Payload Format Indicator)

메시지 내용이 UTF-8 텍스트인지 이진 데이터인지 명시할 수 있어, 수신 측의 처리를 최적화함.

또한, 서버 측 재시도(Server-side Retry)를 위한 '응답 정보(Response Topic)'와 '상관 데이터(Correlation Data)' 기능은 요청-응답 통신 패턴을 공식적으로 지원한다. 이러한 개선사항들은 MQTT가 더 다양한 애플리케이션 시나리오에 적합하도록 만들었으며, 특히 클라우드 네이티브 환경과 대규모 IoT 배포에서 그 장점이 두드러진다.

10. 관련 문서

  • MQTT.org - 공식 웹사이트

  • 위키백과 - MQTT

  • Eclipse Foundation - Mosquitto 프로젝트

  • IBM Developer - MQTT 소개

  • HiveMQ - MQTT Essentials

  • IETF - MQTT v5.0 표준 (RFC 9114)

  • NAVER D2 - MQTT 이해하기

리비전 정보

버전r1
수정일2026.02.14 23:11
편집자unisquads
편집 요약AI 자동 생성