Embassy - Rust와 async 기반의 현대적 임베디드 프레임워크
(github.com/embassy-rs)- 안전하고 효율적인 임베디드 애플리케이션을 빠르게 개발할 수 있도록 설계된 차세대 프레임워크
- 런타임이나 가비지 컬렉터 없이 컴파일 타임 메모리·스레드 안전성을 확보하며, RTOS 없이도 멀티태스킹을 수행
- HAL, 네트워킹, Bluetooth, USB, 부트로더 등 주요 기능을 포함해 다양한 마이크로컨트롤러를 지원
- 저전력 설계와 우선순위 기반 실행기(executor) 로 실시간 처리와 배터리 수명을 모두 고려
- Rust 생태계와 결합된 비동기 임베디드 개발의 대표 플랫폼으로 자리잡고 있음
Embassy 개요
- Embassy는 Rust와 async 기능을 이용해 임베디드 애플리케이션을 안전하고 효율적으로 작성할 수 있는 차세대 프레임워크
- 런타임, 가비지 컬렉터, 운영체제 없이 동작
- 컴파일 타임에 메모리 및 스레드 안전성을 확보
Rust + async 기반 구조
- Rust의 async/await 기능을 통해 임베디드 환경에서 효율적인 멀티태스킹 구현
- 태스크는 컴파일 타임에 상태 머신(state machine) 으로 변환되어 협력적으로 실행
- 동적 메모리 할당 불필요, 단일 스택에서 실행
- RTOS의 컨텍스트 스위칭 없이도 더 빠르고 작은 코드 크기 달성
- 링크된 자료에서 RTOS 대비 성능 우위를 언급함
주요 구성 요소 (Batteries Included)
-
하드웨어 추상화 계층(HAL)
- 안전한 Rust API로 하드웨어 기능을 제어
- 주요 지원 대상: STM32, nRF, RP2040, MSPM0, ESP32, CH32, PolarFire SoC, PY32
-
시간 관리(embassy-time)
- 전역적으로 사용 가능한 Instant, Duration, Timer 타입 제공, 오버플로우 없음
-
실시간 및 저전력 지원
- 여러 실행기(executor)를 생성해 우선순위 기반 태스크 실행 가능
- 유휴 시 코어를 자동으로 절전 모드로 전환, 인터럽트 기반 웨이크업
-
네트워킹(embassy-net)
- Ethernet, IP, TCP, UDP, ICMP, DHCP 지원
- 비동기 구조로 타임아웃 관리 및 다중 연결 처리 단순화
-
Bluetooth
-
trouble,nrf-softdevice,embassy-stm32-wpan등 다양한 BLE 스택 지원
-
-
LoRa, USB, Bootloader
-
lora-rs로 LoRaWAN 스택 지원 -
embassy-usb는 USB CDC, HID 클래스 구현 -
embassy-boot는 전원 장애에도 안전한 펌웨어 업데이트 지원
-
기술 사양 및 라이선스
- 최소 지원 Rust 버전(MSRV) : 1.75 이상
- 라이선스: Apache-2.0 또는 MIT 중 선택 가능
- 프로젝트 이름은 “** EMBedded ASYnc**”의 약자
Hacker News 의견들
-
나는 Embassy 프로젝트의 큰 팬임. 이건 async Rust가 왜 대단한지를 보여주는 완벽한 예시임
힙 없이 동작하고, 저비용 추상화로 단일 코어 칩에서도 동시 실행이 가능함. RTOS의 복잡함도 없음
Embassy 팀이 이만큼 성장한 게 정말 놀라움.
또, Embassy-net용 HTTP 클라이언트인 reqwless를 추천함. HTTPS까지 지원함
예전엔 Rust embedded가 C/C++보다 낫다고 생각하지 않았지만, 이제는 MCU 구매 결정을 Rust 지원 여부로 판단하게 됨- 이걸 테스트해보려면 어떤 MCU 개발 키트를 추천하는지 궁금함
- HAL에 타입 안정성을 가져다주는 점이 정말 좋음. 이 분야에 처음 들어오는 사람들에게 완충재 같은 역할을 함
그런데 아직도 watchdog이 뭔지 잘 모르겠음
-
나는 Embassy를 애플리케이션 패턴 레이어에서 가장 즐기고 있음
긴 수명의 디바이스 태스크들이 타이밍과 조정을 작은 async API 뒤에 숨기는 구조임
예를 들어loop { let btn = ir.wait_for_press().await; }같은 코드에서 컴파일러가 상태 머신을 자동으로 만들어줌
이런 스타일은 async + no-std의 자연스러운 산물이라 생각함
HAL이나 executor보다, 이런 애플리케이션 구조에 대한 논의가 더 많아졌으면 함
Brad Gibson과 함께 쓴 무료 글에서도 이런 아이디어를 다룸
또, 이런 패턴을 실험하고 문서화하는 device-kit 저장소를 열었음. 비슷한 시도를 하는 다른 레포도 알고 싶음- 이건 고수준 로직뿐 아니라 저수준 펌웨어에도 유용함
예전에 NIC 펌웨어를 상태 머신으로 짜던 시절, Rust의 async 같은 게 있었다면 정말 좋았을 것임
C에서도 코루틴 흉내는 낼 수 있지만 너무 해키(hacky) 함
당시엔 RTOS 스레드가 비싸다고 믿었지만, 지금 생각하면 꼭 그랬던 건 아닌 듯함
802.11 같은 프로토콜 처리에도 async가 있었다면 코드가 훨씬 작고 단순했을 것임
- 이건 고수준 로직뿐 아니라 저수준 펌웨어에도 유용함
-
나는 Embassy를 정말 좋아함
Bare metal C와 FreeRTOS에서 넘어왔는데, 드디어 임베디드에도 현대적인 툴체인이 생긴 느낌임
특히 주변 생태계가 훌륭함 — probe-rs + cargo run 통합, defmt 로깅, embedded_hal, stm32-rs 등
RTIC도 써봤지만 async 문법의 인체공학적 사용성 때문에 Embassy로 정착함
macOS에서도 바로 빌드되고 실행돼서 놀라웠음. 예전엔 항상 Linux를 써야 했는데 이제는 M칩에서 바로 가능함
주변장치 접근 공유 개념을 이해하는 데 시간이 좀 걸렸지만, 컴파일 타임에 락 규칙이 강제되어 버그가 거의 없음
USB와 네트워킹 스택 품질도 매우 높음. PLDM over USB와 Ethernet TCP 스택을 쓰는데 완벽하게 동작함
단점이라면, 기존 벤더 예제에 익숙한 사람을 온보딩하기 어렵고, 벤더가 Rust를 모르면 디버깅 협업이 힘듦
그래도 STM 생태계라면 강력히 추천함- 예전에 Embassy를 빌드했을 때 의존성 100개 이상을 끌어와서 놀랐음. 취미용으로는 좋지만 산업용으로는 아직 멀었다고 생각함
-
ESP32 같은 멀티코어도 지원하는지 궁금했는데, 보니까 두 번째 executor로 가능하고
embassy_sync로 통신함
-
Embassy와 async Rust는 지난 10년간 임베디드 세계에 일어난 가장 큰 혁신임
C 기반 RTOS는 개념은 좋지만 실제로 쓰기엔 고통스러움. Embassy 같은 경량 프레임워크가 자연스러운 진화임
Embassy는 사실상 실시간 OS로도 볼 수 있음. 자세한 내용은 이 글 참고 -
나는 Glicol을 no-std로 다시 작성 중인데, embassy-rs + 2350 조합이 최고임
2026년에 임베디드 개발을 시작할 계획이라면 이 스택을 강력히 추천함 -
약간 주제에서 벗어나지만, 임베디드 개발을 처음 시작하려면 어떤 게 좋을지 궁금함
10년 넘게 웹 개발만 하다가 Rust 책을 공부 중임. Raspberry Pi를 주문했는데, 이게 진짜 임베디드라고 할 수 있을까?- Raspberry Pi보다는 ST Nucleo 보드를 추천함. SWD 프로그래머가 내장되어 있어서 플래싱과 디버깅이 쉬움
USB 포트가 있는 NUCLEO-F767ZI 같은 모델이 좋음 - 나는 ESP32-C6 Touch LCD를 $25에 샀는데, 거의 스트랩 없는 Fitbit 같음
Wi-Fi, BLE, 6축 센서까지 있고, C 데모도 바로 실행됨. LVGL도 훌륭함
Rust는 아직 안 써봤지만, RISC-V 기반이라 흥미로움. Elecrow나 Makerfabs도 초보자에게 좋음 -
RP2040이 들어간 보드와 전자부품 스타터 키트를 사서 바로 코딩을 시작하길 권함
Rust라면 rp-hal이 입문용으로 좋고, Embassy는 조금 더 나중에 써보면 좋음 - Raspberry Pi도 GPIO를 다룰 수 있어서 임베디드 감각을 익히기 좋음
좀 더 bare metal에 가깝게 가고 싶다면 ESP32 보드를 추천함. 싸고, 배터리 충전기나 디스플레이가 달린 다양한 폼팩터가 있음
- Raspberry Pi보다는 ST Nucleo 보드를 추천함. SWD 프로그래머가 내장되어 있어서 플래싱과 디버깅이 쉬움
-
나는 Embassy로 LoRa 릴레이를 만들어 Bitchat 앱(nrf52 기반)에서 사용 중임
대부분 아주 매끄럽게 동작하고, 패닉은 Nordic SoftDevice 쪽 문제였음- Bitchat이 BLE 기반 아닌가? LoRa 프로토콜을 직접 구현한 건지, 아니면 Meshtastic 같은 걸 브릿징한 건지 궁금함
-
나는 Embassy로 Spark 모델링 기타 앰프 페달 컨트롤러를 만들고 있었음
BLE로 앰프를 제어하는데, Rust BLE 스택이 완전 오픈소스라서 흥미로웠음
다만 아직 초기 단계라 API가 자주 바뀌고 Cargo에서 git 리비전을 고정해야 했음
그래도 프로젝트의 미래가 기대됨 -
Microsoft에서도 Embassy를 EC(Embedded Controller) 용으로 사용 중임
자세한 내용은 Open Device Partnership 참고 -
Ariel OS는 Embassy 위에 구축된 운영체제임. 참고할 만함
- Embassy와는 독립적이지만, 선점형 멀티태스킹을 찾는다면 Xous도 살펴볼 만함