IoT 애플리케이션을 위한 최적의 프로토콜 ‘MQTT’

2021.12.27 13:57:55

헬로티 서재창 기자 |

 

사물 인터넷(IoT)에서 통신은 필수며, 애플리케이션마다 통신에 대한 요구가 다를 수 있다. 인더스트리 4.0 공장에서 생산 라인 장비는 중앙 컨트롤러의 명령에 실시간으로 응답해야 하므로 네트워크 지연이 매우 짧아야 한다. 배터리로 구동되는 토양 상태 모니터링용 원격 센서는 대부분의 시간을 대기 모드에 있다가 짧은 데이터 패킷을 전송할 때만 구동하면 된다. 

 

애플리케이션들은 셀룰러 네트워크, 무선 기술(와이파이, 블루투스 등), 유선 이더넷, 위성 등 다양한 방식의 커넥티비티를 사용할 수 있다. 어떠한 디바이스의 IoT 기술 스택에 있어 통신 프로토콜은 핵심적인 역할을 하며, 이는 선택한 전송 매체를 통해 IoT 디바이스 혹은 사물과 애플리케이션 사이에서 구조화된 데이터 교환을 가능하게 한다. 

 

다양한 IoT 애플리케이션의 요구를 충족하기 위해 CoAP, XMPP, DDS 같은 다양한 프로토콜이 개발됐다. 이들 가운데, 계속 성장 중인 저전력 광대역(LPWA) 통신망용으로 가장 널리 채택되고 있는 것이 MQTT(Message Queuing Telemetry Transport)와 이의 파생 버전인 MQTT-SN(Sensor Network)이다. 

 

MQTT 프로토콜

 

경량 프로토콜로서 MQTT의 단순한 아키텍처와 작은 코드 사이즈는 IoT 애플리케이션의 저가형 저전력 마이크로컨트롤러와 잘 어울린다. MQTT는 TCP/IP 프로토콜을 통해서 실행되며, 품질을 중요하게 요구하지 않고 지연시간이 긴 네트워크용으로 적합하도록 설계됐다. 특히 이 프로토콜은 다음과 같은 점을 중시하는 애플리케이션에 최적이다. 

 

• 최소한의 대역폭 사용
• 무선 네트워크 연결성
• 저전력 소모
• 높은 신뢰성(필요한 경우)
• 최소한의 프로세싱 및 메모리 자원 요구

 

MQTT는 스마트 계량기, 자산 추적 장치, 산업용 장비의 커넥티드 센서 같은 IoT 애플리케이션에 널리 채택되고 있다. MQTT는 대역폭을 효율적으로 활용할 수 있으므로, 예컨대 현장 수리가 필요 없이 수 년 동안 자율적으로 동작할 필요가 있는 원격 센서 배열과 같이 네트워크 비용이 높고 전력 소모를 중요하게 요구하는 애플리케이션용으로 적합하다. 코드 사이즈가 작고, 정보를 한 명 또는 그 이상의 많은 구독자들에게 효율적으로 배달할 수 있다는 점에서 모바일 애플리케이션에도 이상적이다.

 

MQTT의 작동 원리

 

MQTT는 클라이언트-서버 모델이 아니라 발행-구독 기반으로 동작하며, MQTT 브로커와 MQTT 클라이언트라고 하는 두 가지 기능 항목을 활용한다. IoT 네트워크상의 어떠한 사물(디바이스 또는 애플리케이션)이든 MQTT 클라이언트가 될 수 있다.

 

클라이언트들은 상호 간에 직접 소통하는 것이 아니라, MQTT 브로커가 관리하는 토픽에 메시지를 발행하거나 구독한다. 토픽은 이메일 수신함과 같은 것으로서, 클라이언트가 토픽에게 메시지를 발행하면 해당 토픽을 구독하는 어떤 클라이언트이든 이 메시지를 수신할 수 있다.

 

MQTT 브로커는 발행된 모든 메시지를 수신하고 모든 구독 클라이언트들에게 배달되도록 하는 일을 맡는다. 메시지 발행은 일련의 합의된 QoS 레벨에 따라서 이뤄진다(그림 1). 또한 브로커는 네트워크 상의 모든 IoT 디바이스를 인증하며 연결, 세션, 구독을 관리한다. 

 

 

