MQTT 프로토콜

JeungJoo Lee
3 min readSep 28, 2020

--

MQTT 이란?

Message Queue for Telemetry Transport 의 약자임

TCP/IP 프로토콜 기반 위에서 작동하고 IoT 기기를 위해 낮은 전력, 낮은 대역폭과 패킷량으로 통신하는 프로토콜이다. 기존 Pub/Sub 의 경량 프로토콜이라고 생각하면 좋을 듯하다. 가볍다 라는 장점은 존재하지만 QoS(서비스 품질)에는 제약이 있다. 저전력/소규모 디바이스를 위한 통신 프로토콜에 적합하기 때문에 IoT 에 적합한 프로토콜이다.

QoS란?

Quality of Service 의 약자로 서비스의 품질이라는 뜻을 내포하고 있고 총 3 단계를 지원하게 된다.

  • 0 단계 : Topic 을 통해 Publisher가 최대 1회의 메시지 전송하는데 꼭 Subscriber 가 받는 다는 보장을 해주지 않음
  • 1 단계 : 최소 1회의 전송하고 Subscriber 가 message 를 받았는지 불확실하면 정해진 횟수 만큼 다시 재전송 ( 중복 위험 )
  • 2단계 : Subscriber 가 message 를 정확히 한 번에 수신할 수 있도록 보장함

Use Cases

Facebook Messanger, 우아한 형제들 ( 지금 사용하는지는 모르겠음 )

우아한 형제들 사례 ( 2017.08.11 )

기존 API Polling → MQTT 프로토콜로 변경함.

MQTT 적용을 통한 중계시스템 개선 — 우아한형제들 기술 블로그

MQTT Pub/Sub/Broker 구조

TCP 기반의 HTTP 프로토콜에서 사용하는 Client ↔서버 통신 방식이 아닌 아래와 같은 Broker, Publisher, Subscriber 의 구조로 되어있다.

MQTT Broker 의 역할

Network 가 단절 되지 않는 한 Socket 통신처럼 계속 디바이스와 연결을 MQTT Broker 가 Client 와 맺고 있음. 연결이 끊어진 이후에 계속 재접속을 지원하기 때문에 State 상태가 유지가 됨 또한 Cleint 에서 발생하는 Topic 별 message 를 받거나 Broadcasting 하기 위해 heartbeat check 을 클라이언트들에게 하는 역할을 담당함

Topic 발행(Publication) 과 구독(Subscription)

개설된 Topic 에 message 를 Pub 역할을 하는 클라이언트가 발행하면 Sub 역할을 하는 클라이언트가 해당 Topic 을 수신하여 처리할 수 있다. 1:N 1:1 메시지 전송이 가능하다.

클라이언트 개발을 위한 Library

클라이언트 개발을 위해 NodeJS, Python, Java, C 등 다양한 언어로 제공되고 있고 클라이언트 라이브러리 뿐만 아니라 Broker 또한 구성을 할 수 있도록 Library가 제공 된다. 대부분 유료의 경우 QoS 2단계를 지원하고 보통 QoS 1단계 까지만 지원한다.

MQTT Broker 기준으로 한 클라이언트 들의 도식화

--

--

JeungJoo Lee
JeungJoo Lee

Written by JeungJoo Lee

GreenData Dev Reader / Full Stack Engineer

Responses (1)