MQTT(Message Queuing Telemetry Transport)
: 경량의 메시지 프로토콜, 낮은 대역폭이나 불안정한 네트워크 환경에서도 장치 간에 메시지를 효율적으로 전달할 수 있게 설계됨
(1999년에 IBM과 유럽의 한 유틸리티 회사가 개발, IoT 장치와 서버 간의 통신을 위해 널리 사용됨)
- 퍼블리시/구독(Publish/Subscribe) 모델을 사용
- 메시지는 주제(Topic)별로 분류
- 구독자만 그 주제의 메시지를 받을 수 있다
이 모델은 중앙 서버(브로커)를 통해 작동
클라이언트는 브로커에게 메시지를 보내거나, 브로커로부터 메시지를 받는다
-> 이를 통해 다수의 수신자에게 메시지를 효율적으로 배포할 수 있다
[주요 특징]
1. 경량 프로토콜: 매우 적은 데이터 양을 사용하여 통신 가능
2. 저전력: 배터리로 구동되는 장치에 적합하도록 설계됨
3. 높은 신뢰성: 메시지의 QoS(Quality of Service) 수준을 설정하여 메시지의 신뢰성과 전달 여부 제어 가능
4. 보안: TLS/SSL을 통한 메시지 암호화 지원
-> 특히 사물인터넷 환경에서 다양한 장치와 플랫폼 간의 연결성과 데이터 전송을 간소화하고자 할 때 매우 유용한 프로토콜
MQTT 브로커는 메시지를 전달하는 중앙 서버
: 클라이언트들 사이에서 메시지를 조정하고 중개하는 역할 수행
클라이언트들은 메시지를 브로커에게 보내고, 브로커는 해당 메시지를 적절한 구독자들에게 전달한다.
[주요 기능]
1. 메시지 라우팅: 구독한 주제에 대한 메시지를 구독자에게 전달
2. 세션 관리: 클라이언트의 연결 상태를 관리, 연결이 끊긴 클라이언트를 위해 메시지를 저장하는 등의 기능 수행
3. 인증 및 권한 부여: 클라이언트의 접근 제어, 보안 통신을 위해 TLS/SSL 사용 가능
TLS (Transport Layer Security) 및 그 전신인 SSL (Secure Sockets Layer) 은 네트워크를 통해 데이터를 안전하게 전송하기 위한 암호화 프로토콜이다.
- 이 프로토콜들은 인터넷에서 데이터를 안전하게 교환할 수 있도록 설계되었으며, 특히 웹 브라우징, 이메일, 인스턴트 메시징, 그리고 VoIP와 같은 서비스에서 널리 사용된다.
- 데이터 암호화, 웹사이트에서의 신원 확인 위한 인증, 데이터 무결성 보장
MQTT 클라이언트는 MQTT 네트워크에 연결된 어떤 장치나 애플리케이션을 지칭
: 클라이언트는 메시지를 발행(publish)하거나 메시지를 구독(subscribe)할 수 있다.
MQTT 프로토콜을 사용하려면 네트워크에 연결되어 있어야 한다
: 클라이언트와 서버(브로커) 사이의 통신을 기반으로 작동하기 때문에, 네트워크 연결이 필수적
- 유선 연결: Ethernet 등을 통한 전통적인 유선 네트워크 연결
- 무선 연결: Wi-Fi, 셀룰러 네트워크(3G, 4G, LTE, 5G), 또는 다른 무선 통신 기술 통해 연결
- LPWAN 기술: 저전력 광역 네트워크(Low Power Wide Area Network) 기술을 사용하여, 대규모 IoT 네트워크에서 장치들을 서로 연결
[주요 기능]
1. 메시지 발행: 특정 주제에 메시지를 발행하여 그 주제를 구독하고 있는 다른 클라이언트들에게 정보 전달
2. 메시지 구독: 하나 이상의 주제를 구독하고, 해당 주제에 대한 메시지가 브로커로부터 도착하면 그 메시지를 받아 처리
3. 클라이언트는 서버와 통신: MQTT 프로토콜을 통해 브로커와 안정적으로 통신
TCP/IP(Transmission Control Protocol/Internet Protocol)
: 인터넷에서 데이터를 전송하기 위한 기본 통신 프로토콜
데이터를 교환을 위한 규칙과 절차의 집합을 제공, 인터넷의 작동 기반 형성
이는 두 가지 주요 프로토콜로 구성된다.
1. Transmission Control Protocol (TCP)
: 인터넷에서 데이터를 안정적으로, 순서대로, 오류 없이 전송하도록 설계된 프로토콜
2. Internet Protocol (IP)
: 데이터 패킷을 송신자에서 수신자까지 전달하는 역할 수행
IP 주소는 네트워크에서 각 장치를 식별하는 데 사용된다
TCP/IP 모델은 네 개의 계층으로 구성되어 있으며, 각 계층은 특정한 역할을 수행한다.

