본문 바로가기
IoT

[Summary] IoT 프로젝트 정리

by 너드나무 2024. 5. 29.
728x90

서론

이번 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


초기 아키텍처

  1. Client -> Frontend -> Backend -> Database -> Backend -> MQTT
  2. MQTT 인증 만료 시 갱신에 필요한 정보를 FCM으로 재연결 수행
  3. 문제점
    1. 잦은 MQTT 연결 실패 (TCP 이슈)
    2. 연결 복구 후 해당 Set에 대한 원격 제어 보류 발생


개선 아키텍처

  1. Client -> Frontend -> Backend -> Database -> Backend -> FCM
  2. 단일 메세지 전송에 페이로드를 활용하여 기기 원격 제어 기능을 MQTT에서 FCM으로 이관
  3. TCP 방식이 아닌 Firebase 내 Token으로 인터넷 연결이 되어 있다면 수신받는 즉시 원하는 원격 제어 수행 가능


결론

  1. 소프트웨어 아키텍처 설계 시 MQTT를 정확하게 알고 가야 적절한 기술 스택을 고려할 수 있을 듯 하다.
  2. 이번 프로젝트에서는 MQTT 스터디를 병행하며 진행했으나, TCP 연결로 인한 Broker 재연결 시나리오에 대한 충분한 고려가 부족했다.
  3. 결국, MQTT를 과감히 배제하고 FCM으로 기능을 이관하여, MVP에 필요한 기능 및 동작 테스트를 모두 완료하였다.
728x90
반응형