MQTT-SN

 

MQTT-SN은 MQTT를 보다 더 향상된 데이터 전송 효율과 전력 소모를 필요로 하는 대규모 무선 센서 네트워크용으로 최적화한 버전이다. MQTT-SN은 토픽 ID의 길이를 줄임으로써 데이터 전송 효율을 높인다. 클라이언트와 브로커 모두에 단축 ID를 사용해 제어 메시징 또한 짧게 줄인다. 또한, MQTT-SN에 keep-alive 모드를 사용하면 디바이스가 대기 모드로 있다가 복귀했을 때 대기열에 저장된 메시지를 꺼내볼 수 있다. 

 

MQTT의 기본 개념


브로커와 클라이언트 항목 외에도, 다음과 같은 개념들이 MQTT와 MQTT-SN 동작의 중추 역할을 한다.

 

MQTT 토픽


토픽은 MQTT가 대역폭을 효율적으로 활용하도록 하는 것으로서, 그림 2에서 보듯이 다중 레벨 구조로 이뤄진다. MQTT 클라이언트는 자신이 관심 있는 토픽만 구독할 수 있으며, 와일드카드 항목을 사용해 여러 토픽에 액세스할 수 있다. 

 

 

디바이스들은 자신이 구독하는 토픽들에게서만 데이터를 수신할 수 있기에, MQTT 토픽은 디바이스가 IoT 네트워크를 통해서 데이터 플로우를 효율적으로 구조화할 수 있다.

 

연결

 

MQTT 클라이언트는 메시지를 발행 또는 구독하려면 브로커와 연결이 이뤄져야 한다. 클라이언트가 자신의 ClientID, 사용자 이름, 패스워드를 제공하면서 CONNECT 요청을 보내면, 브로커가 이를 확인한다. 연결 요청은 다음과 같은 파라미터들과 함께 제공될 수 있다. 

 

Clean Session – 연결 요청이 구독자 대기열에 저장돼 있는 메시지도 소거할 수 있도록 한다.

 

Keep Alive – 브로커나 클라이언트로부터 어떠한 메시지도 전송되지 않을 때 켜져 있어야 하는 시간 간격을 정의함으로써 배터리 구동 디바이스가 대기 모드로 전환할 수 있도록 한다. 이 기간 동안 클라이언트에 전달되는 모든 메시지는 정해진 시간이 끝날 때까지 브로커에 의해 저장된다. 

 

Sleep(MQTT-SN에만 해당) – 어떤 디바이스가 자신이 대기 모드로 들어간다고 브로커에게 통보하면 브로커는 이 기간 동안 모든 구독 메시지를 대기열에 저장한다. Keep Alive 모드와 다른 점은 QoS 레벨에 상관없이 모든 메시지를 저장한다는 점이다. Keep Alive 모드는 QoS 1과 QoS 2 메시지만 저장한다. 또한 Sleep 모드는 클라이언트가 구동할 필요 없이 자신의 메시지 대기열을 비울 수 있다. 

 

구독


클라이언트는 구독(SUBSCRIBE) 요청을 통해 하나 혹은 여러 개의 토픽을 구독할 수 있으며, 그림 3a 및 3b에서 보듯이 두 가지 와일드카드 항목을 사용할 수 있다. 단일 레벨(+) 와일드카드는 하나의 토픽 레벨을 대체한다. 따라서 ‘sensors/+/out’이면 다음과 같은 토픽을 구독할 수 있다. 

 

• sensors/soil/out
• sensors/water/out
• sensors/light/out

 

 

