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 내부 구현을 살펴보면서 “이렇게 접근해보면 충분히 가능성 있겠는데” 라는 아이디어로부터 시작하게 되었습니다!