MQTT (Message Queuing Telemetry Transport)는 1999년에 발표한 오픈 프로토콜로 낮은 대역폭, 높은 지연이나 신뢰 할 수 없는 네트워크를 위하여 설계된 경량적인(라즈베리파이에서도 사용가능) 메시지 프로토콜이다.
Google에서는 푸시 알림 서비스로 GCM(Google Cloud Messaging)을 제공하며, Apple에서는 APNs(Apple Push Notification service)을 서비스로 제공한다.
이와 마찬가지로 푸시 알림 서비스를 활용하는데 있어서, 자체적인 서비스를 만들고 싶다면 MQTT로 활용이 가능하다.
대표적으로, Facebook Messenger에서는 푸시 알림 서비스 방식으로 MQTT를 활용하고 있다고 한다.
출처 : https://www.facebook.com/notes/facebook-engineering/building-facebook-messenger/10150259350998920
MQTT는 중개자(Broker) 서버를 두고, 발행/구독(Publish/Subscribe) 방식으로 동작하는 환경에서 이용하는 프로토콜이다.
발행자(Publisher)는 Topic을 발행하고, 중개자(Broker)를 통하여, 구독자(Subscriber)가 요구하는 Topic 정보를 얻는 구조로 되어 있다. Publisher(나)가 해당 Topic과 보낼 메세지를 Broker 서버에 전송하면, 해당 Topic을 구독하는 Subscriber(친구들)에게 Broker 서버에 설정된 일정 Keep Alive Timer를 통해 푸시 알림을 보내게 된다.
또한, MQTT 는 메시징에 대한 신뢰성 보장을 위하여 3단계의 QoS(Quality of Service) 지원한다. 물론 QoS 레벨이 높을수록 패킷 손실율은 줄어들지만, 종단 간 통신 지연시간은 늘어나게 된다.
QoS 0 은 메시지를 한번만 전달하고 전달 여부는 확인하지 않기 때문에 큰 페이로드를 가지는 메시지 일 경우, 메시지 손실이 발생하면 메시지가 전달 되지 않고 유실될 가능성이 높다.
QoS 1은 메시지를 전달하고, 1번의 Ack로 전달 여부를 확인한다. 하지만 PUBACK 패킷이 유실 된다면 메시지가 불필요하게 중복 전달 될 가능성이 있다.
QoS 2 는 4-Way Handshake을 통해 정확하게 한번만 전달한다.
또한, Topic은 계층적으로 구성이 가능하다.
다음과 같이 계층적으로 Topic을 생성하여 전달할 수 있다.
1. Broker Server 설치 (Mosquitto Broker Server)
- 저장소 업데이트
$ sudo apt-get install python-software-properties
$ sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
$ sudo apt-get update
- 저장소 업데이트 확인
$ sudo apt-cache search mosquito
- Mosquitto 서버 설치
$ sudo apt-get install mosquitto
2. Test용 MQTT Client 설치 및 테스트
- MQTT Client 설치
$ sudo apt-get install mosquitto-clients
- MQTT Subscribe Client를 이용한 메시지 구독
$ mosquitto_sub - h Server Address -t /Topic
- MQTT Publish Client를 이용한 발행
$ mosquitto_pub - h Server Address -t /Topic -m "Message"
- MQTT Subscribe Client에서 해당 Topic에 대한 푸시 알림 메시지 구독 완료
MQTT Client는 다양한 언어의 형태와 라이브러리로 제공되고 있으며, 해당 정보에 대한 링크는 아래와 같다.
https://github.com/mqtt/mqtt.github.io/wiki/libraries
테스트 환경 : Ubuntu 16.04
'Network' 카테고리의 다른 글
RabbitMQ Broker Server Cluster 설치 및 테스트 (1) | 2018.11.06 |
---|---|
DNS 서버 설치 및 테스트 (0) | 2018.10.27 |
Suricata NIDS/IPS 환경 설치 및 테스트 (0) | 2017.05.03 |
Apache Kafka 클러스터링 설치 및 테스트 (2) | 2017.05.03 |