MQTT와 CoAP

Donghwi Kim·2024년 2월 5일
0

잡다한 개발 지식

목록 보기
12/26

MQTT란 무엇인가?

머신 대 머신 통신에 사용되는 표준 기반 메시징 프로토콜 또는 규칙 세트이다. 스마트 센서, 웨어러블 및 기타 IoT 디바이스는 일반적으로 리소스 제약이 있는 네트워크를 통해 제한된 대역폭으로 데이터를 전송하고 수신해야 한다.
이러한 IoT 디바이스는 MQTT를 데이터 전송에 사용하는데, 구현이 쉽고 데이터를 효율적으로 전달할 수 있기 때문이다. MQTT는 디바이스와 클라우드 사이의 메시징을 지원한다.


MQTT의 장점

  1. 가볍고 효율적임
    MQTT를 IoT 디바이스에 구현할 때는 최소한의 리소스가 필요하다. 따라서 작은 마이크로컨트롤러에도 사용될 수 있다. 예를 들어 가장 작은 MQTT 제어 메시지는 데이터 2byte만큼 작다. 메시지 헤더도 작기 때문에 네트워크 대역폭을 최적화할 수 있다.

  2. 확장성
    MQTT 구현에는 최소량의 코드가 필요하며 작업 시 아주 적은 전력만 소비된다. 또한 많은 수의 IoT 디바이스와의 통신을 지원하기 위한 기본적인 기능을 갖추고 있다.

  3. 신뢰성
    많은 IoT 디바이스는 대역폭은 낮고 지연 시간은 긴 신뢰할 수 없는 셀룰러 네트워크를 통해 연결한다. MQTT에는 IoT 디바이스에서 클라우드에 다시 연결하는데 소요되는 시간을 줄여주는 기능이 기본 탑재되어 있다. 또한 최대 1회(0), 최소 1회(1), 정확히 1회(2)라는 3가지 서비스 품질 수준(QoS)을 정의하여 IoT 사용 사례에 필요한 신뢰성을 보장한다.

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

  5. 우수한 지원
    Python과 같은 다수의 언어가 MQTT 프로토콜 구현을 광범위하게 지원한다. 따라서 개발자는 모든 유형의 Application에서 최소한의 코드 작업으로 빠르게 이 프로토콜을 구현할 수 있다.


MQTT의 원리

게시/구독 모델의 원칙을 기반으로 작동한다. 게시자와 구독자를 분리하고 메시지 브로커라는 제3의 구성 요소가 게시자와 구독자 간의 통신을 처리한다.
브로커가 하는 일은 게시자로부터 수신되는 모든 메시지를 필터링하고 구독자에게 직접 배포하는 것이다. 게시자와 구독자를 분리하는 방법에는 3가지가 있다.

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


MQTT의 구성 요소

  • 클라이언트
    서버부터 MQTT 라이브러리를 실행하는 마이크로컨트롤러에 이르는 모든 디바이스가 될 수 있다. 메시지를 보내는 경우 게시자 역할을, 수신하는 경우 수신자 역할을 한다. 기본적으로 MQTT를 사용하여 통신하는 모든 디바이스를 의미한다.

  • 브로커
    여러 클라이언트 간의 메시지를 조정하는 백엔드 시스템이다. 메시지 수신 및 필터링, 각 메시지를 구독하는 클라이언트 식별, 메시지 전송 등과 같은 작업을 담당한다. 또한 다음과 같은 다른 태스크도 처리한다.
    • MQTT 클라이언트 권한 부여 및 인증
    • 추가 분석을 위해 다른 시스템으로 메시지 전달
    • 누락된 메시지 및 클라이언트 세션 처리

  • 연결
    클라이언트는 CONNECT 메시지를 브로커로 보내 연결을 시작한다. 브로커는 CONNACK 메시지로 응답하여 연결 설정을 확인한다. 클라이언트와 브로커 모두 TCP/IP 스택이 있어야 통신할 수 있다. 클라이언트는 서로 연결되지 않으며 브로커에만 연결한다.


MQTT 작동 방식

  1. 클라이언트와 브로커와의 연결을 설정한다.
  2. 연결되면 클라이언트에서 메시지를 게시하거나 특정 메시지를 구독하는 작업을 수행한다.
  3. 브로커는 메시지를 수신한 후 메시지에 관심이 있는 구독자에게 메시지를 전달한다.
  • 주제(Topic) - 브로커가 클라이언트를 위한 메시지를 필터링할 때 사용하는 키워드이다. 파일 또는 폴더 디렉터리와 유사한 계층 구조로 정렬된다.
  • 게시(Publish) - 클라이언트는 주제 및 데이터가 바이트 형식으로 포함된 메시지를 게시한다. 클라이언트는 데이터 형식을 결정한다.
  • 구독(Subscribe) - 클라이언트는 브로커에 SUBSCRIBE 메시지를 보내 관심 주제에 대한 메시지를 수신한다. 메시지에는 구독의 고유 식별자와 목록이 포함된다.


CoAP란 무엇인가?

6LoWPAN 기반의 전송 계층을 포함한 상위 Application 계층에서 M2M노드들 사이의 통신을 지원하기 위한 프로토콜이다. IoT와 같은 대역폭이 제한된 통신 환경에 최적화하여 개발된 REST기반의 경량 메시지 포로토콜이다.

클라이언트/서버 간 1대1 프로토콜이며 Pub/Sub 메시지큐 기능을 사용하지 못한다. 멀티캐스트를 지원하며 제한된 환경에서 제한된 기기에 동작하고 경량 메시지 IoT를 지원하기 위해 만들어졌다.

비동기 수송 방식의 UDP 상에서 UDP의 단점을 보완하는 개념을 포함한 통신 프로토콜이다.

CoAP 특징

  • RESTful 형태 - 기존 http 웹 프로토콜과 쉽게 연동
  • 저전력 소비 - 저전력 센서, 스위치, 밸브 등 적용 가능
  • UDP 프로토콜 - UDP 멀티캐스트 지원, 비동기적 메시지 전송
  • WSN 지원 - 제한된 자원의 인터넷 연결 지원
  • DTLS 지원 - Datagram Transport Layer Security를 활용한 보안 지원
  • 1대1 프로토콜 - 하나의 서버와 하나의 클라이언트 간 통신


MQTT와 CoAP 비교

  • MQTT는 CoAP보다 성숙되고 안정적인 표준이다.
  • CoAP는 확인형/비확인형 메시지를 통해 QoS를 제공한다.
  • 각각의 프로토콜은 Trade-Off 관계이다.
  • 저대역폭 불안정한 네트워크에서 사용이 가능하다.

0개의 댓글

관련 채용 정보