-> TCP/IP 프로토콜은 유연성과 확장성 덕분에 전 세계 컴퓨터와 네트워크의 표준 통신 규약으로 자리잡았다.
연결하기: 서버와의 연결 수립을 기다린 다음 노드 간 링크를 만든다.
연결 끊기: MQTT 클라이언트가 해야 할 일을 기다리고 인터넷 프로토콜 스위트 세션의 연결이 끊어지기를 기다린다.
발행하기: MQTT 클라이언트에 요청이 전달된 직후 애플리케이션 스레드에 즉시 반환한다.
부하가 늘어나는 순서에 따라 다음과 같이 분류된다:
이 필드는 기반이 되는 TCP 데이터 전송의 처리에 영향을 주지 않으며, MQTT 송신자와 수신자 간에만 사용된다.
MQTT는 M2M/IOT를 위한 프로토콜로서, 최소한의 전력과 패킷량으로 통신하는 프로토콜이다. (IoT와 모바일 어플리케이션 등의 통신에 적합)
MQTT는 HTTP, TCP 등의 통신과 같이 클라이언트-서버 구조로 이루어지는 것이 아닌, Broker-Publisher-Subscriber 구조로 이루어진다.

Publisher는 Topic을 발행(publish)
Subscriber는 Topic을 구독(subscribe)
Broker는 이들을 중재
- 단일 Topic에 여러 Subscriber가 구독할 수 있음 -> 1:N 통신 구축에 유용

MQTT에서 Topic은 /를 사용해서 구성된다 -> IoT 센서와 같은 데이터 관리에 유용
MQTT는 QoS를 제공하며, 총 3단계로 이루어진다
- 0: 메시지는 한 번만 전달되며, 전달 이후의 수신 과정 체크 X
- 1: 메시지는 한 번 이상 전달되며, 핸드셰이킹 과정을 추적하나, 엄격하게 추적 X -> 중복수신의 가능성 有
- 2: 메시지는 한 번만 전달되고, 핸드셰이킹의 모든 과정 체크
QoS의 단계가 높아질수록 통신의 품질은 향상되지만, 그에 따라 성능 저하의 가능성이 있으므로. MQTT의 QoS는 프로젝트의 특성에 따라 결정되어야 한다.
MQTT 브로커 구동하기: Mosquitto, HiveMQ, mosca, ActiveMQ, RabbitMQ
[정리]
1) 연결지향적 connection oriented
2) 브로커를 통한 통신
3) QoS
0: 최대 1회 전송, Topic을 통해 메시지를 전송할 뿐 수신한다는 보장은 X (보낸 다음 잊어버림)1: 최소 1회 전송, 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송, 메시지의 핸드셰이킹 과정을 엄밀하게 추적 X, 중복의 위험성 있다 (확인 응답을 거치는 전달)2: 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장, 메시지의 핸드셰이킹 과정 추적, 높은 품질 보장 but 성능의 희생 따른다 (보장된 전달)4) 메시지 유형
각각의 메시지의 event에 MQTT 브로커가 Notification을 주어 대응할 수 있도록 한다.
5) MQTT 동작 구조


