Skip to main content

MQTT 프로토콜

· 13 min read
hwayoung kim
소주같은 개발자

MQTT는 Message Queuing Telemetry Transport의 약자로, IoT 기기들 간의 메시지 전송을 위한 프로토콜입니다.

MQTT의 기본 작동 방식

MQTT는 발행/구독(Publish/Subscribe) 모델을 사용합니다. 이 모델에서 MQTT 브로커는 클라이언트들이 메시지를 발행하고, 해당 메시지를 수신할 클라이언트들에게 전달하는 중간 매개체 역할을 합니다.

MQTT 클라이언트들은 브로커에게 구독(subscribe) 요청을 보내고, 브로커는 구독한 클라이언트들에게 메시지를 전달합니다. 클라이언트들은 발행(publish) 요청을 보내고, 브로커는 해당 메시지를 구독한 클라이언트들에게 전달합니다.

MQTT의 특징

  • 경량 프로토콜: MQTT는 TCP/IP 프로토콜 위에서 작동하며, 네트워크 대역폭을 최소화하기 위해 최적화되어 있습니다.
  • QoS(Quality of Service) 지원: MQTT는 3가지 QoS 레벨을 지원합니다. 이를 이용해 클라이언트들 간의 메시지 전송에 대한 신뢰도를 조절할 수 있습니다.
  • 유연한 토픽(Topic) 구조: MQTT는 클라이언트들이 메시지를 주고 받을 때, 주제(Topic)를 이용해 메시지를 구분합니다. 이를 이용해 클라이언트들 간의 데이터를 분류하고 처리할 수 있습니다.
  • 안정성: MQTT는 장애 발생 시 메시지 전송을 보장하기 위해 다양한 기능을 제공합니다. 예를 들어, 브로커 간의 데이터 동기화를 통해 장애 발생 시 메시지 전송을 보장할 수 있습니다.

MQTT의 활용

MQTT는 IoT 분야에서 다양하게 활용됩니다. 예를 들어, 스마트 홈, 스마트 시티, 자동차, 산업 자동화 등에서 사용됩니다. MQTT는 경량 프로토콜이기 때문에, 제한된 대역폭과 연결성이 낮은 환경에서도 사용이 가능합니다.

MQTT 프로토콜의 구성요소

MQTT 프로토콜은 다음과 같은 구성요소를 포함합니다.

1. Broker

MQTT 브로커는 메시지를 발행하고, 해당 메시지를 구독한 클라이언트들에게 전달하는 중간 매개체 역할을 합니다. 브로커는 MQTT 클라이언트들 간의 통신을 조율합니다.

2. Publisher

MQTT 발행자는 메시지를 발행하는 클라이언트입니다. 발행자는 특정 주제(topic)에 대한 메시지를 브로커에게 전달합니다.

3. Subscriber

MQTT 구독자는 특정 주제(topic)에 대한 메시지를 수신하는 클라이언트입니다. 구독자는 브로커에게 특정 주제에 대한 구독 요청을 보내고, 해당 주제에 대한 메시지를 수신합니다.

4. Topic

MQTT에서는 메시지를 주고받을 때, 주제(topic)라는 개념을 사용합니다. 주제는 클라이언트들이 메시지를 주고받을 때, 메시지를 구분하기 위해 사용됩니다. 주제는 슬래시(/)로 분리된 문자열로 표현됩니다.

MQTT 프로토콜의 QoS(Quality of Service)

MQTT는 QoS(Quality of Service)라는 기능을 제공합니다. QoS는 클라이언트들이 메시지를 주고받을 때, 해당 메시지에 대한 신뢰도를 조절하기 위해 사용됩니다. MQTT는 다음과 같은 3가지 QoS 레벨을 제공합니다.

1. QoS 0

QoS 0은 최대 1회만 전송되며, 메시지의 전송 여부에 대한 확인 절차가 없습니다. 이는 대역폭이 낮은 환경에서 사용하기 적합합니다.

2. QoS 1

QoS 1은 최소 1회 이상 전송되며, 메시지 전송 여부를 브로커에게 확인받습니다. 이는 메시지 전송의 신뢰성을 보장하기 위해 사용됩니다.

3. QoS 2

QoS 2는 최소 2회 이상 전송되며, 메시지 전송 여부를 브로커와 클라이언트 모두 확인받습니다. 이는 높은 신뢰성이 요구되는 환경에서 사용됩니다.

MQTT의 보안

MQTT는 기본적으로 보안 기능이 탑재되어 있지 않습니다. 따라서, MQTT를 사용할 때에는 보안을 위한 추가적인 조치가 필요합니다. 이를 위해, SSL/TLS를 이용한 암호화, 사용자 인증 및 접근 제어 등의 방법이 사용됩니다.

MQTT와 HTTP 비교

MQTT와 HTTP는 모두 인터넷 프로토콜입니다. 하지만, 두 프로토콜의 사용 목적과 특징은 다릅니다.

