Upgrade to Pro — share decks privately, control downloads, hide ads and more …

우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다

우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다

FECONF 2026에서 진행한 우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다의 Speaker Deck입니다.

Avatar for HyunWoo Lee

HyunWoo Lee

October 24, 2026

More Decks by HyunWoo Lee

Other Decks in Programming

Transcript

  1. 동작 원리 React Native 내부에서 네이티브 모듈 탐색 JavaScript C

    / HostObject TurboModuleRegistry .getEnforcing('CalculatorModule') BridgelessNativeModuleProxy ::get(runtime, ‘CalculatorModuleʼ) requireModule(‘CalculatorModule’) turboBinding_.getModule( runtime, ‘CalculatorModule’) TurboModule이 없고 legacyBinding_이 있으면 NativeModules[‘CalculatorModule’] = global. nativeModuleProxy[‘CalculatorModule’] legacyBinding_->getModule( runtime, ‘CalculatorModule’)
  2. 동작 원리 Native Module 탐색과 호출과정 TurboModuleRegistry.js BridgelessNativeModuleProxy::get const module

    = NativeModules[name]; NativeModules[name] = global.nativeModuleProxy[name]; if (module != null) { return module; } auto turboModule = turboBinding.getModule( runtime, moduleName); CalculatorModule.add(1, 2) if (turboModule.isObject()) { return turboModule; } HostFunction Swift / Kotlin implementation
  3. 선택 이유 Nitro Modules를 선택한 이유 01 02 iOS 네이티브

    호출 비용 Swift·Kotlin 개발 편의성
  4. 선택 이유 01 iOS 연결 방식과 호출 시간 Swift Turbo

    Modules 동기 함수 10만 회 호출 ObjC interop HostFunction iPhone 15 Pro / Release Objective-C adapter Swift impl. Swift Nitro Modules HostFunction Swift C Interop으로 구현체 접근
  5. 선택 이유 02 네이티브에서도 익숙한 비동기 코드 Kotlin Swift Promise.async

    { fetchValue() } Promise.async { try await fetchValue() } suspendCancalleableCoroutiens { cont -> val value = fetchValue() Promise.resolve(value) cont.resume() } Task { let value = try await fetchValue(); Promise<Value>() .resolve(value) }
  6. 적용 사례 react-native-nitro-device-info // 5초마다 한번씩 폴링 const batteryLevel =

    useBatteryLevel(); // 1초마다 한번씩 폴링 const isHeadphonesConnected = useIsHeadphonesConnected();
  7. 적용 사례 기존 코드를 유지하며 옮겨오기 기존 import 호환 계층으로

    변경 import DeviceInfo from 'react-native-device-info'; import DeviceInfo from 'react-native-nitro-device-info/compat'; const brand = DeviceInfo.getBrand();