Protocol

[Protocol]MQTT 기초 이론 (이 글 하나만 보면 됨)

욘두로이드 2024. 3. 29. 20:56

 

MQTT란?

머신 대 머신 통신에 사용되는 게시/구독 기반 메시징 프로토콜이다.


스마트 센서, 웨어러블 및 기타 사물 인터넷 디바이스는 리소스 제약이 있는 네트워크를 통해 제한된 대역폭으로 데이터를 전송하고 수신한다.

 

여기서 MQTT를 사용하면 구현이 쉽고 데이터를 효율적으로 전달할 수 있기 때문에 많이 사용하고 있다.

이제부터 왜 그런지 설명해보겠다.

역사

MQTT 프로토콜은 1999년에 정유 및 가스 산업에서 사용할 목적으로 발명되었다. 최소한의 대역폭과 최소한의 배터리 손실을 지원하는 프로토콜로 위성을 통해 정유 파이프라인을 모니터링할 수 있어야 했기 때문이다.

 

처음에 이 프로토콜은 Message Queuing Telemetry Transport로 알려졌는데, IBM 제품인 MQ 시리즈가 그 초기 단계를 처음으로 지원했기 때문이다.

2010년에 IBM은 MQTT 3.1을 모든 사용자가 구현할 수 있는 개방형 무료 프로토콜로 릴리스했습니다. 이후 유지 관리를 위해 2013년에 Organization for the Advancement of Structured Information Standards(OASIS) 사양 기구에 제출되었고 2019년에는 OASIS에 의해 업그레이드된 MQTT 버전 5가 릴리스되었다. 이제 MQTT는 더 이상 약어가 아니라 프로토콜의 공식 이름으로 여겨진다. 

 

기본원리

MQTT 프로토콜은 게시/구독 모델의 원칙을 기반으로 작동한다.
전통적인 네트워크 통신에서는 클라이언트와 서버가 서로 직접 통신한다.
클라이언트가 서버의 리소스 또는 데이터를 요청하면 서버가 이를 처리한 후 응답을 다시 보낸다. 
그러나 MQTT는 게시/구독 패턴을 사용하여 메시지 게시자(Publisher)와 메시지 수신자(Subscriber)를 분리한다.
대신에 메시지 브로커라고 하는 제3의 구성 요소가 게시자와 구독자 간의 통신을 처리한다.
이 브로커가 하는 일은 게시자로부터 수신되는 모든 메시지를 필터링하고 구독자에게 직접 배포하는 것이다.

 

 

이미지출처:https://nitin-sharma.medium.com/getting-started-with-mqtt-part-1-a3c365e3a488

 

위 이미지에 나타난것 처럼 브로커가 중간에서 수신자와 발신자를 효과적으로 분리해준다.

 

시간 분리
게시자와 구독자는 서로의 네트워크 위치를 모르며 IP 주소 또는 포트 번호와 같은 정보를 교환하지 않는다.

공간 분리
게시자와 구독자는 동시에 실행되거나 네트워크를 통해 연결되지 않는다.

동기화 분리
게시자와 구독자는 서로를 중단시키지 않고 메시지를 전송하거나 수신할 수 있다. 구독자는 게시자가 메시지를 전송 할 때 까지 기다리지 않아도 된다.

 

MQTTT의 특징

가볍다

가장 작은 MQTT 제어 메시지는 2바이트로 매우 작다.
MQTT 메시지 헤더도 작기 때문에 네트워크 대역폭을 최적화할 수 있다.

 

높은 신뢰도

QoS(Quality of Service)를 정의하여 IoT 사용 사례에 필요한 신뢰성을 보장한다.

 

0 : 메세지는 한번만 전달되며, 전달이후의 수신과정을 체크하지 않는다.
즉, QoS 가 0으로 설정되면 해당 메시지는 딱 한번만 전송하고 해당 내용을 잊어버린다. 한번 보내긴 하지만 정말로 보내졌는지 아니면 실패했는지 여부를 체크하지 않고 이 메시지에 대한 정보는 삭제된다. Qos 가 0으로 설정되어 있다면 메시지를 받지 못하는 클라이언트가 생길 수 있다는 말이 된다.


 1 : 메세지는 한번 이상 전달되고, 핸드셰이킹 과정을 추적하나, 엄격하게 추적하지 않기 때문에 중복수신의 가능성이 있다.즉, QoS 가 1로 설정되면 해당 메시지는 최소 1번 이상은 클라이언트로 전송됨을 보장한다. 메시지가 정확히 클라이언트에게 전송되기는 하지만 그게 2번 이상 전송 될 수 있다는 의미이다.


 2 : 메세지는 한번만 전달되고, 핸드셰이킹의 모든 과정을 체크한다.
즉, QoS 가 2로 설정되면 해당 메시지는 정확히 딱 1번 클라이언트로 전송됨을 보장한다. 

 

구성요소

