오픈소스 임베디드 배지로 나만의 경험을 만들어보세요!

by DD
2일 전
조회수 0

Replay 컨퍼런스에서 2,000개의 하드웨어 배지를 깜짝 선물로 배포하며 개발자 경험을 향상시킴

ESP32-S3 기반의 해커블 컴퓨터(Hackable Computer)로, 펌웨어, 하드웨어 디자인, 커뮤니티 앱 인프라까지 오픈소스화함

임베디드 시스템(Embedded System)의 물리적 제약과 소프트웨어 개발의 유연성을 결합하여 새로운 가능성을 제시함

하드웨어 설계의 물리적 제약과 협업

임베디드 시스템 개발은 전력, 공간, 부품, 제조, 조립 등 물리적 제약과의 끊임없는 협상이 필수적임. ESP32-S3 모듈, OLED, LED 매트릭스 등 각 부품은 전력 소비와 타이밍 요구사항을 가지며, 이는 PCB 설계 및 제조 파일 관리에 복잡성을 더함. 특히, KiCad 프로젝트, 거버 파일, BOM, CPL 등 하드웨어 파일은 일반적인 소프트웨어 Git 저장소와 다른 관리 방식을 요구하며, 제조사 요구사항을 충족하기 위한 파일 형식과 명명 규칙 준수가 중요함. 이러한 과정에서 소프트웨어 개발자와 하드웨어 엔지니어 간의 상호 이해와 소통이 프로젝트 성공의 핵심 요소로 작용함.

펌웨어의 이중 역할: 즐거움과 확장성

배지 펌웨어는 사용자에게 즐거움과 놀라움을 선사하는 동시에, 쉬운 해킹과 확장을 위한 기반을 제공해야 하는 이중적 역할을 수행함. 네이티브 C++ 펌웨어는 부팅, UI, 입력 처리, 애니메이션, 스토리지, OTA 업데이트 등 핵심 기능을 담당하며, 이는 배지를 단순한 장치가 아닌 작은 운영 환경으로 만듦. MicroPython은 사용자가 낮은 진입 장벽으로 앱을 개발하고 기능을 확장할 수 있는 친화적인 계층을 제공하며, C++ 런타임과의 명확한 책임 분리를 통해 안정성을 확보함. 이러한 구조는 자원 소유권(Resource Ownership) 문제를 해결하고, 사용자에게 개인화된 경험을 제공하는 데 기여함.

메모리 제약 환경에서의 최적화 기법

16MB 플래시와 8MB PSRAM, 512KB 온칩 SRAM이라는 제한된 환경에서 메모리 사용량 최적화는 필수적임. 웹 환경과 달리 임베디드에서는 가비지 컬렉션(Garbage Collection) 지연이 UI 반응성과 하드웨어 타이밍에 직접적인 영향을 미침. 이를 위해 버퍼 재사용, 거대한 임시 객체 회피, 내부 SRAM과 PSRAM의 용도 구분 등 메모리를 설계 재료로 활용함. 또한, MessagePack과 같은 이진 직렬화 포맷(Binary Serialization Format)을 사용하여 JSON 대비 데이터 크기를 약 43% 절감하고, FatFS 파티션을 통해 플래시 메모리를 파일 시스템처럼 활용함. 이러한 최적화는 Doom과 같은 리소스 집약적인 애플리케이션 구동을 가능하게 함.

Doom을 통한 극한의 아키텍처 검증

Doom 게임 포팅은 배지의 자원 소유권 및 추상화 계층의 실효성을 검증하는 극한의 테스트베드 역할을 함. 4MB WAD 파일과 330KB 코드, 2MB PSRAM 할당 등 리소스 요구사항은 파티션 레이아웃, OTA 슬롯 크기 등 메모리 관리의 중요성을 부각시킴. 특히, Doom이 실행되는 동안 FreeRTOS 태스크를 통해 내부 SRAM 스택을 사용하고, 128x64 OLED로 160x100 렌더링을 수행하며, LED 매트릭스를 HUD로 활용하는 과정은 실시간 운영체제(RTOS)의 역할과 한계를 명확히 보여줌. 이러한 극한의 조건은 견고한 아키텍처 설계의 필요성을 강조하며, 물리적 할당(Physical Allocation)의 중요성을 일깨움.

Temporal 기반의 분산 플래싱 시스템 'Ignition'

수천 개의 배지를 효율적으로 플래싱하기 위해 Temporal 워크플로우를 활용한 분산 시스템 'Ignition'을 구축함. 이 시스템은 로컬 환경에서 작동하며, GitHub Releases에서 최신 팩토리 이미지를 다운로드하고, USB로 연결된 배지를 감지하여 병렬 플래싱, 재시도, 부팅 검증, 시계 동기화 등을 자동화함. 기존 팩토리 도구에 소프트웨어 제어 계층을 추가하여 각 장치의 상태를 추적하고 실패 원인을 파악하는 등 운영 가시성을 확보함. 이는 장기 실행 소프트웨어 프로세스에 주로 사용되는 Temporal의 유연성을 보여주며, 물리적 장치 배포라는 독특한 문제 해결에 효과적으로 적용됨.

오픈소스 생태계 구축과 커뮤니티 참여 유도

배지 프로젝트의 오픈소스화는 단순한 코드 공개를 넘어 펌웨어, 하드웨어 디자인, 문서, 플래싱 도구, 커뮤니티 앱 인프라를 포함하는 전체 생태계를 구축하는 것을 목표로 함. 이를 위해 개인 정보 및 이벤트 관련 내용 제거, 문서화, 소스 코드와 생성물 분리, 라이선스 명시 등 큐레이션 과정을 거침. 또한, 커뮤니티 앱 경로, 기여 규칙, 검토 절차를 마련하여 프로젝트의 지속적인 성장과 AI 에이전트를 포함한 미래 기여자들의 참여를 지원함. 궁극적으로 사용자가 배지를 검사, 수정, 수리, 재플래싱, 확장할 수 있도록 하여, 일회성 이벤트 상품을 넘어 두 번째 생명을 부여하고자 함.

How we turned the Replay keynote surprise into an open-source embedded playground