Flutter와 라즈베리 파이: 60FPS 임베디드 키오스크 개발 가이드

Electron으로 라즈베리 파이 키오스크를 돌리다 메모리 누수와 팬 소음에 시달려 본 적이 있습니까? 혹은 Qt 라이선스 비용과 C++의 러닝 커브 때문에 망설였습니까? 우리는 Raspberry Pi 4에서 Flutter를 도입하여 메모리 사용량을 1/5로 줄이고 안정적인 60FPS를 확보했습니다. 이 글은 그 실전 기록입니다.

왜 임베디드에 Flutter인가? (vs Electron, Qt)

과거에는 크로스플랫폼의 꿈을 이루기 위해 무거운 웹 뷰(Web View) 기반 기술을 사용하거나, 개발 비용이 높은 네이티브 프레임워크를 선택해야 했습니다. Flutter 임베디드는 이 딜레마를 해결합니다.

프레임워크 메모리 점유 (Idle) 부팅 속도 개발 편의성
Flutter (Dart) ~60MB 빠름 (AOT 컴파일) 최상 (Hot Reload)
Electron (JS) ~300MB+ 느림
Qt (C++) ~40MB 매우 빠름 하 (높은 진입장벽)

특히 Kiosk 시스템처럼 장시간 켜져 있어야 하는 환경에서 Flutter의 렌더링 엔진(Impeller/Skia)은 하드웨어 가속을 통해 탁월한 퍼포먼스를 보여줍니다. UI 스레드와 비즈니스 로직 스레드의 분리는 터치 반응성을 극대화합니다.

Tip: 라즈베리 파이용 Flutter는 Sony가 주도하는 flutter-elinux나 커뮤니티 기반의 flutter-pi를 주로 사용합니다. 키오스크 모드에는 경량화된 flutter-pi가 유리합니다.

핵심 구현: flutter-pi를 이용한 경량화

X11이나 Wayland 같은 무거운 데스크톱 환경 없이, DRM(Direct Rendering Manager) 위에서 직접 그리는 방식을 채택해야 합니다. 이는 flutter-pi 프로젝트를 통해 가능합니다.

1. 환경 설정 및 빌드

라즈베리 파이 OS(Lite 버전 권장)에 필요한 의존성을 설치합니다.

# 라즈베리 파이 터미널
sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev \
    libegl1-mesa-dev libdrm-dev libgbm-dev ttf-mscorefonts-installer \
    fontconfig libsystemd-dev libinput-dev libudev-dev  \
    libxkbcommon-dev

2. 앱 빌드 (호스트 머신)

개발 머신(Mac/Windows)에서 라즈베리 파이용으로 빌드합니다. CPU 아키텍처(ARM64)를 맞춰주는 것이 핵심입니다.

# 호스트 머신(개발 PC)에서 실행
# 64비트 OS인 경우 linux-arm64, 32비트면 linux-arm
flutter build bundle --release

# 빌드된 자산을 라즈베리 파이로 전송 (scp 사용 예시)
scp -r ./build/flutter_assets pi@192.168.1.10:/home/pi/my_kiosk_app
주의: Flutter 버전과 호스트의 Dart 버전, 그리고 타겟 기기의 엔진 버전이 일치하지 않으면 ICU Data 관련 오류나 Snapshot hash mismatch 오류가 발생할 수 있습니다.

프로덕션 배포: Kiosk 모드 자동 실행

전원이 켜지자마자 앱이 실행되도록 systemd 서비스를 등록해야 합니다. 이는 상용 kiosk 제품의 기본 요건입니다.

# /etc/systemd/system/flutter-kiosk.service

[Unit]
Description=Flutter Kiosk App
After=network.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi
# flutter-pi 실행 명령어 (터치스크린 회전 등의 옵션 추가 가능)
ExecStart=/usr/bin/flutter-pi --release /home/pi/my_kiosk_app
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

서비스를 활성화합니다:

sudo systemctl enable flutter-kiosk
sudo systemctl start flutter-kiosk
성공 요인: 이 구성을 통해 OS 부팅 후 약 4~5초 만에 UI가 표시되는 'Instant-on' 경험을 제공할 수 있었습니다. 사용자 경험(UX) 측면에서 매우 중요한 포인트입니다.

결론

FlutterRaspberry Pi의 조합은 더 이상 실험적인 시도가 아닙니다. 이는 비용 효율적이고 강력한 임베디드 솔루션의 표준이 되고 있습니다. 기존의 무거운 웹 기술에서 벗어나, 하드웨어 성능을 100% 활용하는 네이티브 경험을 제공하십시오. 지금 바로 프로덕션 환경에 적용해 보시기 바랍니다.

Post a Comment