622. MQTT (Message Queuing Telemetry Transport) - 브로커 중심 경량 메시지
핵심 인사이트: 전 세계 수백만 개의 온도 센서들이 1초마다 스마트폰(사용자)들에게 직접 온도를 보고한다면 스마트폰은 터져버릴 것이다. MQTT는 중간에 '브로커(우체국)'를 둔다. 센서는 브로커에게 "강남 온도 24도"라고 던져놓고 기절하고, 강남 온도에 관심 있는 스마트폰들만 브로커에게 "강남 온도 새로 오면 나한테 줘!"라고 구독(Subscribe)하는 완벽한 중앙 분산형 시스템이다.
Ⅰ. MQTT의 개념
- 개념: IBM이 개발하고 현재 OASIS 표준으로 관리되는, TCP/IP 기반의 초경량 발행-구독(Publish-Subscribe) 기반의 메시징 프로토콜입니다. (통신 포트: 1883)
- 목적: 대역폭이 극도로 제한되고 연결이 툭하면 끊기는 열악한 무선 네트워크 환경(M2M, IoT)에서, 배터리를 아끼면서 신뢰성 있게 메시지를 주고받기 위해 탄생했습니다. (HTTP의 무거운 헤더를 걷어낸 초경량 포장지)
Ⅱ. 핵심 아키텍처 (Pub/Sub 모델) 🌟
클라이언트끼리(센서와 폰) 서로 IP 주소를 몰라도 됩니다. 모든 대화는 중간의 '브로커'를 통해 이루어집니다.
- Broker (브로커 / 서버): MQTT 네트워크의 심장입니다. 세상의 모든 편지(메시지)를 모아서, 그 편지를 읽고 싶어 하는 사람들에게 알아서 분류해 나눠주는 중앙 우체국입니다.
- Publisher (발행자 / 센서): 온도계(센서)는
Seoul/Gangnam/Temp라는 '주제(Topic)' 팻말을 붙여 브로커에게 현재 온도 데이터(24도)를 휙 던지고(Publish) 바로 잠에 듭니다. - Subscriber (구독자 / 스마트폰 앱): 사용자는 브로커에게 "나는
Seoul/Gangnam/Temp주제의 편지만 챙겨서 보내줘"라고 구독(Subscribe) 신청을 해둡니다.
Ⅲ. 강력한 신뢰성 보장: QoS (Quality of Service) 3단계 🌟
네트워크가 불안정해서 메시지가 날아갈까 걱정되시나요? MQTT는 편지의 중요도에 따라 배달 보장 등급(QoS)을 3단계로 제공합니다.
- QoS 0 (At most once, 최대 한 번): "보내고 잊기(Fire and Forget)". 메시지를 던지기만 하고 도착했는지 확인(ACK)을 안 합니다. 유실될 수 있지만 가장 전기를 적게 먹습니다. (예: 1초마다 보내는 센서 데이터)
- QoS 1 (At least once, 최소 한 번): 브로커가 "잘 받았다"고 확인(PUBACK)을 줄 때까지 계속 다시 보냅니다. 확실히 도착하긴 하지만, 브로커가 편지를 '중복'으로 2~3번 받을 수도 있습니다.
- QoS 2 (Exactly once, 정확히 한 번): "가장 안전함". 복잡한 4단계 핸드셰이크를 거쳐서, 메시지가 절대로 유실되지도 않고 절대로 중복되지도 않게 딱 1번만 완벽하게 전달합니다. 전기를 가장 많이 먹습니다. (예: 밸브 잠금 같은 치명적 제어 명령)
Ⅳ. LWT (Last Will and Testament, 유언장) 기능
- 온도 센서가 배터리가 방전되어 갑자기 죽으면, 구독 중인 스마트폰은 센서가 죽은 건지 온도가 안 변하는 건지 알 길이 없습니다.
- 센서가 처음 브로커에 붙을 때 "내가 만약 비정상적으로 연결이 끊기면, 구독자들에게 '나 죽었어'라는 유언장을 대신 뿌려줘"라고 유언(LWT)을 남겨놓을 수 있습니다.
📢 섹션 요약 비유: HTTP 통신이 내가 일일이 친구 집에 전화를 걸어 "온도 몇 도야?" 하고 물어보는 피곤한 방식이라면, MQTT는 단체 카톡방(브로커) 시스템입니다. 온도계 친구는 톡방에 "24도" 한 줄만 딱 치고 나가버립니다(Publish). 그러면 그 톡방에 들어와 알림을 켜둔(Subscribe) 수만 명의 사람들이 동시에 그 메시지를 편하게 받아보는 효율 끝판왕 시스템입니다.