MQTT (1) - MQTT(Message Queueing Telemetry Transport)란? - LOG.INFO

배경

이번에 네이버 핵데이에 참가하여 메신저를 주제로 프로젝트를 진행하게 되었다. 채팅을 구현하기 위해 statelessconnectless한 성질을 가져 매번 커넥션을 연결해주고 해제해줘야하며 server push가 불가능한 HTTP를 사용하기보다는, WebSocket이나 MQTT를 사용하는 쪽으로 고려하였고, 해당 프로젝트에선 MQTT를 사용하게 되었다.

이에 본 포스팅에서는 MQTT에 대해 공부한 것을 정리한다.

MQTT(Message Queueing Telemetry Transport)

MQTTpublish/subscribe 메시징 프로토콜이다. publishersubscriber 사이에 broker가 존재한다.

메시지를 발행/구독(pub/sub) 하는 행위는 채널 단위로 일어난다. 이를 MQTT에서는 토픽(Topic)이라고 한다. 토픽은 슬래시(/)로 구분된 계층구조를 갖는다.

장점

  • 가벼운 프로토콜
  • pub/sub구조로, 다-대-다 전송 가능

단점

  • 베이스 프로토콜의 암호화 부재
    • 어플리케이션 단에서 해결가능하지만 복잡함

QoS(Quality of Service)

QoS는 다음과 같은 종류가 있다.

  • QoS level 0 (At most once)
    • 한 번만 보내고 전달 확인 과정을 거치지 않음
    • 빠름
    • 메시지 전달 보장하지 않음
  • QoS level 1 (At least once)
    • 확인 응답을 수신할 때까지 여러 번 발신
    • 같은 메시지 여러 번 전달 가능성
  • QoS level 2 (Exactly once)
    • 한 번만 정확히 전달
    • 느림
    • 같은 메시지는 단 한 번만 전달 보장

꼬리를 물고 물어~

  • CoAP?
  • AMQP(Advanced Message Queueing Protocol)

정리

메시지를 주고 받는 방법들

  • HTTP를 사용하여 무한 polling
    • 매번 연결을 맺고 끊어야 하므로 리소스 낭비가 심하다
    • server-push 불가능. 클라이언트에서 계속 polling해줘야함
  • HTTP를 사용하여 long-polling
    • 메시지가 발생하거나 timeout이 뜰 때까지 response하지 않음
  • HTTP2
  • XMPP(eXtensible Messaging and Presence Protocol, = Jabber)
    • XML에 기반한 메시지 지향 미들웨어용 통신 프로토콜.
    • 2인 이상의 참여자 간에 구조적 데이터를 거의 실시간에 가깝게 교환할 수 있게 해주는 XML 기반 TCP 커뮤니케이션 프로토콜
    • 특징
      • 분산화 : 하나의 중앙 서버나 Broker에 의지하기 보다는 여러 Transfer Agents에 걸쳐 작동
      • MQTT에 비해 무거움(?)
  • CoAP?

참고문헌