MQTT
: Message Queuing Telemetry Transfer
- 디바이스 간 최소한의 전력과 패킷량으로 통신하기 위해 개발된 프로토콜
- 원격 제어 및 측정 목적
- M2M(Machine to Machine),IoT(Internet of Things) 방식의 사물 간 통신에 적합
- 산업 분야에서는 주로 온도,습도,기압,조명,이산화탄소 등의 IoT 센서들이 그 정보를 주기적으로 Publish 하는 데에 사용
요구조건
- 실시간 푸시 전송
- 전력사용 최소화
- 비동기 메시징
- 신뢰성
경량화
- 경량 메시지 포맷
- 80~100kb 정도의 메모리 크기
유연성,확장성
- 다수의 사용자와 디바이스 지원
- 응용코드 변경없이 기능 확장 가능
MQTT의 구조
MQTT 브로커를 중심으로 Publisher(발행자->발신자)가 토픽을 발생하면 브로커가 이를 중개하고, Subscriber(구독자->수신자)는 관심있는 토픽을 구독하는 구조
발행자와 구독자는 서로 간에 직접 메시지를 주고받지 않음(비동기, 메세지 큐 방식)
<토픽이란?>
house/bedroom/temperature
: 집의 침실의 온도계 센서
house/+/temperature
: 집의 모든(+) 방의 센서
+
: 해당 레벨의 와일드카드
house/bedroom/#
: 집의 침실의 모든(#) 센서
#
: 하위 레벨 모두를 지칭하는 와일드 카드
<Messge Queue(MQ)란?>
프로세스 및 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법
더 큰 개념으로는 메시지 지향 미들웨어(Messge Oriented Middleware : MOM)을 구현하는 시스템
MOM : 비동기 메시지를 사용하는 응용 프로그램 간의 데이터 송수진
MQTT 메세지 포맷
- 고정헤더(Fixed Header):메세지 유형 정의
메세지 타입:연결 및 Publish, Subscribe,Ping 등 14가지 유형으로 통신
DUP 플래그:중복된 메세지인지, 처음 보낸 메시지인지 표시
QoS 레벨:서비스의 품질향상을 위한 방법->전송된 메세지의 확인응답을 보장
Retain:설정 시 새로운 구독자는 발행자의 발행을 기다리지 않고 즉시 최신 정보를 취함
Remaining Length:전체 메세지의 크기를 계산(최대 메세지 크기 256mb 제한)
- 가변 헤더(variable Header):프로토콜 이름과 저번, 토픽 이름 정의
- 페이 로드(Payload):실제 전송되는 메세지
MQTT 메세지 타입
- PUB = Publisher
- SUB = Subscriber
- BRO = Broker
QoS(Quality of Service)
MQTT 구성도
원격에 있는 현장의 온도(좌측 MQTT Gateway)를 측정하여 일정 수준에서 벗어나는 이상현상을 발생 시 경고를 알리고 즉시 대응할 수 있는 과정
MQTT 브로커 구축방법
- PC에 MQTT 브로커 설치
MQTT 브로커 역할을 해줄 소프트웨어를 설치
- Mosquitto(이클립스)
- RSMB(IBM개발자 그룹)
- RabbitMQ(wmWare)
- Mqtt.js, eMQTT(GitHub)
- ActiveMQ(Apache)
- Mosca(node.js)
- MQTT 플랫폼 서비스 이용
여러 IoT 플랫폼 업체에서 제공하는 MQTT서비스(부분 유료화)
- AWS(Amazon)
- Mosquito
- IBM MQTT
- Google Cloud
- Cloud MQTT
- MQTT 브로커 제품 이용
MQTT 브로커를 자체 구축할 수 있는 제품으로 사용자 환경에 맞게 클라이언트 수를 무한대로 운영 가능