MQTT의 사용 목적

MQTT는 IoT 기기들 간의 메시지 전송을 위한 프로토콜입니다. 따라서, 제한된 대역폭과 연결성이 낮은 환경에서도 사용이 가능하며, 경량 프로토콜로 최적화되어 있습니다.

HTTP의 사용 목적

HTTP는 웹상에서 데이터를 주고받기 위한 프로토콜입니다. 주로 웹 브라우저와 웹 서버 간의 통신을 위해 사용됩니다. 따라서, 대역폭과 연결성이 높은 환경에서 사용이 가능하며, 텍스트 기반의 프로토콜로 최적화되어 있습니다.

MQTT와 HTTP의 특징 비교

MQTT와 HTTP는 다음과 같은 특징을 가지고 있습니다.

특징MQTTHTTP
프로토콜 유형메시지 기반요청/응답 기반
연결 방식세션 기반연결 기반
통신 방식발행/구독요청/응답
대역폭 요구낮음높음
연결성 요구낮음높음
사용 목적IoT 기기 간의 메시지 전송웹상에서 데이터 주고받기
최적화경량 프로토콜텍스트 기반 프로토콜

MQTT의 장단점

장점

  • 경량 프로토콜이기 때문에, 제한된 대역폭과 연결성이 낮은 환경에서도 사용이 가능합니다.
  • 발행/구독 모델을 사용하기 때문에, 클라이언트 간의 통신이 효율적입니다.
  • QoS 레벨을 지원하기 때문에, 메시지 전송에 대한 신뢰도를 조절할 수 있습니다.
  • 유연한 토픽(Topic) 구조를 사용하기 때문에, 데이터를 쉽게 분류하고 처리할 수 있습니다.
  • 다양한 기능을 제공하기 때문에, 안정성을 보장합니다.

단점

  • 기본적으로 보안 기능이 탑재되어 있지 않기 때문에, 보안을 위한 추가적인 조치가 필요합니다.
  • HTTP와 같은 요청/응답 기반의 프로토콜보다는 구현이 복잡합니다.
  • QoS 레벨이 높아질수록 대역폭과 성능에 영향을 미칩니다.

MQTT의 활용 예시

스마트 홈

MQTT는 스마트 홈 분야에서 다양하게 활용됩니다. 예를 들어, 온도, 습도, 조도 등의 센서 데이터를 수집하고, 해당 데이터를 이용해 자동화 기능을 제공할 수 있습니다.

스마트 시티

MQTT는 스마트 시티 분야에서도 활용됩니다. 예를 들어, 공기질, 실시간 교통 정보, CCTV 등의 데이터를 수집하고, 해당 데이터를 이용해 도시의 안전과 편의를 제공할 수 있습니다.

자동차

MQTT는 자동차 분야에서도 활용됩니다. 예를 들어, 차량의 센서 데이터를 수집하고, 해당 데이터를 이용해 운전자에게 정보를 제공하거나, 자율주행 기능 등을 제공할 수 있습니다.

산업 자동화

MQTT는 산업 자동화 분야에서도 활용됩니다. 예를 들어, 공장 내의 센서 데이터를 수집하고, 해당 데이터를 이용해 생산 라인을 제어하거나, 고장 징후를 예측하는 등의 기능을 제공할 수 있습니다.

MQTT 브로커

MQTT 브로커는 메시지를 수신하고 발신하는 중간 단계로 사용됩니다. 모든 MQTT 클라이언트는 브로커에 연결하여 메시지를 발행하고 수신할 수 있습니다.

Mosquitto

Mosquitto는 Eclipse Foundation에서 제공하는 오픈소스 MQTT 브로커입니다. Mosquitto는 C로 작성되어 있으며, 경량 프로토콜을 지원하기 때문에, IoT 분야에서 많이 사용됩니다. Mosquitto는 다양한 운영체제에서 사용이 가능하며, 특히 Raspberry Pi와 같은 보드 컴퓨터에서 사용이 용이합니다.

EMQ X

EMQ X는 오픈소스 MQTT 브로커로, 다양한 프로토콜 지원과 확장성이 우수합니다. EMQ X는 Erlang 언어로 작성되어 있으며, 수백만 개의 동시 접속을 지원할 수 있습니다. EMQ X는 기업용으로 개발되었으며, IoT 분야에서 많이 사용됩니다.

결론

MQTT는 IoT 분야에서 많이 사용되는 경량 프로토콜 중 하나입니다. MQTT는 제한된 대역폭과 연결성이 낮은 환경에서도 사용이 가능하며, 발행/구독 모델을 사용하여 클라이언트 간의 통신이 효율적입니다. 하지만, 기본적으로 보안 기능이 탑재되어 있지 않기 때문에, 보안을 위한 추가적인 조치가 필요합니다. MQTT 브로커로는 Mosquitto와 EMQ X 등이 있으며, 각각의 특징에 따라 사용이 결정됩니다.