MQTT 클라이언트

서버부터 MQTT 라이브러리를 실행하는 마이크로컨트롤러에 이르는 모든 디바이스. 
메시지를 보내는 경우 게시자 역할을, 메시지를 수신하는 경우 수신자 역할. 기본적으로 네트워크를 통해 MQTT를 사용하여 통신하는 모든 디바이스를 MQTT 클라이언트 디바이스라고 할 수 있다.

 

MQTT 브로커

여러 클라이언트 간의 메시지를 조정하는 백엔드 시스템. 메시지 수신 및 필터링, 각 메시지를 구독하는 클라이언트 식별, 메시지 전송 등과 같은 작업을 담당. 


또한 다음과 같은 태스크도 처리.

1.MQTT 클라이언트 권한 부여 및 인증
2.추가 분석을 위해 다른 시스템으로 메시지 전달
3.누락된 메시지 및 클라이언트 세션 처리

 

MQTT 연결

클라이언트는 CONNECT 메시지를 MQTT 브로커로 보내 연결을 시작
브로커는 CONNACK 메시지로 응답하여 연결이 설정되었음을 확인
클라이언트와 브로커는 모두 TCP/IP 스택이 있어야 통신할 수 있다. 
클라이언트는 서로 연결되지 않으며 브로커에만 연결.

 

연결순서

1. 클라이언트가 MQTT 브로커와의 연결설정
2. 연결되면 클라이언트에서 메시지를 게시하거나 특정 메시지를 구독하거나 혹은 둘 다 수행.
3. 브로커는 메시지를 수신한 후 메시지에 관심이 있는 구독자에게 메시지를 전달.

 

MQTT Topic

‘Topic’이라는 용어는 MQTT 브로커가 MQTT 클라이언트를 위한 메시지를 필터링할 때 사용하는 키워드.
토픽은 파일 또는 폴더 디렉터리와 유사한 계층 구조로 정렬.

 

예를 들어 여러 층으로 된 주택에서 작동하는 스마트 홈 시스템이 있다. 각 층에는 서로 다른 스마트 디바이스가 있다. 이 경우 MQTT 브로커는 주제를 다음과 같이 정렬 가능.
ourhome/groundfloor/livingroom/light
ourhome/firstfloor/kitchen/temperature

 

보안

MQTT 통신은 SSL 프로토콜을 선택적으로 사용하여 전송되는 민감한 데이터를 보호할 수 있다.
또한 OAuth, TLS1.3 등 고객 관리형 인증서 및 기타 최신 인증 프로토콜을 사용하여 디바이스와 사용자를 인증할 수 있다.

 

 

이제 어디가서 "MQTT? 그거 나 알아!" 할 수 있다.

 

다음 포스팅에서는 위에 서술한 이론을 바탕으로 안드로이드 앱개발에 응용할 수 있도록 직접 Broker와 Client를 간단하게 구현해보도록 하겠다.

 

다음 포스팅

2024.04.06 - [Protocol] - Android MQTT Client 구현 + Mosquitto Server on Window

 

Android MQTT Client 구현 + Mosquitto Server on Window

이전 포스팅에서 다룬 이론을 토대로 MQTT서비스를 직접 구현해 보도록 하겠습니다. 2024.03.29 - [Protocol] - MQTT 기초 이론 (이 글 하나만 보면 됨) MQTT 기초 이론 (이 글 하나만 보면 됨) MQTTT란? MQTT는

dev-yangkj.tistory.com

 

 

 

 

 

 

이 글은 다음 링크의 글을 참고하고 정리하여 작성하였습니다.

https://aws.amazon.com/ko/what-is/mqtt/
https://jtm0609.tistory.com/121

https://nitin-sharma.medium.com/getting-started-with-mqtt-part-1-a3c365e3a488

 

Getting Started with MQTT — Part 1

This tutorial is first part of three-part tutorial series on “Getting Started with Mqtt” and will cover basic concepts of Mqtt

nitin-sharma.medium.com

 

[Android] MQTT 통신

MQTT란? MQTT(Message Queueing Telemetry Transport)는 2016년 국제 표준화된 발행(Publish)-구독(Subscribe) 기반의 메시지 송수신 프로토콜로 최소한의 전력과 패킷으로 통신합니다. 따라서 IOT와 모바일 어플리케

jtm0609.tistory.com

 

MQTT란 무엇인가요? - MQTT 프로토콜 설명 - AWS

MQTT는 머신 대 머신 통신에 사용되는 표준 기반 메시징 프로토콜 또는 규칙 세트입니다. 스마트 센서, 웨어러블 및 기타 사물 인터넷(IoT) 디바이스는 일반적으로 리소스 제약이 있는 네트워크를

aws.amazon.com

 

 

'Protocol' 카테고리의 다른 글

Matter 약어 및 용어 정의  (0) 2025.01.15
Matter가 뭔가요?  (2) 2025.01.15