MQTT란 무엇인가요?

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

MQTT 프로토콜이 중요한 이유는 무엇인가요?

MQTT 프로토콜은 다음과 같은 이점을 제공하기 때문에 IoT 데이터 전송 표준이 되었습니다.

가볍고 효율적임

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

확장성

MQTT 구현에는 최소량의 코드가 필요하며 작업 시 아주 작은 전력만 소비됩니다. 이 프로토콜은 또한 많은 수의 IoT 디바이스와의 통신을 지원하기 위한 기본적인 기능을 갖추고 있습니다. 따라서 MQTT 프로토콜을 구현하여 수백만 개의 디바이스에 연결할 수 있습니다.

신뢰성

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

보안

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

우수한 지원

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

MQTT 프로토콜에는 어떤 역사가 있나요?

MQTT 프로토콜은 1999년에 정유 및 가스 산업에서 사용할 목적으로 발명되었습니다. 최소한의 대역폭과 최소한의 배터리 손실을 지원하는 프로토콜로 위성을 통해 정유 파이프라인을 모니터링할 수 있어야 했기 때문입니다. 처음에 이 프로토콜은 Message Queuing Telemetry Transport로 알려졌는데, IBM 제품인 MQ 시리즈가 그 초기 단계를 처음으로 지원했기 때문입니다. 2010년에 IBM은 MQTT 3.1을 모든 사용자가 구현할 수 있는 개방형 무료 프로토콜로 릴리스했습니다. 이후 유지 관리를 위해 2013년에 Organization for the Advancement of Structured Information Standards(OASIS) 사양 기구에 제출되었습니다. 2019년에는 OASIS에 의해 업그레이드된 MQTT 버전 5가 릴리스되었습니다. 이제 MQTT는 더 이상 약어가 아니라 프로토콜의 공식 이름으로 여겨집니다. 

MQTT의 원리는 무엇인가요?

MQTT 프로토콜은 게시/구독 모델의 원칙을 기반으로 작동합니다. 전통적인 네트워크 통신에서는 클라이언트와 서버가 서로 직접 통신합니다. 클라이언트가 서버의 리소스 또는 데이터를 요청하면 서버가 이를 처리한 후 응답을 다시 보냅니다. 그러나 MQTT는 게시/구독 패턴을 사용하여 메시지 발신자(게시자)와 메시지 수신자(구독자)를 분리합니다. 대신에 메시지 브로커라고 하는 제3의 구성 요소가 게시자와 구독자 간의 통신을 처리합니다. 이 브로커가 하는 일은 게시자로부터 수신되는 모든 메시지를 필터링하고 구독자에게 직접 배포하는 것입니다. 브로커는 게시자와 구독자를 아래와 같이 분리합니다.

공간 분리

게시자와 구독자는 서로의 네트워크 위치를 모르며 IP 주소 또는 포트 번호와 같은 정보를 교환하지 않습니다.

시간 분리

게시자와 구독자는 동시에 실행되거나 네트워크를 통해 연결되지 않습니다.

동기화 분리

게시자와 구독자는 서로를 중단시키지 않고 메시지를 전송하거나 수신할 수 있습니다. 예를 들어 구독자는 게시자가 메시지를 전송할 때까지 기다리지 않아도 됩니다.

MQTT 구성 요소에는 어떤 것들이 있나요?

MQTT는 아래와 같이 클라이언트와 브로커를 정의하여 게시/구독 모델을 구현합니다.

MQTT 클라이언트

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

MQTT 브로커

MQTT 브로커는 여러 클라이언트 간의 메시지를 조정하는 백엔드 시스템입니다. 브로커는 메시지 수신 및 필터링, 각 메시지를 구독하는 클라이언트 식별, 메시지 전송 등과 같은 작업을 담당합니다. 또한 다음과 같은 다른 태스크도 처리합니다.

  • MQTT 클라이언트 권한 부여 및 인증
  • 추가 분석을 위해 다른 시스템으로 메시지 전달
  • 누락된 메시지 및 클라이언트 세션 처리

MQTT 연결

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

MQTT는 어떤 방식으로 작동하나요?

아래에 MQTT의 작동 방식에 대한 개요가 나와 있습니다. 

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

이해를 높이기 위해 세부 정보를 항목별로 나누어 살펴보도록 하겠습니다.

MQTT 주제

‘주제’라는 용어는 MQTT 브로커가 MQTT 클라이언트를 위한 메시지를 필터링할 때 사용하는 키워드입니다. 주제는 파일 또는 폴더 디렉터리와 유사한 계층 구조로 정렬됩니다. 예를 들어 여러 층으로 된 주택에서 작동하는 스마트 홈 시스템을 생각해 보세요. 각 층에는 서로 다른 스마트 디바이스가 있습니다. 이 경우 MQTT 브로커는 주제를 다음과 같이 정렬할 수 있습니다.

