CS + 인프라/Messaging

[Messaging] MQTT 이해하기 - 1탄 : MQTT란 무엇인가? + mqtt introduction

공대키메라 2026. 4. 14. 21:30

필자는 사실 messaging에 대해 매우 궁금했다.

 

그리고 복잡한 상황에서 어떻게 대량의 메시지를 처리할 수 있는지를 좀 보려던 찰나, IoT/로복/자율주행의 표준 프로토콜로 사용되는 MQTT를 알게 되었고, 이를 학습하고 정리하려고 한다.

 

그리고 글을 읽다보면 topic 이나 subscriptions같은게 나오는데 편한거는 토픽, 너무 길면 구독이라고 할 것이다.

 


목표

1. MQTT에 대해 이해한다. 


 

1. MQTT: The Standard for IoT Messaging

이미 MQTT 공식 사이트를 방문하니 정보가 쏟아진다.

 

MQTT는 사물 인터넷(IoT)을 위한 OASIS 표준 메시징 프로토콜입니다. 

 

매우 가벼운 발행/구독 메시징 전송 방식으로 설계되어 코드 용량이 작고 네트워크 대역폭 사용량이 최소화된 상태에서 원격 장치를 연결하는 데 이상적입니다. 

 

현재 MQTT는 자동차, 제조, 통신, 석유 및 가스 등 다양한 산업 분야에서 널리 사용되고 있습니다.

 

 

https://mqtt.org/

 

장점을 정리하면 다음과 같다. 

 

1. Lightweight and Efficient (가볍고 효율적임)

2. Bi-directional Communications (양방향 통신)

3. Scale to Millions of Things (수백만 개의 디바이스로 확장 가능)

4. Reliable Message Delivery (신뢰할 수 있는 메시지 전달)

5. Support for Unreliable Networks (불안정한 네트워크 환경 지원)

6. Security Enabled (보안 기능 지원)

 

다양한 산업 분야에서의 MQTT의 활용처를 소개하고 있다.

 

https://mqtt.org/use-cases

 

그래서 이제... Getting Started 를 가니 다음과 같은 모습인데... hivemq사이트로 나를 안내한다 (?)

 

 

가장 위에 MQTT Essentials를 클릭하면 HIVEMQ사이트로 필자를 안내한다.

 

https://www.hivemq.com/mqtt/mqtt-5/

 

 

MQTT5 Essentials 에 대해 해당 페이지에서 설명하고 있다.

그런데 Essentials eBook은 받으려면 회사 이메일 계정이 있어야 하는데, 그거말고 필자는 HiveMQ Documentation을 읽어보려고 한다.

 

여기 안에 "아이고~ MQTT에 대해 처음이세요? 걱정마세요! 우리가 알려드릴게요!" 하고 user-guide에서 친절하게 설명하고 있다.

 

https://docs.hivemq.com/hivemq/latest/user-guide/index.html

 

찾았다 내사랑! 찾아 왔던사랑!

 

그러면 TIP 에 있는 MQTT관련 지식들을 다 읽고 정리하는것이 해당 시리즈의 목표이다. 

 

2. An Introduction to MQTT

MQTT는 클라이언트-서버 발행/구독 메시징 전송 프로토콜입니다. 경량화, 개방형 설계, 단순성 등의 특징을 가지고 있어 구현이 용이합니다.

이러한 특징 덕분에 MQTT는 M2M(기계 대 기계) 및 IoT(사물 인터넷) 환경과 같이 코드 용량이 작거나 네트워크 대역폭이 제한적인 환경을 포함한 다양한 상황에서 사용하기에 이상적입니다.

 

MQTT는 client 입장에서 사용하기도 쉽고 굉장히 가볍게 설계되었다고 한다. 

 

낮은 대역대 혹은 저전력 환경에서도 잘 맞는다. 

 

MQTT의 기원은 1999년으로 거슬로 올라가는데, 그 내용이 궁금하면 직접 읽어보면 좋을거 같다.

 

 

필자는 MQTT 사이트에 OASIS standard라고 하길래 아... MQTT가 오아시스처럼 엄청난 획기적인 messaging이었구나! 

 

했는데.. 그게 아니라 Organization for the Advancement of Structured Information Standards의 약자라고 한다.

 

OASIS덕분에 MQTT는 라이센스 비용없이 구현될수 있다고 한다. 

 

뭐... MQTT란 그래서? MQTT는 클라이언트-서버 발행/구독 메시징 전송 프로토콜!

 

3. MQTT의 메시징 모델

Topic & Subscriptions

MQTT의 메시징 모델은 topics과 subscriptions에 기반을 둔다. 토픽(topic)은 메시지가 게시되고 구독되는 문자열이다. 

 

topic(토픽) 은 계층적이고 파일 경로처럼 슬래쉬(/)로 여러 레벨을 포함할 수 있다. (예 : myhome/kitchen/smartdishwasher)

 

subscriptions(구독)은 클라이언트가 메시지를 수신하는 데 관심이 있는 주제를 지정하는 데 사용됩니다.

 

클라이언트가 특정 토픽을 구독한다는 것은 해당 토픽에 게시되는 메시지를 수신하는 데 관심이 있음을 브로커에게 알리는 것이다.

 

그러면 브로커는 구독 정보를 추적하고 해당 토픽에 게시된 모든 메시지를 구독한 클라이언트에게 전달한다.

 

여기서 중요한 점은 클라이언트가 여러 토픽을 한번에 구독할 수도 있고, 토픽은 여러 구독자를 가질 수 있다.

(덕분에 유연하고 확장 가능함)

 

전반적으로 MQTT 메시징 모델은 토픽과 구독을 사용하여 메시지를 발행하고 구독하는 유연하고 확장 가능한 방식을 제공한다.

 

