제3부 소프트웨어 스택
3.3 Arduino App Lab 아키텍처
제3부 소프트웨어 스택. MPU의 Debian(3.1)과 MCU의 Zephyr 기반 Arduino Core(3.2)를 각각 봤으니, 이제 그 둘을 실제로 "하나의 개발 경험"으로 묶어 주는 소프트웨어 — Arduino App Lab을 본다. App Lab 내부에서 MPU-MCU 통신을 실제로 처리하는 메커니즘(Bridge)은 다음 장 3.4에서, 스케치를 처음 작성하는 실습 워크플로우는 제4부(4.1~4.4)에서 다룬다.
3.3.1 App Lab이란
App Lab은 UNO Q 같은 "듀얼 브레인" 보드 세대를 위해 Arduino가 새로 만든 통합 개발 환경이다. 공식 소개 문구를 그대로 옮기면:
"Discover the unified environment for creating Arduino Apps for the new generation of dual-brain Arduino boards. Focus on application logic and compose your project by stacking together ready-to-use Arduino Bricks." — Arduino App Lab
조금 더 구체적으로는 UNO Q User Manual이 이렇게 풀어 설명한다.
"Arduino App Lab lets you seamlessly combine Arduino sketches, Python scripts, and containerized Linux applications into a single workflow. With code building blocks called Bricks, preconfigured AI models, and integrated orchestration, it reduces complexity while enabling you to create everything from simple prototypes to advanced, computation-intensive applications."
핵심은 "하나의 앱(App)" 개념이다. App Lab의 App은 MCU에서 실행되는 스케치(sketch/sketch.ino), MPU에서 실행되는 Python 진입점(python/main.py), 그리고 필요하면 재사용 가능한 컴포넌트인 Brick(AI 모델, 웹 UI, 카메라 파이프라인, DB 연결 등)을 한데 묶은 프로젝트 단위다. 각 App은 app.yaml 매니페스트로 정의된다. App Lab은 이 조합을 빌드·배포·실행·모니터링하는 역할을 맡는다.
App Lab은 UNO Q에 사전 설치되어 출고된다. PC용 데스크톱 앱(Windows/macOS/Linux)도 별도로 배포된다.
3.3.2 4대 기능
Arduino 공식 스토어의 UNO Q 제품 페이지는 App Lab의 핵심 기능을 네 가지로 요약한다. 이 문구는 store.arduino.cc/products/uno-q 제품 상세 설명에서 직접 확인한 원문이다.
"Visual Bridge: Effortlessly manage communication between the Linux OS (MPU) and the Arduino hardware (MCU). One-Click AI: Deploy pre-trained machine learning models directly to the Qualcomm AI engine. Real-Time Dashboard: Monitor system health, CPU load, and pin status via a sleek, web-based interface. Remote Management: Perform Over-the-Air (OTA) updates for both firmware and Linux packages."
표로 정리하면 다음과 같다.
| 기능 | 한 줄 설명 | 깊게 다루는 장 |
|---|---|---|
| Visual Bridge | MPU(Linux)와 MCU(Arduino) 사이의 통신을 관리 | 3.4 |
| One-Click AI | 사전 학습된 머신러닝 모델을 Qualcomm AI 엔진에 배포 | 9.2 |
| Real-Time Dashboard | CPU 부하·핀 상태 등 시스템 상태를 웹 UI로 모니터링 | 아래 3.3.5 참조 |
| Remote Management | 펌웨어·리눅스 패키지의 OTA(무선) 업데이트 | 5.3 |
⚠️ 정직성 노트: 이 네 이름("Visual Bridge" 등)은 store.arduino.cc 제품 소개 페이지의 마케팅 문구에서 확인한 것이다. 기술 문서 사이트인 docs.arduino.cc의 App Lab 문서 구조(Setup·Configure·Getting Started·Apps·Bricks·Bridge·CLI·Integrations)는 이 네 이름과 1:1로 대응하지 않는다 — 예를 들어 기술 문서 쪽 명칭은 "Visual Bridge"가 아니라 단순히 "Bridge"다(3.3.4, 3.4에서 실체를 다룬다). "One-Click AI"·"Real-Time Dashboard"라는 이름의 전용 기술 문서 페이지는 이 책 집필 시점 기준으로 별도로 확인하지 못했다 — 실제 구현은 App Lab의 Settings 페이지(시스템 정보·디스크·네트워크 표시, 3.3.5)와 Bricks 생태계(AI 모델 배포, 9.2) 쪽에서 그 기능적 실체를 찾을 수 있었다. 요컨대 "네 가지 기능"은 제품이 실제로 하는 일을 정확히 가리키지만, 그 브랜드 이름 자체는 공식 기술 문서보다 제품 페이지 쪽 표현이라는 점을 염두에 두고 읽는 것이 정직하다.
3.3.3 두 가지 사용 모드
App Lab은 어디서 실행되느냐에 따라 크게 두 가지 모드로 쓸 수 있다.
① SBC(Single-Board Computer) 모드: UNO Q 자체를 독립 컴퓨터로 쓴다. USB-C 멀티포트 어댑터(전원 공급 겸용, Apple 제품 제외)에 HDMI 디스플레이·키보드·마우스를 연결하면, 보드가 부팅하면서 App Lab이 자동으로 열려 최초 1회 보드 설정 과정을 안내한다. 이후로도 App Lab은 부팅 때마다 자동 실행되며, 보드와 의존성을 최신 버전으로 갱신한다. Arduino는 이 독립형 사용 경험에는 4 GB RAM 모델을 권장한다.
② PC-hosted 모드: PC에 App Lab 데스크톱 앱을 설치해 보드를 원격으로 다룬다. 여기서도 다시 두 경로가 있다.
- Connected(USB-C) 모드: 보드를 USB-C 케이블로 PC에 직결. 네트워크 설정 없이 바로 인식된다 — 초기 설정이나 오프라인 환경에 유리하다.
- Network 모드: 보드가 SBC 모드로 서 있어도, PC의 App Lab이 mDNS로 같은 로컬 네트워크의 보드를 자동 검색해 원격 접속한다. 두 모드는 동시에 쓸 수 있다.
Network 모드는 mDNS(UDP 5353) 검색에 의존하므로, 게스트 Wi-Fi·회사망·VPN·엄격한 방화벽 환경에서는 보드가 목록에 표시되지 않을 수 있다 — 이 경우도 SSH·IP로는 접속 가능한데 App Lab Network 모드 목록에는 표시되지 않는 상황이 생길 수 있다는 점을 공식 문서가 명시한다. Windows에서는 최초 실행 시 mdns-discovery.exe에 대한 방화벽 허용 프롬프트가 표시되는데, 반드시 허용해야 검색이 된다.
Linux 호스트에서 PC-hosted 모드를 쓰려면 USB 장치 접근 권한(udev 규칙)을 별도로 설정해야 한다는 점도 알아 둘 만하다 — 보드의 정상 동작 모드(VID 2341, PID 0078)와 펌웨어 플래싱용 EDL 모드(VID 05c6, PID 9008) 둘 다 규칙이 필요하며, ArduinoCore-zephyr 저장소의 post_install.sh 스크립트가 이를 자동화해 준다.
3.3.4 내부 구성 — App, Brick, CLI
App Lab이 다루는 단위를 다시 정리하면:
- App: 프로젝트 전체 단위.
app.yaml(메타데이터·사용 Brick 목록) +python/main.py(MPU 진입점) + 필요시sketch/sketch.ino(MCU 코드)로 구성된다. - Brick: 재사용 가능한 기능 블록. AI 모델, 웹 UI, 카메라 파이프라인, 데이터베이스 연결 같은 것을 격리된 컨테이너로 제공하고, Python 앱이 쓸 고수준 API를 노출한다.
- arduino-app-cli: 보드에 사전 설치된 CLI. App Lab GUI 없이도 앱을 빌드·시작·정지·목록 조회할 수 있다 — SSH로 headless 자동화할 때 특히 유용하다.
arduino-app-cli app list # 설치된 App 목록
arduino-app-cli app start examples:blink # 예제 App 실행
arduino-app-cli app stop examples:blink # 정지
arduino-app-cli properties set default user:<App이름> # 부팅 시 자동 실행 App 지정
- arduino-cli: App Lab과 별개로, MCU 코어·라이브러리를 직접 관리하고 싶을 때 쓰는 표준 Arduino CLI. UNO Q 개발에는 App Lab·
arduino-app-cli쪽이 보드 아키텍처(MPU-MCU 통신 자동 처리)에 맞춰 설계돼 있어 우선 권장된다.
3.3.5 Real-Time Dashboard의 실체 — App Lab Settings
"Real-Time Dashboard"라는 이름에 정확히 대응하는 단일 화면은 기술 문서에서 별도로 특정하지 못했지만, 그 기능이 실제로 구현된 곳은 App Lab의 Settings(설정) 페이지로 확인된다. 좌측 사이드바의 톱니바퀴 아이콘으로 들어가면 다섯 구획으로 나뉜다.
| 구획 | 보여주는 것 |
|---|---|
| Arduino App Lab | App Lab 자체 버전, 최신 여부 |
| Device Details | 보드 이름·모델(ARDUINO UNO Q)·FQBN(arduino:zephyr:unoq)·시리얼 번호·디스크 사용량 |
| System Info | 시스템 버전(업데이트 버튼 포함), 릴리스 노트, 키보드 언어, OS 비밀번호 변경, SSH 원격 접속 토글 |
| Operating system | 빌드 버전, Linux Distribution, Kernel Version, 릴리스 날짜, 다른 OS 이미지로 플래시 |
| Network Connections | 현재 연결된 Wi-Fi SSID·IP, 네트워크 전환 |
"CPU 부하·핀 상태"까지 실시간으로 보여주는 좁은 의미의 대시보드 화면은 이 책 집필 시점에 별도로 확인하지 못했다(App Lab 버전이 갱신되며 추가됐을 가능성이 있다 — 각자 App Lab 버전에서 직접 확인 필요). 다만 Settings 페이지의 Operating system 구획이 3.1.2에서 다룬 Debian 버전 확인의 GUI 경로이기도 하다는 점은 실전에서 바로 쓸모가 있다.
3.3.6 엣지케이스
- App Lab이 보드를 못 찾음(USB): 특히 Linux 호스트에서 흔하다 — udev 규칙 미설정이 원인인 경우가 대부분(3.3.3 참조). 연결 실패가 조용히 일어나므로, 브라우저 개발자 도구(App Lab은 웹 기술 기반 UI를 쓴다) 콘솔에서 권한 오류 메시지를 확인해야 원인이 보일 때가 많다.
- SBC 모드 자동 갱신: SBC 모드의 App Lab은 부팅마다 보드·의존성을 최신으로 자동 갱신한다 — 오프라인·에어갭 환경에서 예상치 못한 지연·실패로 이어질 수 있다는 점을 염두에 둔다.
- Network 모드로 보인다고 항상 최신 보드 상태는 아님: mDNS 검색 목록과 실제 SSH/IP 접근 가능 여부가 항상 일치하지는 않는다(3.3.3).
3.3.7 다음으로
App Lab이 내세우는 첫 번째 기능 "Visual Bridge"의 실제 구현 — Bridge 라이브러리, arduino-router 서비스, RPC 프로토콜 — 은 다음 장 3.4에서 깊이 들어간다. "One-Click AI"는 GPU·AI 엔진 하드웨어를 다루는 제9부, 특히 9.2에서, "Remote Management"의 OTA 메커니즘은 5.3에서 각각 실전 다룬다. App Lab로 실제 스케치·Python 앱을 처음 작성하는 손동작은 제4부(4.1~4.4)로 이어진다.