동작순서
1. broker가 먼저 실행중이여야함
2. 관심분야를 등록(topic)
3. 메시지가 올 때까지 무한대기
subscriber(client) - topic을 등록, 구독요청 -> broker
broker <- publisher(client) - topic발행
topic이 서로 일치하는 곳으로 메세지를 보내준다.
토픽 Topic

메시지를 발행-구독하는 행위는 채널 단위로 일어난다.
이를 MQTT에서는 토픽이라 부르고, 토픽은 슬래시(/)로 구분되는 계층 구조를 갖는다.
office/firstFloor/SWoffice/temp
위 예시에서 슬래시 전후에 있는 office, firstFloorm SWoffice, temp는 모두 각각의 토픽 레벨 (Topic Level)이며, 해당 토픽은 Topic Level Seperator라고 불리는 슬래시로 구분된다.
-> 즉, 위의 토픽은 회사 1층의 SW 부서의 온도를 체크할 수 있는 토픽이다.

office/firstFloor/+/temp
위는 메시지를 구독/발행할 때 여러 개의 토픽을 한 번에 지정할 수 있도록 지원하는 와일드 카드의 예시이다.
[+] 문자는 One-Level Wild Card로, 단 한 개의 토픽을 임의의 토픽으로 대체할 수 있다.
-> 즉, 위의 토픽은 회사 1층에 있는 모든 부서의 온도를 체크할 수 있는 토픽이다.

office/firstFloor/#
[#] 문자는 Multi-Level Wild Card로, 여러 레벨의 토픽을 대체할 수 있는 와일드 카드이다.
이는 2단계 이상의 하위 토픽도 대체할 수 있으며, 무조건 매 마지막에만 사용될 수 있다.
-> 위 예시에서는 회사 1층의 모든 부서의 모든 조건(온도, 습도, 조도 등)을 체크할 수 있는 토픽이다.
$SYS/
[$] 문자로 시작하는 토픽은 시스템에 의해 사용되는 특수한 토픽이다.
이 토픽들은 [#] 문자로 지정해도 포함되지 않으며, 주로 브로커의 내부 메시지를 위해 사용된다.
5-1) 주의할 점
최상위 토픽이 [/] 문자로 시작되지 않아야 한다.
/ office / firstFloor / SWoffice / temp 이런 식으로 되지 않아야 한다. 토픽 이름에 공백 문자가 들어가면 안 된다.
[#] 문자를 이용해서 토픽 전체를 구독하지 않도록 해야 한다.
TCP/IP 프로토콜 스택은 인터넷에서 데이터 통신을 위해 설계된 프로토콜의 집합
MQTT (Message Queuing Telemetry Transport) 는 TCP/IP 프로토콜 스택 위에서 동작한다.
1) TCP/IP 기반
: MQTT는 데이터 전송의 신뢰성과 순서를 보장하는 TCP(Transmission Control Protocol) 위에서 작동
- TCP는 연결 지향적이고, 데이터가 올바르게 전송되었는지 확인하여 필요한 경우 재전송을 수행하는 기능을 제공
- 이러한 특성 덕분에 MQTT는 네트워크 연결이 불안정한 환경에서도 안정적으로 메시지를 교환할 수 있다.
2) 세션 관리
: MQTT는 TCP 연결을 사용하여 브로커와 클라이언트 간에 세션을 구축
- 이 세션은 발행/구독 모델을 통해 메시지를 교환할 때 지속적으로 유지
3) 프로토콜 레이어
: TCP/IP 모델에서 MQTT는 애플리케이션 계층에 위치
- 이 계층은 사용자의 데이터를 네트워크 서비스로 전송하는 데 필요한 프로토콜을 처리
- MQTT는 이 계층에서 작동하여, 특정 메시징 기능을 TCP/IP 스택 위에 구현
출처: 블로그 + ChatGPT
MQTT란?
MQTT란 무엇인가?
HiveMQ
OSI 7계층
MQTT 프로토콜이란
MQTT 프로토콜 분석 (1)
MQTT 프로토콜 분석 (2)