[https://jeongchul.tistory.com/296#:~:text=MQTT의 구조,브로커%2C 구독자로 구성됩니다.](https://jeongchul.tistory.com/296#:~:text=MQTT의 구조,브로커%2C 구독자로 구성됩니다.)

다음으로 유연성과 확장성 부분에서는 이벤트 방식을 사용하여 다수의 사용자와 디바이스를 지원하며, 응용코드의 변경 없이도 기능 확장이 가능하다는 특징이 있습니다. 마지막으로 생산성 부분에서는 탐지, 저장, 전달, 발행/구독 기능을 제공하는데, 별도의 응용 로직이 필요 없고, 간단한 개념으로 만들어지므로 개발자의 학습이 용이합니다.

3. MQTT의 구조

MQTT의 구조에 대해 학습하도록 하겠습니다. MQTT는 발행/구독 방식의 메시지 큐(Message Queue)로, 원격 검침기가 측정한 데이터를 송신하고 수신하기 위해 그림과 같이 발행자, 토픽, 브로커, 구독자로 구성됩니다. 일반적인 구조는 발행자가 토픽을 발행하면 브로커가 이를 중개하고, 구독자는 브로커를 통해 관심 있는 토픽을 구독하는 것입니다. 발행자와 구독자가 직접 메시지를 주고받지 않기 때문에 비동기 방식이면서, 메시지 큐 방식, 발행/구독, 혹은 출판/가입 방식이라고도 합니다.

오늘의 핫 이슈! 오늘의 핫 이슈는 화분을 관리하는 앱입니다.

화분의 센서가 온도, 습도, 조도에 대한 데이터를 만들어 토픽을 발행합니다. 발행된 토픽은 라즈베리파이를 통해 MQTT 브로커에 전달됩니다. 그리고 브로커는 화분관리 앱을 설치한 스마트폰으로 토픽을 전달하여, 사용자는 화분이 발행한 토픽을 구독합니다. 사용자는 구독된 토픽으로 화분의 정보를 알고 관리할 수 있습니다. 스마트폰 앱으로 토픽을 발행하면, MQTT브로커에 전달이 되고, 브로커는 다시 라즈베리파이 통신을 통해 하드웨어인 아두이노에 전달합니다.

신호를 받은 아두이노가 조명을 ON/OFF하는 등 화분관리에 필요한 동작을 하게 됩니다.

토픽에 대해 살펴보겠습니다. 발행과 구독은 토픽을 기준으로 작동합니다. 토픽은 슬래시(/)를 이용해서 계층적 구조를 가지는데, 주제들을 파일 시스템 형식으로 나눌 수 있어서 좀 더 효율적인 관리가 가능합니다. 예를 들어, 컴퓨터의 다양한 상태를 측정하는 센서를 토픽으로 구성한다면, 센서 / 노드 / 온도나 입출력 등의 센싱 데이터의 종류, / 컴퓨터 부품이나 데이터 연결 상태 등의 계층을 만들 수 있습니다. MQTT는 메시지 버스 시스템입니다. MQTT 브로커가 메시지 버스를 만들고 발행자들로 받은 메시지를 여기에 흘려보내면, 버스에 붙은 애플리케이션들이 메시지를 읽어갑니다.

메시지 버스에는 다양한 주제의 메시지들이 흐를 수 있는데, 메시지를 구분하기 위해서 토픽을 이름으로 하는 메시지 채널을 만드는 것입니다.

따라서 구독자들은 자신이 원하는 토픽만을 선택하여 메시지를 전달받을 수 있습니다. QoS는 Quality of Service의 약자로, MQTT에서 발행/구독되는 메시지의 신뢰성을 위해 제공되며, 이로 인해 반드시 전달되어야 하는 중요 메시지에 대한 전달을 보장하고 있습니다. QoS에는 0, 1, 2 세 가지 레벨이 있는데, QoS 0 레벨은 메시지가 최대 1번 전달되며, 전달 여부는 확인하지 않기 때문에 유실 가능성 있습니다. QoS 1 레벨은 메시지가 최소 1번 전달되며, 전달 여부를 확인하지만, 중복 전달 가능성이 있습니다. QoS 2 레벨은 메시지가 단 한 번, 정확하게 전달됩니다.