MQTT와 RTOS로 설계하는 저전력 IoT 디바이스

MQTT의 QoS와 Publish-Subscribe 구조, RTOS 스케줄링, 저전력 모드와 통신 최적화를 연결해 IoT 디바이스 설계 관점을 정리한다.

2026-08-14 · 최초 발행 2026-01-19

제한된 자원에서 통신과 응답 시간을 함께 다루는 방식

IoT 디바이스는 전력과 리소스가 제한된 상태에서도 네트워크 연결과 실시간 응답을 유지해야 한다. MQTT는 메시지 전송의 부담을 낮추고, RTOS는 작업의 실행 순서와 대기 상태를 제어한다. 여기에 슬립 모드와 통신 주기를 결합해야 저전력 동작이 가능해진다.

MQTT가 IoT 메시징에 맞는 이유

MQTT(Message Queuing Telemetry Transport)는 Publish-Subscribe 방식의 경량 메시징 프로토콜이다. TCP/IP 기반이지만 낮은 대역폭과 불안정한 네트워크를 고려하며, 2바이트 고정 헤더로 오버헤드를 줄인다. QoS(Quality of Service) 레벨을 통해 메시지 전달 신뢰성도 조절할 수 있다.

SubscribersPublishersMQTT BrokerPublishtemp/room1Publishhumidity/room1Subscribetemp/#Subscribe+/room1Subscribe#메시지토픽 라우팅센서 디바이스 1센서 디바이스 2모니터링제어 시스템분석 엔진

Broker는 토픽을 기준으로 메시지를 중개하고 라우팅한다. Publisher는 특정 토픽으로 데이터를 발행하며, Subscriber는 관심 있는 토픽을 구독한다. 구독에는 +, # 와일드카드를 사용할 수 있다.

전달 보장 수준은 다음과 같이 구분된다.

  • QoS 0(At most once): 메시지 전달 보장이 없고 오버헤드가 가장 낮다.
  • QoS 1(At least once): ACK를 사용해 최소 1회 전달을 보장한다.
  • QoS 2(Exactly once): 4-way 핸드셰이크로 정확히 1회 전달을 보장하며 가장 무겁다.

저전력 환경에서는 Keep-alive 타이머 간격을 길게 두어 하트비트 빈도를 줄일 수 있다. Clean Session 플래그는 세션 상태 유지 여부를 제어하고, Retained Message는 재연결한 클라이언트가 마지막 메시지를 즉시 받게 한다. Will Message는 비정상 종료 상황을 알리는 데 사용한다.

RTOS가 태스크 실행을 제어하는 방식

RTOS(Real-Time Operating System)는 실시간 응답을 보장하기 위한 임베디드 운영체제다. 결정론적(Deterministic) 동작을 통해 최악 실행 시간(WCET)을 예측할 수 있으며, 작은 커널 크기와 빠른 컨텍스트 스위칭이 특징이다. FreeRTOS, Zephyr, ThreadX, VxWorks가 대표적인 RTOS다.

아니오아니오태스크 준비우선순위선점 방식?Priority-basedPreemptiveCooperative또는 RR높은 우선순위태스크 즉시 실행동일 우선순위존재?Round-Robin시분할단일 태스크실행태스크가 자발적양보 전환

Preemptive Priority Scheduling에서는 높은 우선순위 태스크가 낮은 우선순위 태스크를 선점한다. Cooperative Scheduling은 태스크가 명시적으로 CPU를 양보할 때 전환된다. Round-Robin은 동일 우선순위 태스크에 시분할을 적용하며, EDF(Earliest Deadline First)는 마감 시간을 기준으로 작업을 선택한다.

낮은 우선순위 태스크가 자원을 점유한 상태에서 높은 우선순위 태스크가 대기하면 우선순위 역전(Priority Inversion)이 발생한다. Priority Inheritance는 자원을 점유한 태스크의 우선순위를 임시로 올리고, Priority Ceiling은 자원마다 최대 우선순위를 할당해 이를 다룬다.

태스크는 Ready, Running, Blocked, Suspended 상태를 오간다. 세마포어(Semaphore)는 자원 접근을 제어하며, 뮤텍스(Mutex)는 상호 배제와 Priority Inheritance를 지원한다. 이벤트 플래그는 태스크 간 동기화에 사용한다.

전력 소비를 줄이는 디바이스 설계

무선 통신은 IoT 디바이스의 주요 전력 소비원이다. MCU가 활성 상태와 슬립 상태를 어떻게 전환하는지도 전력 관리의 핵심이 된다.

45%20%15%10%10%"IoT 디바이스 전력 소비 비율 (예시)"무선 통신 (WiFi/BLE)센서 동작MCU 활성 모드주변장치 (LED 등)슬립 모드

전력 모드는 Active Mode, Idle Mode, Light Sleep, Deep Sleep, Hibernation으로 나눌 수 있다. Active Mode에서는 모든 기능이 동작하며 소비 전력이 가장 크다. Idle Mode에서는 CPU가 정지하지만 주변장치는 동작하고 인터럽트로 즉시 복귀한다. Light Sleep은 CPU와 일부 주변장치를 정지하면서 RAM을 유지한다. Deep Sleep은 대부분의 회로를 정지하고 일부 타이머와 GPIO만 활성화한다. Hibernation에서는 거의 모든 기능이 정지하며 외부 이벤트로만 복귀한다.

