[Summary] IoT 프로젝트 정리
서론
이번 IoT 프로젝트에 대한 MVP가 완료되면서 발생했던 이슈와 간략한 아키텍처를 정리해본다.
MQTT, FCM, Android 등 관련 개념을 살펴보고 최종적으로 적용된 내용을 정리해보자.
이론적 배경
- Hardware (Krizer U4X CM BT, Rockchip RK3229)
- CPU : 4 Core, Rem : 2GB, Flash : 8GB
- OS : Android 5.1 Lolipop
- 화면 회전, ROOT 권한, ADB 접근 등 IoT 디바이스 개발 환경 활용
크라이저(Krizer) U4X CM BT (RK3229 칩셋 탑재) : 크라이저 공식몰 eshop
스마트한 세상을 만드는 크라이저 공식 쇼핑몰
eshop.krizer.com
- Backend
- FastAPI, 운영 데이터베이스에서 데이터 처리 후 IoT 원격 제어 관리
FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com
- Frontend
- Servlet, 관리자 페이지 등에서 UX/UI를 통해 IoT 원격 제어를 백엔드에 요청
Servlet API Documentation
tomcat.apache.org
- Local Web Server Application (Android)
- 인터넷이 단절된 상황에서도 IoT가 독자적으로 동작할 수 있게 local 웹 서버를 구동시켜주는 애플리케이션
웹 서버란 무엇일까? - Web 개발 학습하기 | MDN
여기서 우리는 웹 서버가 무엇인지, 어떻게 동작하는지, 왜 중요한지를 알아볼 것입니다.
developer.mozilla.org
- IoT Service Application (Android)
- IoT 프로젝트의 서비스 기능을 지원하는 애플리케이션
- Local Web Server에서 호출하는 웹뷰 화면을 보여주는 기능 수행
webview_flutter - Dart API docs
WebView for Flutter A Flutter plugin that provides a WebView widget. On iOS the WebView widget is backed by a WKWebView. On Android the WebView widget is backed by a WebView. Android iOS Support SDK 19+ or 20+ 12.0+ Usage Add webview_flutter as a dependenc
pub.dev
- MQTT, Message Queueing Telemetry Transport
- 메세지 큐 방식으로 보낼 수 있는 경량 메세지 전송 프로토콜
- 저전력 장치나 네트워크 대역폭이 제한된 환경인 IoT에서 주로 사용
- Client가 Broker에 메세지를 게시하고 다른 Client가 해당 메세지를 구독하는 구조로 수행
MQTT란 무엇인가요? - MQTT 프로토콜 설명 - AWS
MQTT는 머신 대 머신 통신에 사용되는 표준 기반 메시징 프로토콜 또는 규칙 세트입니다. 스마트 센서, 웨어러블 및 기타 사물 인터넷(IoT) 디바이스는 일반적으로 리소스 제약이 있는 네트워크를
aws.amazon.com
- FCM, Firebase Cloud Messaging
- 안드로이드 디바잇에 메시지를 안정적으로 무료 전송할 수 있는 크로스 플랫폼 메시징 솔루션
- 최대 4,000바이트의 페이로드를 클라이언트 앱에 전송 가능
Firebase 클라우드 메시징
Firebase 클라우드 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 크로스 플랫폼 메시징 솔루션입니다.
firebase.google.com
초기 아키텍처
- Client -> Frontend -> Backend -> Database -> Backend -> MQTT
- MQTT 인증 만료 시 갱신에 필요한 정보를 FCM으로 재연결 수행
- 문제점
- 잦은 MQTT 연결 실패 (TCP 이슈)
- 연결 복구 후 해당 Set에 대한 원격 제어 보류 발생
개선 아키텍처
- Client -> Frontend -> Backend -> Database -> Backend -> FCM
- 단일 메세지 전송에 페이로드를 활용하여 기기 원격 제어 기능을 MQTT에서 FCM으로 이관
- TCP 방식이 아닌 Firebase 내 Token으로 인터넷 연결이 되어 있다면 수신받는 즉시 원하는 원격 제어 수행 가능
결론
- 소프트웨어 아키텍처 설계 시 MQTT를 정확하게 알고 가야 적절한 기술 스택을 고려할 수 있을 듯 하다.
- 이번 프로젝트에서는 MQTT 스터디를 병행하며 진행했으나, TCP 연결로 인한 Broker 재연결 시나리오에 대한 충분한 고려가 부족했다.
- 결국, MQTT를 과감히 배제하고 FCM으로 기능을 이관하여, MVP에 필요한 기능 및 동작 테스트를 모두 완료하였다.