iot - mqtt

Expert Inpyo·2022년 10월 19일
0

MQTT

출처 : 출처

정의

Message Queueing Telemetry Transport
Publsh - Subscribe 기반의 메시지 송수신 프로토콜(발행 - 구독)

작은 코드 공간이 필요하거나 네트워크 대역폭이 제한되는 원격 통신을 위해(IoT같은 제한된) 혹은 대규모 트래픽 전송을 위해 만들어진 프로토콜

TCP/IP 프로토콜 위에서 동작하지만, 상당히 가벼움. 많은 통신 제약들을 해결해줌
(블루투스나 Zigbee처럼 별도의 모듈로 별도의 대역폭을 갖는 통신 규약이 아닌 와이파이나 기타 방법을 통해 인터넷을 통해 TCP/IP 기반의 메시지 송수신을 한다는 것을 의미)

특징

  • 연결 지향적(Connection Oriented)

    • MQTT 브로커와 연결을 요청하는 클라이언트는 TCP/IP 소켓 연결을 한 후 명시적으로 연결을 끊거나 네트워크 사정에 의해 연결이 끊어질 때 까지 상태 유지
    • Live라는 하트비트와 Topic에 발행되는 메시지를 통해 연결을 유지하고 메시지 송수신 함
    • 연결 끊어지면 재접속 가능
  • 브로커를 통한 통신

    • MQTT 발행-구독 메시징 패턴은 오직 브로커를 통해서만 통신 가능.
    • 개설된 Topic에 메시지 발행하면 해당 Topic 구독하는 클라이언트들에게 메시지 발행 가능
    • 1:1 / 1:M 통신 가능
  • QoS(Quality of Service)

    • 0 : 최대 1회 전송. Topic을 통해 메시지를 전송할 뿐 보장하지는 않음(보낸 다음 잊어버림)
    • 1 : 최소 1회 전송. 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송함
      • 메시지 핸드 셰이킹 과정을 엄밀히 추적하지는 않으므로 중복 위험이 있음
    • 2 : 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장함. 메시지의 핸드 셰이킹 과정을 추적함
      • 높은 품질 But 성능 저하
    • 기반이 되는 TCP/IP 데이터 전송 처리에 영향 주지 않음. MQTT 송신자, 수신자 간에만 사용됨
    • 메시지는 글자수 제한 없음(JSON 가능)
    • 0에 가까울수록 메시지 처리에 대한 부하 감소 + 메시지 손실 위험 증가
    • 2에 가까울수록 메시지 손실 위험 감소 + 메시지 처리 부하 급격히 증가
    • 0 ~ 1 정도의 QoS를 사용해 메시지 손실위험은 상위 어플리케이션 차원에서 관리하는 방법 널리 사용됨
  • 메시지 유형

    • 연결하기 : 서버와의 연결 수립을 기다린 다음 노드 간 링크를 만듬
    • 연결 끊기 : MQTT 클라이언트가 해야할 일을 기다리고 인터넷 프로토콜 스위트 세션의 연결이 끊어지기를 기다림
    • 발행하기 : MQTT 클라이언트에 요청이 전달된 직후 어플리케이션 쓰레드에 즉시 반환

동작 구조

  • 토픽(TOPIC)
    • 메시지 발행~구독 행위는 채널 단위로 일어나는 것을 의미

    • "/"로 구분되는 계층 구조를 가짐

      company / firstFloor / SWoffice / temp
      
      여기서 / 전후의 모든 값들은 각각의 토픽 레벨(Topic Level)
      해당 토픽은 Level Separator(/)로 구분됨
      
      
      
profile
도전! 데이터 엔지니어

0개의 댓글