개인 공부

MQTT

Machine_웅 2022. 10. 21. 13:17
728x90
반응형

MQTT란 무엇인가요?

MQTT는 머신 대 머신(M2M) 통신에 사용되는 표준 기반 메시징 프로토콜 또는 규칙 세트입니다.

스마트 센서, 웨어러블 및 기타 사물 인터넷(IoT) 디바이스는

일반적으로 리소스 제약이 있는 네트워크를 통해 제한된 대역폭으로 데이터를 전송하고 수신해야 합니다.

 

이러한 IoT 디바이스는 MQTT를 데이터 전송에 사용하는데,

구현이 쉽고 IoT 데이터를 효율적으로 전달할 수 있기 때문입니다.

 

MQTT는 디바이스에서 클라우드로, 클라우드에서 디바이스로의 메시징을 지원합니다.

 


MQTT 특징

1) 연결지향적 (Connection Oriented)
MQTT 브로커와 연결을 요청하는 클라이언트는 TCP/IP 소켓 연결을 한 후 명시적으로
 연결을 끊거나 네트워크 사정에 의해 연결이 끊어질 때까지 상태를 유지
Live라는 하트비트와 Topic에 발행되는 메시지를 통해 연결을 유지하고 메시지 송수신을 하게 됨
연결이 끊어지면 재접속 가능
 
 
2)브로커를 통한 통신
MQTT의 발행-구독 메시징 패턴은 오로지 브로커를 통해서만 통신할 수 있으며 
개설된 Topic에 메시지를 발행하면 해당 Topic을 구독하는 클라이언트들에게 메시지를 발행할 수 있다.
그렇기에 일대일, 혹은 일대다의 통신이 모두 가능하다.
 
3)QoS (Quality of Service) - 서비스의 질을 보장해주는 레벨
0: 최대 1회 전송. Topic을 통해 메시지를 전송할 뿐 보장은 하지 않는다. (보낸 다음 잊어버림)

1: 최소 1회 전송. 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송한다. 
    메시지의 핸드셰이킹 과정을 엄밀하게 추적하지는 않으므로 중복의 위험성이 있다. (확인 응답을 거치는 전달)

2: 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장한다. 
   메시지의 핸드셰이킹 과정을 추적한다. 높은 품질을 보장하지만 성능의 희생이 따른다. (보장된 전달)

3. 이 필드는 기반이 되는 TCP/IP 데이터 전송의 처리에 영향을 주지 않으며, MQTT 송신자와 수신자 간에만 사용된다.

4. 메시지는 글자 수 제한이 없으므로, 긴 메시지나 JSON 포맷 또는 파일도 전송이 가능하다.
 
5. 0에 가까울수록 메시지 처리에 대한 부하가 줄어들고, 메시지 손실의 위험이 높아진다.
    반대로 2에 가까울수록 메시지 손실 위험을 줄어들지만 메시지 처리 부하가 급격히 늘어난다.

6. 0 ~ 1 정도의 QoS를 사용하며 메시지 손실의 위험은 상위 어플리케이션 차원에서 관리하는 방법이 널리 쓰이고 있다.
 
 

 


MQTT 원리 

푸시 기술(push technology)에서 일반적으로 사용되는 HTTP, TCP 등의 통신과 같은 클라이언트-서버 방식 대신,
메시지 broker가 사이에서 메시지를 수신하고, 송신자가 특정 메시지를 발행(publish)하고 수신자가 메시지를 구독(subscribe)하는 방식으로,
대역폭(Bandwidth), 리소스(resource) 사용이 낮은 편이고, 가볍고 간편한 프로토콜(protocol)입니다.

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

공간 분리

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

 

시간 분리

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

 

동기화 분리

게시자와 구독자는 서로를 중단시키지 않고 메시지를 전송하거나 수신할 수 있습니다.

예를 들어 구독자는 게시자가 메시지를 전송할 때까지 기다리지 않아도 됩니다.

 

 


MQTT  구성요소

 

MQTT 클라이언트
MQTT 클라이언트는 서버부터 MQTT 라이브러리를 실행하는 마이크로컨트롤러에 이르는 모든 디바이스가 될 수 있습니다. 클라이언트는 메시지를 보내는 경우 게시자 역할을, 메시지를 수신하는 경우 수신자 역할을 합니다. 

 

기본적으로 네트워크를 통해 MQTT를 사용하여 통신하는 모든 디바이스를

 MQTT 클라이언트 디바이스라고 할 수 있습니다.

 

Publisher(발행자)는 특정 Topic(화제)을 통해 Broker(중개인)에 메시지를 전송합니다.

Broker는 Publisher가 발행한 Topic을 가지고 있고, Subscriber(구독자)는 Topic 기준으로 Broker에 구독을 요청합니다.

Subscriber의 polling(주기적인 체크) 방식을 이용하여 Broker에 있는 Topic을 조회해 갑니다.

 


MQTT 브로커
MQTT 브로커는 여러 클라이언트 간의 메시지를 조정하는 백엔드 시스템입니다. 

브로커는 메시지 수신 및 필터링, 각 메시지를 구독하는 클라이언트 식별, 메시지 전송 등과 같은 작업을 담당합니다.

 또한 다음과 같은 다른 태스크도 처리합니다.
대표적인 Broker로 mosquitto, HiveMQ, Rabbit MQ, IBM MQ, Vertx, mosca, ActiveMQ 등이 있습니다.


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


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

Topic(화제)
Topic은 Publish와 Subscriber가 발행하고 구독할 수 있는 채널로 이해할 수 있습니다.
Publisher와 Subscriber는 Topic을 기준으로 메시지를 발행하거나 구독합니다. 
Topic은 문자열로 구성되어 있기 때문에 / 를 이용하여 계층적으로 구성할 수 있어서 대량의 센서 기기들을 효율적으로 관리 할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


https://www.inforad.co.kr/single-post/mqtt-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

MQTT 프로토콜을 알아봅시다

MQTT(Message Queue for Telemetry Transport) 프로토콜은 푸시 기술(push technology)에서 일반적으로 사용되는 HTTP, TCP 등의 통신과 같은 클라이언트-서버 방식 대신, 메시지 매개자(broker)가 사이에서 메시지를

www.inforad.co.kr

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

 

MQTT란 무엇인가요? MQTT 설명 - AWS

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

aws.amazon.com

 

728x90
반응형