MQTT 란?

Subin Park·2022년 6월 20일
0

MQTT 란?

MQTT는 최소한의 전력과 패킷량으로 통신하는 경량 메시지 전송 프로토콜이다. 통신하는데 많은 전력이 들지 않고 대역폭이 제한된 통신환경에 최적화 되어 있기 때문에 사물 통신(M2M), 사물 인터넷(IoT)에 주로 사용된다.

Broker / Publisher / Subscriber

MQTT는 기본적으로 Broker, Publisher, Subscriber 3가지 요소로 구성되어 있다.

  • Broker(중개자) : Publisher와 Subscriber 사이에서 받은 메세지를 topic에 맞게 전달하는 역할을 맡고 있다.
  • Publisher(발행자) : Broker에게 특정 Topic에 대한 메세지를 발행(pub)한다.
  • Subscriber(구독자) : 특정 Topic을 구독(sub)해 해당 Topic의 메세지를 전달받는다.

MQTT의 전체적인 플로우는 위의 그림과 같다.

Publisher가 특정 Topic에 메세지를 발행한 뒤 Broker는 해당 메세지를 받는다. 해당 Topic을 구독하고 있는 Subscriber는 polling 방식을 통해 주기적으로 Broker에 있는 Topic에 대한 메세지를 요청하고 Broker는 해당 메세지를 Subscriber에게 전달한다.

이와같이 단일 Topic에 여러 Subscriber가 구독할 수 있는 구조 덕분에 MQTT는 1:N 또는 N:N의 통신이 가능하다.

Topic

Topic. 화제이다. 말그대로 무수한 메세지들의 화제를 뜻한다. 메세지의 종류를 구분짓는 구분자라고 생각하면 된다.
Topic은 슬래시(/) 형태로 구분되는 계층 구조로 구성되어 있다.

예를 들어보자.

food / spaghetti / cream

위와 같은 Topic은 음식 중 스파게티 그 안에 크림 스파게티만 구독하고 있다고 보면 된다.

만약 음식의 모든 크림 음식을 구독하고 싶다면 어떻게 해야할까?

food / + / cream

스파게티가 위치하던 부분을 플러스(+) 문자를 사용해 1개의 토픽을 임의의 토픽으로 대체하여 모든 크림 음식을 구독할 수 있다.

마지막으로 샵(#) 문자를 통하여 2단계 이상의 하위 토픽을 와일드카드 기능으로 대체가 가능하다.

food / spaghetti / #

QoS (Quality of Service)

MQTT의 서비스 품질을 뜻한다. 이는 메세지를 발행/구독 할 때 메세지의 중요도에 따라 전달 확인 등의 과정을 거치는 기능을 한다. 크게 3단계로 이루어져 있다.

  • Level 0 : 메세지는 한번만 전달되며 이후 수신과정을 체크하지 않기 때문에 전달 성공 여부는 확인하지 않는다.
  • Level 1 : 메세지는 최소 한번 이상 전달되며 메세지 전달 성공 여부를 Publisher에게 다시 전송한다. 만약 Publisher가 전달 성공 여부를 받지 못했을 경우 해당 메세지를 중복해서 다시 발행하게 된다.
  • Level 2 : 메세지는 반드시 한번만 전달된다. Level 1과 다르게 해당 레벨에서는 Broker가 Subscriber에게 메세지를 보낸 사실을 기억하고 있다. 만약 Publisher가 메세지를 발행 한뒤 성공 응답 여부를 받지 못해 재발행을 했을 시 Broker는 Subscriber에게 같은 메세지를 전송하지 않고 Publisher에게 다시 성공 응답 여부를 전달하게 된다.

0개의 댓글