React Native에서 Rust 기반 모듈을 순수 C++ TurboModule과 통합할 수 있게 해주는 도구 Craby를 소개합니다.
문서 보러가기: https://craby.rs
GitHub: https://github.com/leegeunhyeok/craby
Craby란?
Craby는 Rust로 고성능 네이티브 모듈을 작성하면서 TypeScript - Rust - C++ 전체 스택에서 타입 안전성을 유지할 수 있는 개발 도구입니다. React Native TurboModule의 플랫폼별 레이어(ObjCTurboModule/JavaTurboModule) 없이, 순수 C++ TurboModule과 직접 통합하여 최고의 성능을 끌어냅니다.
성능
다른 솔루션과의 벤치마크 비교 (벤치마크 참고):
- ExpoModules 대비 20-80배 빠름
- 표준 TurboModules 대비 15-20배 빠름
- NitroModules(Swift/Kotlin 기반, C++ 아님)대비 25~30% 빠름
이는 극단적인 처리량 테스트(10만 회 호출)이며, 실제 사용 환경에서는 결과가 다를 수 있으니 참고만 부탁드립니다.
주요 기능
- 자동 코드 생성: TypeScript로 API를 정의하면 Rust/C++ 바인딩을 자동 생성
- 타입 안전성: TypeScript, Rust, C++ 간 컴파일 타임 타입 체킹
- Zero-Cost FFI: cxx를 통해 Rust-C++ 상호운용 오버헤드 최소화
- 간단한 API: Rust 구현에만 집중하면 나머지는 Craby가 처리
사용 예시
// 모듈 스키마 정의 (TypeScript)
interface Spec extends NativeModule {
add(a: number, b: number): number;
}
// 실제 모듈 구현 (Rust)
#[craby_module]
impl CalculatorSpec for Calculator {
fn add(&mut self, a: Number, b: Number) -> Number {
a + b
}
}
모든 브릿징 코드는 Craby가 자동으로 생성하며, 사용자는 실제 모듈(Rust)만 구현하면 됩니다.
자세한 내용은 문서/GitHub 저장소 참조 부탁드리며, 다양한 피드백은 언제든지 환영합니다!
댓글과 토론
최근 New Architecture로 넘어가야하는 상황이 생겼는데요, TurboModule 내부 구현을 살펴보면서 “이렇게 접근해보면 충분히 가능성 있겠는데” 라는 아이디어로부터 시작하게 되었습니다!