IoT · 모바일 · 스마트홈

SmartControl IoT
24종 가전 통합 제어

5개로 흩어진 제조사 앱을 하나로 통합했습니다. MQTT 기반 실시간 명령, OTA 펌웨어 자동 배포, 생체 인증을 9개월간 설계·구현·운영했습니다.

클라이언트
S* Smart Home
가전 OEM
산업
스마트홈 IoT
B2C 앱
기간
9개월
2024.01–2024.09
역할
RN + Node
+ MQTT 운영
기존 문제

24종 기기를 5개 다른 앱으로 제어해야 했고 펌웨어 업데이트는 수동 USB 방식, OTA 성공률 67%. 사용자 이탈이 누적되며 앱스토어 평점은 3.2점까지 떨어진 상태였습니다.

수치 출처 및 익명화 안내 Anonymized
본 사례의 정량 KPI 는 고객사(S* Smart Home, 가전 OEM) 운영 데이터와 공개 앱스토어 지표 기반이며, NDA 에 따라 매출·판매대수·구체 모델명 등 식별 정보는 비공개·익명 처리되어 있습니다. 비교 수치는 신앱 출시 이전 구앱 평균과 출시 후 6개월(2024.10-2025.03) 평균을 비교한 값이며, 응답시간·OTA 성공률은 자체 백엔드(Node.js + HiveMQ) 로그, 평점은 App Store / Google Play 공개 통계에서 추출했습니다.
02 · APPROACH

왜 이 솔루션이었나

실시간성 · 신뢰성 · 배포 자동화 세 축에서 출발한 의사결정.

MQTT QoS 1 + Last Will

HTTP 폴링 대신 영구 연결 기반. QoS 1로 명령 유실 방지, Last Will로 기기 오프라인 즉시 감지.

React Native 단일 코드베이스

iOS · Android 95% 코드 공유. 네이티브 모듈은 BLE/WiFi 페어링과 생체 인증 두 곳만 분리.

OTA 점진적 롤아웃

5% → 25% → 100% 카나리 배포. 실패율 임계치를 넘으면 자동 롤백, 펌웨어 성공률 67% → 99.2%.

생체 인증 + 디바이스 페어링

Face ID/지문 인증 + 디바이스별 고유 인증서. 가전이 네트워크에 노출되어도 명령 변조 불가능.

03 · ARCHITECTURE

시스템 구조

Mobile App React Native iOS + Android API Server Node.js + WS JWT · Redis MQTT Broker HiveMQ Cluster QoS 1 · Retain 조명 · 콘센트 10종 에어컨 · 공청 8종 로봇청소기 외 6종 PostgreSQL 기기 메타 · 이력 OTA Service AWS S3 · Canary AWS IoT Core Shadow · Cert
Mobile (RN)

단일 코드베이스로 iOS/Android. 생체 인증과 BLE 페어링은 네이티브 모듈로 분리. WebSocket으로 실시간 상태 수신.

API + WebSocket

Node.js Express + ws. JWT 인증과 디바이스 ACL 검증 후 MQTT 발행. Redis로 디바이스 온라인 상태 캐싱.

MQTT Broker

HiveMQ 클러스터 3노드. QoS 1로 명령 보장, Retain 메시지로 마지막 상태 복원, Last Will로 오프라인 즉시 감지.

Device Shadow

AWS IoT Core Shadow로 디바이스 desired/reported 상태 분리. 오프라인 중 명령은 Shadow에 보관되었다가 재연결 시 적용.

04 · STACK

기술 상세