ourhome/groundfloor/livingroom/light

ourhome/firstfloor/kitchen/temperature

MQTT 게시

MQTT 클라이언트는 주제 및 데이터가 바이트 형식으로 포함된 메시지를 게시합니다. 클라이언트는 텍스트 데이터, 바이너리 데이터, XML 또는 JSON 파일과 같은 데이터 형식을 결정합니다. 예를 들어 스마트 홈 시스템의 조명은 livingroom/light 주제에 on이라는 메시지를 게시할 수 있습니다.

MQTT 구독 

MQTT 클라이언트는 MQTT 브로커에 SUBSCRIBE 메시지를 보내 관심 주제에 대한 메시지를 수신합니다. 이 메시지에는 구독의 고유 식별자와 목록이 포함됩니다. 예를 들어 휴대폰의 스마트 홈 앱을 사용하여 집안에 켜져 있는 조명의 수를 표시하려면 light 주제를 구독하고 모든 on 메시지의 카운터를 늘립니다. 

MQTT over WSS란 무엇인가요?

MQTT over WebSockets(WSS)는 데이터를 웹 브라우저로 직접 수신하는 MQTT 구현입니다. 이 MQTT 프로토콜은 JavaScript 클라이언트를 정의하여 브라우저에 대한 WSS 지원을 제공합니다. 이 경우 이 프로토콜은 평상시와 마찬가지로 작동하지만 MQTT 메시지에 추가 헤더를 삽입하여 WSS 프로토콜도 지원합니다. MQTT 메시지 페이로드가 WSS 봉투로 포장되었다고 생각하면 됩니다.

MQTT는 안전한가요?

MQTT 통신은 SSL 프로토콜을 사용하여 IoT 디바이스에서 전송되는 민감한 데이터를 보호합니다. SSL 인증서와 암호를 사용하여 클라이언트와 브로커 간에 ID, 인증 및 권한 부여를 구현할 수 있습니다. MQTT 브로커는 일반적으로 암호와 각 클라이언트에 할당되는 고유 클라이언트 식별자를 사용하여 클라이언트를 인증합니다. 대부분의 구현에서 클라이언트는 인증서 또는 DNS 조회를 통해 서버를 인증합니다. MQTT와 함께 암호화 프로토콜을 구현할 수도 있습니다. 

MQTT는 RESTful인가요?

MQTT는 RESTful이 아닙니다. Representational State Transfer(REST)는 네트워크 통신에 대한 아키텍처 접근 방식으로, 메시지 발신자와 수신자 간의 요청-응답 패턴 통신을 사용합니다. 이와 반대로 MQTT는 애플리케이션 계층에서 게시/구독 모델 통신을 사용하며 메시지를 푸시 방식으로 전송하기 위한 고정된 TCP 연결이 필요합니다. 그러나 MQTT 버전 5는 REST와 유사한 방식으로 작용하는 새로운 요청/응답 메서드를 추가합니다. 여기서 게시자는 특수한 응답 주제를 첨부할 수 있고 수신자는 이를 처리하여 적절한 응답을 생성합니다.

AWS는 MQTT 구현을 어떻게 지원할 수 있나요?

AWS IoT Core는 수십억 개의 IoT 디바이스를 연결하고, 수조 개의 메시지를 AWS 서비스에 라우팅할 수 있게 해주는 완전관리형 서비스입니다. 다음을 할 수 있습니다.

  • 서버를 프로비저닝하거나 관리하지 않고도 쉽고 안정적으로 디바이스 플릿을 연결하고 관리하며 크기를 조정합니다.
  • MQTT, HTTPS, MQTT over WSS, LoRaWAN을 포함하여 선호하는 통신 프로토콜을 선택합니다.
  • 상호 인증 및 포괄적인 암호화로 디바이스 연결 및 데이터를 보안합니다.
  • 정의한 비즈니스 규칙에 따라 즉시 디바이스 데이터를 필터링 및 변환하고 이를 기반으로 운영할 수 있습니다.

지금 바로 무료 계정을 만들어 MQTT on AWS를 시작하세요.

AWS MQTT의 다음 단계

제품 관련 추가 리소스 확인
사물 인터넷(IoT)에 대해 자세히 알아보기 
무료 계정에 가입

AWS 프리 티어에 즉시 액세스할 수 있습니다. 

가입 
콘솔에서 구축 시작

AWS 관리 콘솔에서 AWS로 구축을 시작하세요.

로그인