Message Queueing Telemetry Transport [ MQTT ]
[1] MQTT란?
MQTT는 국제 표준화된 발행-구독(Publish-Subscribe) 기반의 메시지 송수신 프로토콜이다.
MQTT는 국제 표준화된 표준 ISO/IEC PRF 20922 규격을 따름
(1-1) 메시지 송수신 프로토콜이란?
- 프로토콜: 컴퓨터나 장치들이 서로 통신할 때 어떤 설정과 규칙을 따르는지 정립 해놓은 것
[ (ex) 우편 시스템 : 편지를 어떻게 쓰고, 주소를 어떻게 적고 우표를 어디에 붙이는지에 대한 규칙도 일종의 송수신 프로토콜의 예시로 볼 수 있다. ]
- MQTT는 발행-구독(Publish-Subscribe) 기반의 송수신 프로토콜이다.
발행-구독(Publish-Subscribe) 방식은 정보를 보내는 발행자(Publish)와 정보를 받는 구독자(Subscribe)가 서로 직접 연결되지 않고 중간 유통자(Broker)라는 중개자가 정보를 각 구독자에게 전달 해주는 역할이다.
( ex : 신문사(Publish)가 신문(Data)를 발행하면, 중간에 배달원(Broker)가 신문을 전달받고 배달하여 구독자(Subscribe)에게 신문을 전달해준다. )
이러한 방식의 MQTT에서 사용하는 발행-구독(Publish-Subscribe) 기반의 메시지 송수신 프로토콜이다.
산업 현장 게이트웨이 MQTT 통신 예시 | MQTT 대규모 분산 처리 시스템 예시 |
[2] MQTT의 동작과정
MQTT는 위 단계를 통해 장비 간의 효율적이고 신뢰성 있는 메시지 교환을 지원함 이는 특히 네트워크 자원이 제한적이거나, IoT 장비 같은 저전력이 필요한 환경에서 매우 유용함
MQTT의 Pubisher, Subscriber, Broker의 메시지 교환 방식은 아래 설명과 같음.
(1) 연결 설정 :
클라이언트는 MQTT 브로커에 TCP/IP 프로토콜로 지속적인 연결을 설정
한번 연결 성공하면,, 세션이 활성화되고 데이터 교환 준비 완료 ( 지속적 연결 )
(2) 메시지 발행 (Publishing)
Publisher(센서 or 현장 설비)는 특정 Topic(진동,알람)에 대한 메시지 데이터를 생성하고 MQTT 브로커 ( Mqtt 서버 ) 에게 전송함
(3) 메시지 구독 (Subscribing)
- Subscriber(웹 or 데이터를 요구하는 어딘가)는 관심 있는 Topic(진동,알람)에 대한 메시지를 받기 위해 구독을 요청함
- 구독 요청을 받은 브로커는 해당 토픽에 대한 메시지가 발행되면 구독자에게 메시지 전달
(4) 메시지 전달
- 브로커는 발행된 메시지를 해당 토픽을 구독하는 모든 클라이언트에게 전달합니다.
- 메시지 전달 시, MQTT는 세 가지 품질 보증(Quality of Service, QoS) 레벨을 제공
QoS 0: 한 번 메시지 전달 (메시지가 한 번 이상 전달될 수 있으나, 전달이 보장되지는 않음)
QoS 1: 적어도 한 번 메시지 전달 (메시지가 중복될 수 있으나, 최소 한 번은 전달됨을 보장) QoS 2: 정확히 한 번 메시지 전달 (메시지가 정확히 한 번만 전달됨을 보장) “유료
(5) 연결 종료
- 클라이언트는 이후 메시지를 전달이 필요하지 않으면 MQTT 브로커와의 연결 종료 가능
- 또한 브로커의 네트워크 오류나 타임아웃 등으로 연결 종료 가능
[3] MQTT의 장점
1, 경량화 및 저전력
MQTT는 매우 단순한 데이터 구조를 가지고 있어서, 메시지 오버헤드가 최소화 됨 (불필요한 데이터를 최소로 넣음). 이는 네트워크 대역폭을 적게 사용하게 만들어준다.
또한 IoT 기기가 저전력으로 작동할 수 있게 하여 배터리로 작동하는 기기에 이상적이다.
그리고 효율적인 메시지 구조를 사용하여 MQTT는 바이너리 메시지 형식 (데이터 압축)으로 데이터를 효율적으로 인코딩한다. 이는 텍스트 기반의 HTTP보다 데이터 전송량을 줄이는데 도움이 된다.
( MQTT 설계상 최소한의 프로토콜 오버헤드를 갖도록 만들어짐, 이를 통해 불필요한 데이터 전송을 줄이고 대역폭 사용을 최적화하여 낮은 대역폭 환경에서 효율적으로 활용 가능함 )
아래는 MQTT의 패킷 예시 구조이다.
예시: 페이로드 10 byte 데이터
MQTT 메시지 예시 | HTTP 요청 예시 |
고정 헤더: 2 바이트 가변 헤더: 2 바이트 (토픽 이름 길이) 페이로드: 10 바이트 (예시 데이터) 총: 약 14 바이트 |
헤더: 약 200 바이트 페이로드: 10 바이트 (예시 데이터) 총: 약 210 바이트 |
가장 작은 패킷의 사이즈는 2byte로 사용 가능하며, 경량화 메시징 프로토콜의 특징으로 저전력. 낮은 리소스로 다양한 서비스 구현이 가능함
2. 메시지 전달 신뢰성 보장 (QoS 레벨)
여러 Quaility of Service(QoS) 레벨을 통해 메시지 전달의 신뢰성을 보장함
QoS 0: 한 번 메시지 전달 (메시지가 한 번 이상 전달될 수 있으나, 전달이 보장되지는 않음)
QoS 1: 적어도 한 번 메시지 전달 (메시지가 중복될 수 있으나, 최소 한 번은 전달됨을 보장)
QoS 2: 정확히 한 번 메시지 전달 (메시지가 정확히 한 번만 전달됨을 보장) “유료
3. Subscriber-Publisher 모델로 인한 장점
(3-1) 비동기 통신 : 현장의 PC가 느려지던, 웹 서버가 느려지던 MQTT 브로커로 인해 서로의 처리 속도에 영향을 주지 않음 또한 이는 서로 간의 직접적인 연결을 피한 탈중앙화가 가능하게 하여 시스템 복삽성을 줄이고, 전체적인 시스템 확장성을 높임
(3-2) 우연성 및 재사용성 : 토픽 기반의 메시지 필터링을 통해, 관심 있는 메시지 만을 MQTT 브로커를 통해 수신받을 수 있음. 이는 웹 서버가 필요한 데이터만 받는 것도 가능하며 추가로 다른 서버에서 데이터를 땡겨받아야 할 때에도 이점이 있음
(3-3) 유지보수 및 결합도 감소 : 각 컴포넌트가 독립적으로 개발 미 유지 보수가 가능해서 시스템의 전체적인 유지 관리를 용이하게 만듬
(3-4) 다양한 환경 지원 : Iot나 모바일 애플리케이션, 클라우드 서비스 등 다양한 환경과 장치에 활요 가능하며 지연 시간이 높고 제한적인 대역폭에서도 효과적으로 작동함
4. 지속적인 연결성
keep-alive 메시지를 연결된 세션동안 일정 시간 간격마다 PING 메시지를 Broker에게 전달함
이를 통해서 현장 PC들이 살아 있는지에 대해서 지속적으로 모니터링 및 확인이 가능함
이를 통해 다음의 장점을 지님
(4-1) 저전력 소비 : 지속적인 연결로 실시간 통신이 가능하면서, Keep Alive 라는 작은 크기의 메시지를 통해 최소한의 데이터만을 주고 받아 저전력으로 운영이 가능함
(4-2) 빠른 메시지 전달 :지속적인 연결을 통해 메시지는 발행 즉시 구독자(subscriber)에게 전달되어 실시간 통신이 중요한 애플리케이션에서 매우 유리함
(4-3) 네트워크 불안정성 대응 가능 : 연결 상태를 주기적으로 확인함으로써, 불안정한 네트워크 환경에서도 연결을 유지하고 필요시 재연결을 시도할 수 있음
5. 다중 클라이언트 지원
MQTT 서버 (브로커)는 수천에서 수백만 개의 연결을 동시 처리가 가능함. 이는 디바이스가 수동적으로 연결되어 있을 필요가 없고, 메시지가 발행될 때만 통신하면 되기 때문에 가능함. 이러한 이유로 MQTT는 대규모 네트워크에서도 효율적으로 작동할 수 있음
또한 토픽 기반 메시징으로 각 메시지가 특정 토픽에 대해서 할당되어 클라이언트는 관심 있는 토픽에 대해서만 구독하여 사용 가능함. 이 방식은 메시지의 분류와 배포를 효율적으로 만들어 대규모 시스템에서 데이터 관리를 단순화 함
[4] MQTT vs HTTP
MQTT는 지속적인 연결을 통해 메시지는 발행 즉시 구독자(subscriber)에게 전달되어 실시간 통신이 중요한 애플리케이션에서 큰 이점을 지님
HTTP | MQTT | |
장점 |
범용성 : 웹 개발 및 대부분 시스템과 호환이 뛰어남 보안 : HTTPS로 데이터 암호화 제공 쉬운 구현 : 많은 정보 & 라이브러리 독립성 : 각 요청이 독립적으로 처리 |
경량 프로토콜 : 매우 경량의 프로토콜로 네트워크 대역폭이 제한된 환경에서 효율적으로 사용 저전력 소비 : 기기가 저전력으로 작동할 수 있게 도와 배터리 기기에 효율적 높은 메시지 전달 신회성 : QoS 레벨을 통해 신회성을 보장함 양방향 통신 : MQTT는 서버와 클라이언트 간 양방향 통신을 지원하여 실시간 데이터 교환에 유리함 확장성 : 수천 개의 기기를 쉽게 연결하고 확장이 용이함 |
단점 |
전력 소비 : 매 요청 연결을 확립하고 유지하기 위해 많은 전력 소비 ( 배터리 기반의 IoT 기기 부적합 ) 헤더 오버헤드 : 모든 요청의 상대적으로 큰 헤더가 포함되어, 작은 데이터 패킷을 보낼 때 비효율적 폴링 : 기본적으로 요청-응답 모델을 사용하여, 실시간 통신을 위해서는 주기적으로 서버에 폴링을 수행하며 이는 네트워크 대역폭과 서버 자원을 낭비함 |
보안 : 기본적으로 MQTT는 암호화를 제공하지 않아서 다른 보안 연결 설정이 요구되어짐 복잡한 메시지 구조 : 단순한 센서값이 아닌 특정 애플리케이션에 대한 복잡한메시지 구조를 구현하기 위해서는 추가적인 작업이 필요함. ( 해당 X ) |
각자의 사용 사례에 따라 장단점이 있으며 MQTT는 저전력 소비, 실시간 통신, 높은 확장성이 필요한 IoT환경에서 적합하다. |
[5] MQTT 서버 구조
HTTP 통신 (기존) | MQTT 통신 |
|
이점
- 저전력 및 저대역폭 사용 : 에너지 사용 최소화 및 배터리 낭비 감소
- 신뢰성 있는 통신 : QoS를 통해서 어떤 현장의 네트워크가 불안해도 데이터 손실을 최소화 가능함
- 확장성 : MQTT 브로커는 수천, 수만 개의 동시 연결을 처리 가능하며 새로운 현장 PC가 생겨도 확장하는데 용이함 또한 기능적인 분산 처리가 가능함
- 네트워크 트래픽 감소 : HTTP 통신 대비 헤더 정보 간소화로 네트워크 트래픽 감소로 네트워크 비용 감소로 이어짐
- 단순화된 서버 구조 : 데이터 수집 및 전송 과정을 하나로 관리하며 웹 서버와 분리시켜 서버 구조적 측면에서 효율적임
'Infra > MSA' 카테고리의 다른 글
MSA 아키텍처 패턴 (0) | 2022.05.29 |
---|---|
MSA를 위한 기술들 (0) | 2022.05.28 |
MSA를 위한 기술 (0) | 2022.05.26 |
MSA 분리 전략 : 도메인 주도 설계 (0) | 2022.05.01 |
MSA 도입을 위한 역량 및 필요조건 (0) | 2022.04.15 |