MQTT

GAON PARK·2023년 11월 15일
0
post-custom-banner
  • 신뢰성 있는 데이터 전송 및 원격제어를 위해 만들어진 프로토콜이다. (ISO 표준)
  • 열악한 네트워크 환경에서 센서 하나 정도 달린 작은 기기들의 데이터 전송 및 원격제어를 위해 만들어졌다.
  • IoT 에서는 인터넷에서 자주 사용되는 HTTP 프로토콜을 쓰기도 하지만, MQTT라는 IoT용 프로토콜도 자주 사용한다.

특징

  • 실시간, 최소 전력, 신뢰성 있는 비동기적 메시징 방식 (TCP/IP 기반)
  • 경량 프로토콜
  • 이벤트 방식의 N:N 통신 지원

구성

Broker

  1. 메시지가 들어오는 통로이다.
  2. 반드시 Broker를 통해서만 통신이 가능하다.
  3. 메시지의 전송 여부, 에러 여부를 확인할 수 있다.

Publisher & Subscriber

누구나 발행/구독을 할 수 있으며, 동시에 할 수도 있다.

MQTT 메시징 방식

토픽 (Topic)

  • 메시지에 태그를 건다
  • 구독자는 원하는 토픽만 선택해서 메시지를 받는다

주제 선정 방법

  • 가급적 선행 슬래시를 사용하지 않을 것
    - /home/floor/room1 (X)
    - home/floor/room1 (O)
  • 공백을 사용하지 않을 것
    - home/floor/my room (X)
    - home/floor/room (O)
  • 짧고 간결하게 유지할 것
    - 길어질 경우 데이터 용량이 늘어난다
  • ASCII 문자만 사용할 것
    - home/floor/room (O)
    - 집/1층/방 (X)
  • 아이디를 넣어주면 좋다
  • 확장성을 염두에 두고 만들면 좋다
  • 특정 주제를 사용한다
    - 거실에 센서가 3개 있는 경우
    - home/livingroom/temp
    - home/livingroom/humid
    - home/livingroom/bright

서비스 품질 QoS (Quality of Service)

  • Publisher가 QoS를 결정해서 publish 한다.
  • QoS Level 설정
    - Level 0: 한 번 보내면 끝
    - Level 1: 구독자가 메시지를 받았는지 불확실하면 정해진 수만큼 재전송 (중복 위험)
    - Level 2: 메시지를 정확히 한 번 수신할 수 있도록 철저히 감시하며 신호 품질을 보장

=> QoS Level이 높을 수록 품질이 보장되지만, 대역폭을 많이 소모한다.

wildcard

  • 한 번에 다량의 메시지를 관리할 때 사용한다.
  • 단일 레벨: +, 중간 계층을 선택해서 동일한 하위 계층의 메시지를 읽어온다.
  • 멀티 레벨: #, 가장 마지막에 추가할 수 있으며 상위 계층의 모든 하위 계층 메시지를 읽어온다.

인바운드 설정

localhost에서는 별도의 IP 설정 없이 접속을 할 수 있지만, 외부에서 접속할 경우 IP를 이용한 접속이 필요하다. 때문에 인바운드 설정을 해주어야 한다.

# conf 파일 가장 아래에 문구 추가
# /etc/mosquitto/mosquitto.conf

port 1883 
allow_anonymous true
post-custom-banner

0개의 댓글