MQTT 프로토콜

sz L·2023년 8월 13일
0

통신

목록 보기
2/14
post-thumbnail

MQTT란

MQTT(Message Queueing Telemetry Transport)는 포준화 된 발행-구독 기반의 메시지 송수신 프로토콜이다.

  • 스마트 센서, 웨어러블 및 기타 사물 인터넷(IoT) 디바이스는 일반적으로 리소스 제약이 있는 네트워크를 통해 제한된 대역폭으로 데이터를 전송하고 수신해야 합니다.
    • IoT 디바이스는 MQTT를 데이터 전송에 사용하는데, 구현이 쉽고 IoT 데이터를 효율적으로 전달할 수 있기 때문입니다.

MQTT 프로토콜이 중요한 이유

가볍고 효율적임

  • IoT 디바이스에 구현할 때 최소한의 리소스 필요 -> 작은 마이크로컨트롤러에도 사용 가능
  • MQTT 제어 메시지는 데이터 2바이트만큼 작음 -> 네트워크 대역폭 최적화할 수 있음

확장성

  • MQTT 구현에는 최소량의 코드가 필요하고 작업 시 작은 전력 필요
  • 많은 수의 IoT 디바이스와의 통신을 지원하기 위한 기본적인 기능 갖추고 있음 -> 수백만 개의 디바이스와 연결 가능

신뢰성

  • 많은 IoT 디바이스는 대역폭은 낮고 지연 시간은 긴 신뢰할 수 없는 셀룰러 네트워크를 통해 연결 -> MQTT에는 IoT 디바이스에서 클라우드에 다시 연결하는 데 소요되는 시간을 줄여주는 기능이 기본적으로 탑재되어 있음

보안

  • 메시지를 손쉽게 암호화하고, OAuth, TLS1.3, 고객 관리형 인증서 및 기타 최신 인증 프로토콜을 사용하여 디바이스와 사용자를 인증할 수 있음

    OAuth(Open Authorization)
    인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단
    TLS(전송 게층 보안)
    개인 정보 및 안전한 전송을 위해 이메일을 암호화하는 표준 인터넷 프로토콜.
    인터넷 연결을 통해 전송 중인 이메일에 대한 무단 엑세스를 방지

우수한 지원

  • Python과 같은 다수의 언어가 MQTT 프로토콜 구현을 광범위하게 지원함
  • 모든 유형의 애플리케이션에서 최소한의 코드 작업으로 빠르게 이 프로토콜 구현 가능.

MQTT 원리

전통적인 네트워크 통신에서는 클라이언트와 서버가 서로 직접 통신함
클라이언트가 서버의 리소스 또는 데이터를 요청하면 서버가 이를 처리한 후 다시 응답을 보냄

MQTT 프로토콜은 게시/구독 모델의 원칙을 기반으로 작동함
메시지 발신자(게시자)와 메시지 수신자(구독자)를 분리함. 대신에 메시지 브로커라고 하는 제3의 구성 요소가 게시자와 구독자 간의 통신을 처리함.
이 브로커가 하는 일은 게시자로부터 수신되는 모든 메시지를 필터링하고 구독자에게 직접 배포함

브로커는 게시자와 구독자를 아래와 같이 분리

  • 공간분리
    게시자와 구독자는 서로의 네크워크 위치를 모르며 IP 주소 또는 포트 번호와 같은 정보를 교환하지 않음
  • 시간 분리
    게시자와 구독자는 동시에 실행되거나 네트워크를 통해 연결되지 않음
  • 동기화 분리
    게시자와 구독자는 서로를 중단시키지 않고 메시지를 전송하거나 수신할 수 있음

MQTT 구성요소

  1. MQTT 클라이언트
  • MQTT 클라이언트는 서버부터 MQTT 라이브러리를 실행하는 마이크로컨트롤러에 이르는 모든 디바이스가 될 수 있습니다.
  • 클라이언트는 메시지를 보내는 경우 게시자 역할을, 메시지를 수신하는 경우 수신자 역할을 합니다. 기본적으로 네트워크를 통해 MQTT를 사용하여 통신하는 모든 디바이스를 MQTT 클라이언트 디바이스라고 할 수 있습니다.
  1. MQTT 브로커
  • MQTT 브로커는 여러 클라이언트 간의 메시지를 조정하는 백엔드 시스템입니다.
  • 브로커는 메시지 수신 및 필터링, 각 메시지를 구독하는 클라이언트 식별, 메시지 전송 등과 같은 작업을 담당합니다.
  • MQTT 클라이언트 권한 부여 및 인증
  • 추가 분석을 위해 다른 시스템으로 메시지 전달
  • 누락된 메시지 및 클라이언트 세션 처리
  1. MQTT 연결
  • 클라이언트와 브로커는 MQTT 연결을 사용하여 통신을 시작합니다.
  • 클라이언트는 CONNECT 메시지를 MQTT 브로커로 보내 연결을 시작합니다. 브로커는 CONNACK 메시지로 응답하여 연결이 설정되었음을 확인합니다.
  • MQTT 클라이언트와 브로커는 모두 TCP/IP 스택이 있어야 통신할 수 있습니다.
  • 클라이언트는 서로 연결되지 않으며 브로커에만 연결합니다.

MQTT 동작방식

  1. MQTT 클라이언트가 MQTT 브로커와의 연결을 설정함
  2. 연결되면 클라이언트에서 메시지를 게시하거나 특정 메시지를 구독하거나 둘 다 수행 가능
  3. MQTT 브로커는 메시지를 수신한 후 메시지에 관심이 있는 구독자에게 메시지 전달

MQTT 게시
MQTT 클라이언트는 주제 및 데이터가 바이트 형식으로 포함된 메시지를 게시합니다.
클라이언트는 텍스트 데이터, 바이너리 데이터, XML 또는 JSON 파일과 같은 데이터 형식을 결정합니다.

MQTT 구독
MQTT 클라이언트는 MQTT 브로커에 SUBSCRIBE 메시지를 보내 관심 주제에 대한 메시지를 수신합니다.
이 메시지에는 구독의 고유 식별자와 목록이 포함됩니다.


REST(Representational State Transfer)

REST는 네트워크 통신에 대한 아키텍처 접근 방식으로, 메시지 발신자와 수신자 간의 요청-응답 패턴 통신을 사용.

MQTT는 애플리케이션 계층에서 게시/구독 모델 통신을 사용하며 메시지를 푸시 방식으로 전송하기 위한 고정된 TCP 연결이 필요.
MQTT 버전 5는 REST와 유사한 방식으로 작용하는 새로운 요청/응답 메서드 추가

MQTT는 RESTful이 아니다.

profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

2개의 댓글

comment-user-thumbnail
2023년 8월 13일

이전 회사에서 SCADA 관련해서 MQTT를 데모형식으로 사용했던적이 있었는데, REST라는 개념이 MQTT에도 적용되는지 몰랐네요 ㅎㅎ

좋은 정보 감사합니다

1개의 답글