전력관리스케줄러태스크전력관리스케줄러태스크하드웨어 타이머로자동 복귀 설정대기 상태 진입모든 태스크 Blocked 확인Idle 시간 계산적절한 슬립 모드 선택슬립 모드 진입인터럽트 발생, 복귀태스크 재개

Tickless Idle은 다음 이벤트가 발생할 때까지 시스템 틱을 중지해 깊은 슬립을 가능하게 한다. Dynamic Voltage and Frequency Scaling (DVFS)은 부하에 따라 클럭과 전압을 조절한다. Peripheral Gating은 사용하지 않는 주변장치의 클럭을 차단한다.

통신 모듈은 Duty Cycling으로 주기적으로 활성화와 비활성화를 반복할 수 있다. 여러 센서 데이터를 모아 한 번에 전송하는 Data Aggregation, 변화가 감지될 때만 수집하는 Adaptive Polling도 활용 대상이다. BLE, Zigbee, LoRa 같은 Low-Power Wireless 프로토콜 역시 선택지다.

태스크와 메시지 큐로 연결하는 MQTT 클라이언트

RTOS 기반 MQTT 클라이언트에서는 센서 읽기와 통신을 별도 태스크로 분리할 수 있다. 태스크 사이에는 메시지 큐를 두고, 우선순위 설정으로 실시간성을 관리한다.

커뮤니케이션RTOS 태스크센서 데이터MQTT PublishMQTT Message센서 읽기 태스크(High Priority)MQTT Publish 태스크(Medium Priority)MQTT Subscribe 태스크(Medium Priority)제어 로직 태스크(Low Priority)메시지메시지네트워크

센서 읽기 태스크는 메시지 큐로 데이터를 넘기고, MQTT Publish 태스크가 이를 네트워크에 발행한다. 수신 메시지는 MQTT Subscribe 태스크에서 다른 메시지 큐를 거쳐 제어 로직 태스크로 전달된다.

MQTT 구현에서는 비동기 연결·송수신 API를 사용하고, MQTT 라이브러리의 상태 머신을 RTOS 태스크에 통합할 수 있다. 타임아웃을 설정하면 무한 대기도 피할 수 있다.

스마트 센서 노드에 적용한 구성

스마트 센서 노드는 ARM Cortex-M4 기반 저전력 칩(STM32L4 등), FreeRTOS, WiFi 모듈(ESP8266)과 MQTT 클라이언트로 구성할 수 있다. 센서에는 온도·습도(DHT22)와 조도(BH1750)를 사용하고, 전원은 배터리와 태양광 패널을 조합한다.

전력 프로파일의 단순 계산 예시는 다음과 같다.

  • Active(센서 읽기 + MQTT 전송): 150mA, 1초
  • Light Sleep(WiFi 유지): 15mA, 9초
  • Deep Sleep(주기적 웨이크업): 10μA, 600초
  • 평균 소비 전력: ((150×1 + 15×9) / 10 + 10×0.59) ≈ 29.5mA (단순 계산 예시)

태스크 우선순위는 긴급 알람 처리에 우선순위 1(최상)을 두고, 센서 데이터 수집에 우선순위 2, MQTT 통신에 우선순위 3, 로깅 및 진단에 우선순위 4를 둘 수 있다.

통신과 커널의 보안 경계

MQTT에서는 MQTT over TLS (포트 8883)를 이용한 TLS/SSL 암호화, Username/Password 또는 클라이언트 인증서를 통한 인증, ACL(Access Control List)의 토픽별 읽기·쓰기 권한 제어를 고려한다.

RTOS에서는 스택 크기와 가드 영역을 통해 스택 오버플로우를 방지하고, MPU(Memory Protection Unit)로 메모리 보호를 적용할 수 있다. 시큐어 부트는 펌웨어 무결성 검증에 사용한다.

디버깅과 전력 측정에 쓰는 도구

SEGGER SystemView는 실시간 트레이싱과 시각화를 제공하고, FreeRTOS+Trace는 태스크 실행 타임라인 분석에 사용된다. JTAG/SWD 하드웨어 디버거로는 브레이크포인트를 설정하고 변수를 감시할 수 있다.

MQTT Publish/Subscribe 테스트에는 MQTT.fx와 MQTT Explorer를 사용할 수 있다. Mosquitto는 경량 오픈소스 브로커와 커맨드라인 클라이언트를 제공하며, HiveMQ와 EMQX는 상용급 MQTT 브로커다.

평균 전류는 전류계(Multimeter)로 측정한다. 오실로스코프는 순간 전류 파형 분석에 쓰이며, Nordic Power Profiler Kit은 마이크로초 단위 전력 프로파일링을 지원한다.

MQTTRTOSIoT저전력 설계임베디드 시스템