Mobile
React Native 0.73 · TypeScript · Zustand · React Native Reanimated
단일 코드베이스 95% 공유, 네이티브는 BLE/생체인증만. Reanimated로 60fps 슬라이더 인터랙션.
Backend
Node.js 20 · Express · ws · Pino logging
실시간 명령 라우팅 + WebSocket fan-out. Pino 구조화 로그로 디바이스별 호출 추적.
Messaging
MQTT · HiveMQ 클러스터 3노드 · WebSocket bridge
디바이스는 MQTT, 앱은 WebSocket으로 양쪽 진입점을 분리. 클러스터 fail-over 자동.
Database
PostgreSQL 15 · Redis 7 · TimescaleDB (시계열 이력)
디바이스 메타와 사용자 정보는 PG, 실시간 상태는 Redis, 명령/측정 이력은 TimescaleDB로 압축.
Cloud
AWS IoT Core · S3 · Lambda (OTA 카나리 컨트롤러) · CloudWatch
IoT Shadow로 오프라인 명령 큐잉. S3에 펌웨어 바이너리, Lambda로 점진적 배포 로직 실행.
Auth
JWT · 디바이스 X.509 인증서 · Face ID/지문 (NativeModule)
사용자는 JWT, 디바이스는 mTLS 인증서. 명령 발행 전 양쪽 신원 모두 검증.
05 · RESULTS

성과 (2024.09 출시 기준) Aggregated

앱스토어 공개 6개월 운영 평균 (2024.10-2025.03). 식별 정보는 익명 처리되었습니다.

24
통합 기기 종류
5종 → 24종
PostgreSQL device_type 마스터 카운트 · 2024.09 출시 시점
145K
일평균 명령 처리
12K → 145K
MQTT 발행 메시지 일일 카운트 평균 · 2025.01-03 3개월 · HiveMQ 클러스터 메트릭
-86%
평균 응답시간
800ms → 110ms
앱 명령 발행 → 기기 ACK 왕복 P50 · 2025.03 1개월 · TimescaleDB 측정 이력
99.2%
OTA 펌웨어 성공률
67% → 99.2%
OTA 캠페인 완료 / 시도 비율 · 2024.10-2025.03 누적 12회 캠페인 · Lambda 컨트롤러 로그
4.7
App Store 평점
3.2 → 4.7
App Store + Google Play 평균 · 2025.03 30일 · 공개 스토어 통계
95%
iOS/Android 코드 공유
React Native 단일
공유 TS 라인 수 / 전체 (네이티브 모듈 제외) · scc 정적 분석
3
HiveMQ 클러스터 노드
무중단 fail-over
프로덕션 클러스터 구성 · 인프라 IaC (Terraform) 정의
9개월
설계부터 정식 출시
2024.09 LIVE
Kickoff 2024.01 → 정식 출시 2024.09 · 프로젝트 일정 기록
06 · LESSONS

회고

잘된 점

MQTT QoS 1 + Last Will + Retain 조합이 오프라인 기기 상태 추적의 결정타였습니다. 앱에서는 늘 최신 상태가 즉시 보였고, 오프라인 전환은 평균 3초 안에 감지. Device Shadow와 결합하면서 사용자는 기기가 잠시 꺼져 있어도 명령을 자유롭게 보낼 수 있었습니다.

어려웠던 점

BLE/WiFi 듀얼 연결 시 상태 동기화 race condition. 페어링 직후 BLE 응답과 클라우드 Shadow 업데이트가 거의 동시에 도착하면서 앱 상태가 깜빡거리는 현상이 있었고, 초기 5주간 재현이 일정하지 않아 디버깅이 가장 까다로웠습니다. 최종적으로는 BLE 응답에 명시적 sequence 번호를 부여해서 해결.

다시 한다면

처음부터 디바이스 시뮬레이터를 풍부하게 만들어 회귀 테스트를 자동화했을 것입니다. QA가 실물 기기 24종을 매번 확인하느라 회귀 테스트 1사이클이 평균 8시간 걸렸고, 이는 OTA 배포 속도의 직접적인 병목이었습니다. MQTT 가상 디바이스 풀과 시나리오 스크립트가 있었다면 CI 안에서 30분 안에 끝낼 수 있었습니다.

IoT · 모바일 앱이
필요하신가요?

디바이스부터 클라우드, 모바일까지 풀스택 IoT 시스템을 설계합니다.