멀티 레벨(#) 와일드카드는 여러 토픽 레벨을 대체한다. 따라서 이 와일드카드는 다음과 같은 토픽들을 구독할 수 있다. 

 

• sensors/soil/out
• sensors/soil/in
• sensors/temperature/out

 

 

QoS

 

MQTT와 MQTT-SN은 QoS(Quality of Service) 개념을 사용해 발행자가 메시지 품질을 정의할 수 있다. 표 1은 이들 모드를 설명하고 특정 애플리케이션 요건에 따라 어떻게 활용할 수 있는지 보여준다. 

 

QoS 모드 설명 특징 활용
QoS – 1
(보내고 잊음)
MQTT-SN 메시지를 전송하고 확인응답은 받지 않음 - MQTT 연결 불필요 • 확인응답 안함
• 재시도 안함
• 중요도 낮은 메시지
• 저전력 디바이스를 위해 네트워크 시간 최소화
• 메시지 비용 최소화
QoS0
(최대 한 번)
메시지를 전송하고 확인응답은 받지 않음 • 최선 정책
• 재시도 안함
• 연결이 끊어진 클라이언트에 대해 큐잉 안함
• 중요도 낮은 메시지
• 저전력 디바이스를 위해 네트워크 시간 최소화
• 메시지 비용 최소화
QoS1
(최소 한 번)
메시지를 최소 한 번 이상 전송하고, 중복 수신 허용 • 전송 보장
• 확인응답을 받을 때까지 재시도

• 중요도 낮은 메시지
• 저전력 디바이스 위해 네트워크 시간 최소화
• 메시지 비용 최소화

• 중요도 높은 메시지
• 수신 클라이언트가 중복 처리
• 오프라인 클라이언트를 위해 메시지를 저장해야 하는 경우

QoS2
(정확히 한 번)
메시지가 단 한 번만 전송되도록 보장하기 위해 중복 수신 제어 • 최대의 오버헤드
• 4번의 핸드셰이크를 사용해서 중복 수신 방지
• 중요도 높은 메시지
• 중복이 문제를 일으킬 수 있음

▲ 표 1

 

구독 또한 관련 QoS 설정을 할 수 있는데, 발행된 메시지의 QoS를 낮추도록 설정할 수 있으며, 메시지가 항상 보다 낮은 QoS 설정으로 발행되도록 할 수 있다. 

 

맺음말

 

MQTT는 자동차, 정유, 제조, 텔레콤 등 다양한 분야의 애플리케이션에 사용된다. 이 프로토콜은 IoT 분야에 널리 채택되고 있으며, 개발자들의 작업을 돕기 위해서 브로커와 클라이언트 라이브러리를 포함한 다양한 툴들이 제공된다.

 

통신은 단지 연결만 하면 되는 것이 아니다. 유블럭스의 서비스로서의 IoT 통신(IoT Communication-as-a-Service) 포트폴리오(그림 4)는 MQTT Anywhere, MQTT Here, MQTT Now의 세 가지 제품을 통해 세계 어느 곳에서나 IoT 디바이스로부터 손쉽게 데이터를 획득할 수 있게 해준다.

 

확장가능한 고성능 MQTT 브로커와 강력한 데이터 플로우 매니저의 토대 위에 구축된 이들 제품은 메시지의 처리, 변환, 엔터프라이즈 시스템에 대한 통합 작업을 간편하게 만들어준다. 

 

 

경쟁이 치열한 오늘날에는 개발 시간 단축이 매우 중요하다. 유블럭스는 MQTT의 장점을 활용하여 IoT 디바이스와 엔터프라이즈 장비 간 데이터 통신을 손쉽게 구현할 수 있게 해준다. 

에릭 하이저 유블럭스 서비스 제품 센터 총괄 책임 eled@hellot.net
Copyright ⓒ 첨단 & automationasia.net



상호명(명칭) : ㈜첨단 | 등록번호 : 서울,아54000 | 등록일자 : 2021년 11월 1일 | 제호 : 오토메이션월드 | 발행인 : 이종춘 | 편집인 : 임근난 | 본점 : 서울시 마포구 양화로 127, 3층, 지점 : 경기도 파주시 심학산로 10, 3층 | 발행일자 : 2021년 00월00일 | 청소년보호책임자 : 김유활 | 대표이사 : 이준원 | 사업자등록번호 : 118-81-03520 | 전화 : 02-3142-4151 | 팩스 : 02-338-3453 | 통신판매번호 : 제 2013-서울마포-1032호 copyright(c)오토메이션월드 all right reserved