MQTT (MQ Telemetry Transport)
IBM에서 최초로 개발한 MQTT는 텔레메트리 장치, 모바일 기기에 최적화된 라이트 메시징 프로토콜로서 더 다양한 앱과 서비스의 등장으로 HTTP등의 기존 프로토콜만으로는 커뮤니케이션의 다양한 요구사항을 수용할 수 없게 되었고, 제한된 통신 환경을 고려하여 디자인된 MQTT 프로토콜은 모바일 영역의 진화에 따라 최적의 프로토콜로 주목받고 있다.
MQTT 프로토콜 설계의 의도
- 프로토콜이 차지하는 모든 면의 리소스 점유(footprint)를 최소화
- 느리고 품질이 낮은 네트워크의 장애와 단절에 대비
- 클라이언트 애플리케이션 동작에 자원 활용이 극히 제한적임을 고려
- 다수의 클라이언트 연결에 접합한 Publish/Subscribe 네트워크 채용
- 신뢰성 있는 메시징을 위한 QoS(Quality of Service) 옵션 제공.
- 개방형 표준메시징프로토콜 - 3rd Party 기기 제조업체와 소프트웨어 개발업체의 용이한 도입, 적용을 유도
주요 특징
- IBM과 Eurotech(Arcom)에 의해 1999년 최초 개발
- 센서/장치 + 모바일 기기들의 연결을 위한 프로토콜
- MQTT 프로토콜 오픈소스로 공개 (http://www.mqtt.org)
- 단순하고 미니멀한 Pub/Sub 메시징 체제
- 기업 경계 박의 Edge 네트워크 장치와 기업 내의 백엔드 애플리케이션 간 메시지 교환에 접합
- 간편한 메시징을 위한 직관적 verb set(connect/disconnect publish/subscribe) 제공
- 오버헤드를 최소화
- 가장 작은 메시지 사이즈는 2byte: 가변길이 MQTT헤더 + 애플리케이션 Payload
- Payload 데이터에 중립적: 별도의 다른 애플리케이션 헤더 불필요
- 클라이언트 라이브러리: C버전은 30KB, Java 버전은 100KB 내외
- Pub/Sub에 있어서 세가지 메시징 신뢰성을 위한 QoS(Quality of Service) 레벨 제공
- 0 메시지가 최대 1번 전달, 유실 가능성 있음
- 1 메시지가 최소 1번 전달, 중복 전달 가능성 있음
- 2 메시지가 단한번, 정당성 있게 전달
- 클라이언트와 서버간의 연결을 잃었을때 이를 보정하기 위한 자체 기능
- Last will and testament
클라이언트가 예고 없이 연결을 잃을 경우 이벤트가 서버에서 발생, 서버 측에서 연결의 유실 여부 인지 - Durable subscription
서버에 클라이언트의 구독(subscription)정보 저장됨, 세션 종료 후 재접속 시에도 재작업 없이 Pub/Sub유지 - Clean session 기능
연결 해제 후 다시 연결되었을 때의 이전 세션 유지/삭제 선택
- Last will and testament
이외 특징
- FB 메신져가 이걸 사용. 국내 통신사 PUSH 서버도 이걸 사용함
- 일단 FB가 쓰니, 동남아권 Telco에서 패킷 걸리는 문제는 없을듯
- Qos 0,1,2로 해서, 2 의 경우 message delivery를 gurantee함
- 저전력!! 이게 중요
- XMPP에 비해서 훨씬 경량. (XMPP는 XML, MQTT는 byte로 보내는데, 2바이트부터 시작)
- MQTT 서버를 라즈베리와 같은 임베디드 서버에도 넣을 수 있음. IOT용!! 즉 Things가 서버가 될 수 있다!!
- 대부분 사용자 인증만 제공 (user id/password 방식) 이것도 대부분 서버들이 파일에 저장한다. (IDM이나 KEY 시스템과 연계 필요)
- TLS/SSL은 지원. X.509 인증서를 이용한 양방향 인증도 지원
MidnightCow
위즈네트 칩(W5300, W5200, W7100, W7500) 개발자