와일드카드를 사용하면 여러 관련 토픽을 단일 구독으로 구독할 수 있어 유연성이 더욱 향상된다.

 

Understanding MQTT Quality of Service (QoS) Levels for IoT Applications

MQTT는 3가지 레벨의 Quality of Service(QoS)를 지원한다. Qos 0,  Qos 1 그리고 Qos 2.

 

QoS 0 : 최대 한 번 전송을 보장. QoS에서 가장 낮은 레벨이고 메시지 손실이 생겨도 되고 메시지가 크리티컬하지 않은 경우 쓴다. 예를 들어, QoS 0 는 센서에 데이터를 보내는데, 우연한 데이터 손실은 크게 전반적인 결과에 영향을 주지 않을 수 있다.

 

QoS 1 : 적어도 한번 전송을 보장. 메시지가 확정되고 필요하면 메지를 다시 전송한다. QoS 1에서는 게시자가 브로커에게 메시지를 전송하고 브로커의 응답을 기다린 후 다음 단계로 진행. 브로커가 설정된 시간 내에 응답하지 않으면 게시자는 메시지를 재전송한다. 이 QoS 레벨은 일반적으로 메시지 손실은 허용되지 않지만 메시지 중복은 허용되는 상황에서 사용된다. 예를 들어, 명령 메시지를 장치에 전송할 때 명령 누락은 심각한 결과를 초래할 수 있지만 명령이 중복되더라도 큰 문제가 발생하지 않는 경우에 QoS 1이 적합할 수 있다.

 

QoS 2 :  정확히 한 번 전송을 보장. 메시지는 수신자가 정확히 한 번 수신할 때까지 확인 후 재전송된다. QoS 2는 최고 수준의 QoS이며, 메시지 손실이나 중복 전송이 절대적으로 허용되지 않는 상황에서 주로 사용된다. QoS 2에서는 발행자와 브로커가 2단계 확인 프로세스를 거치는데, 브로커는 수신자가 메시지를 수신하고 확인 응답을 보낼 때까지 메시지를 저장한다. 이 수준의 QoS는 일반적으로 금융 거래나 긴급 경보와 같은 중요한 메시지에 사용된다.

 

QoS의 레벨이 높으면 높을수록 더 많은 리소스를 요구하고 대기시간(latency)과 네트워크 트래픽의 증가를 초래할 수 있다.

 

Understanding MQTT Message Persistence for Reliable IoT Communication

MQTT에서 메시지 영속성은 중요한 기능이다.

 

네트워크 또는 서버 장애 발생 시 메시지가 손실되지 않도록 보장한다.

 

MQTT에서 메시지 영속성은 메시지가 구독자에게 전달될 때까지 서버에 저장함으로써 구현된다.

 

MQTT는 세가지 타입의 메시지 영속성 옵션을 제공한다. 

 

Non-persistent : MQTT의 기본 옵션.이 모드에서는 메시지가 서버에 저장되지 않으므로 서버 또는 네트워크 오류가 발생하면 손실된다. 이 모드는 메시지가 중요하지 않고 쉽게 다시 생성할 수 있는 상황에 적합.

 

Queued persistent : 이 모드에서는 메시지가 구독자에게 전달될 때까지 서버에 저장된다. 구독자가 접속할 수 없는 경우, 메시지는 구독자가 다시 연결될 때까지 대기열에 저장된다. 대기열 기반 메시지 저장 방식은 구독자가 항상 네트워크에 연결되어 있지 않거나, 구독자가 오프라인 상태일 때 전송되는 메시지를 포함하여 모든 메시지를 수신해야 하는 경우에 유용하다.

 

Persistent with acknowledgement : 이 모드는 메시지 영구 보존 수준을 최고 수준으로 제공한다. 이 모드에서는 메시지가 구독자에게 전달될 때까지 서버에 저장되며, 구독자는 메시지 수신을 확인해야 한다. 구독자가 수신을 확인하지 않으면, 수신 확인을 할 때까지 메시지가 재전송된다. 이 모드는 메시지가 구독자에게 반드시 수신되고 처리되어야 하는 경우에 유용하다.

 

MQTT에서 메시지 영구 저장을 구성하려면 MQTT 연결 처리에 사용되는 브로커 소프트웨어가 선택한 영구 저장 옵션을 지원해야 한다. 구성은 브로커의 설정 파일이나 웹 인터페이스를 통해 수행할 수 있다.

 

MQTT Security: Protecting Your IoT Devices from Cyber Attacks

보안 측면에서 MQTT는 클라이언트와 서버 간의 안전한 통신을 위해 TLS 암호화를 지원한다. MQTT 배포의 보안을 강화하기 위한 전략으로는 통신 암호화, 강력한 인증 및 접근 제어 구현 등이 있다.

 


사실 MQTT와 필자는 관계가 좀 있다.

 

이전에 성수동에 위치한 PG 스타트업에서 면접을 볼 일이 었었다.

 

그때 매장에서 쓸 소프트웨어 제품을 만드는데 필자는 IoT라는 상황에 꼳혀서 MQTT를 써야 한다 주장했는데, 지금 와서 돌아보면 똥멍청이 판단이었다.

 

ㅠㅠ...

 

MQTT관련 공식문서가 쭈욱 잘 설명되어 있는데, 해당 mqtt 소개 글 말고도 뒤에 더 많은 내용이 있다. 

 

아무래도 단순히 번역기를 돌려서 정리하기보다는 내 말로 좀 축약해서 정리하고 이를 기억하는게 좋을것 같다.

 

출처:

https://mqtt.org/

http://www.steves-internet-guide.com/mqtt/

https://docs.hivemq.com/hivemq/latest/user-guide/index.html

https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt/