MQTT란 무엇인가요?
MQTT는 머신 대 머신(M2M) 통신에 사용되는 표준 기반 메시징 프로토콜 또는 규칙 세트입니다.
스마트 센서, 웨어러블 및 기타 사물 인터넷(IoT) 디바이스는
일반적으로 리소스 제약이 있는 네트워크를 통해 제한된 대역폭으로 데이터를 전송하고 수신해야 합니다.
이러한 IoT 디바이스는 MQTT를 데이터 전송에 사용하는데,
구현이 쉽고 IoT 데이터를 효율적으로 전달할 수 있기 때문입니다.
MQTT는 디바이스에서 클라우드로, 클라우드에서 디바이스로의 메시징을 지원합니다.
MQTT 특징
MQTT 브로커와 연결을 요청하는 클라이언트는 TCP/IP 소켓 연결을 한 후 명시적으로
연결이 끊어지면 재접속 가능
MQTT의 발행-구독 메시징 패턴은 오로지 브로커를 통해서만 통신할 수 있으며
그렇기에 일대일, 혹은 일대다의 통신이 모두 가능하다.
0: 최대 1회 전송. Topic을 통해 메시지를 전송할 뿐 보장은 하지 않는다. (보낸 다음 잊어버림)
1: 최소 1회 전송. 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송한다.
2: 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장한다.
3. 이 필드는 기반이 되는 TCP/IP 데이터 전송의 처리에 영향을 주지 않으며, MQTT 송신자와 수신자 간에만 사용된다.
4. 메시지는 글자 수 제한이 없으므로, 긴 메시지나 JSON 포맷 또는 파일도 전송이 가능하다.
6. 0 ~ 1 정도의 QoS를 사용하며 메시지 손실의 위험은 상위 어플리케이션 차원에서 관리하는 방법이 널리 쓰이고 있다.
MQTT 원리
공간 분리
게시자와 구독자는 서로의 네트워크 위치를 모르며 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
https://aws.amazon.com/ko/what-is/mqtt/
'개인 공부' 카테고리의 다른 글
HTTP, Socket 통신의 차이 (0) | 2022.12.15 |
---|---|
Protocl Buffers (프로토콜 버퍼) 란? (0) | 2022.10.21 |
Bluetooth Low Energy (BLE) 개념 정리 (0) | 2022.10.17 |
Serial 통신 ( 직렬통신 ) (0) | 2022.09.27 |
Android - USB Serial 통신 ( AOA - Android Open Accessory) (0) | 2022.09.19 |