원문: React Native 0.84 - Hermes V1 by Default
블로그 번역은 최초 발표 당시의 설명을 보존합니다. 본문의 “최신 버전”, 지원 상태, 출시 예정 안내도 발표 당시 기준입니다.
0.84.x 패치 내역을 별도로 정리했습니다. 확인한 가장 최근 정식 패치는 0.84.1입니다.
오늘 React Native 0.84를 릴리스하게 되어 기쁩니다!
이번 릴리스에서는 Hermes V1이 기본 JavaScript 엔진이 되어 모든 React Native 앱이 상당한 성능 향상을 얻게 됩니다. 또한 iOS와 Android 양쪽에서 레거시 아키텍처 제거를 계속 진행했고, iOS에서는 사전 컴파일(precompiled) 바이너리가 기본으로 제공됩니다.
React Native 0.82에서 실험적 opt-in으로 처음 공개된 이후, 이제 iOS와 Android 모두에서 Hermes V1이 React Native의 기본 JavaScript 엔진이 됩니다.
Hermes V1은 Hermes 엔진의 다음 세대로, 컴파일러와 VM 양쪽의 큰 개선을 통해 측정 가능한 수준의 JavaScript 성능 향상을 제공합니다.
패키지 매니저 오버라이드package.json에서 기존 hermes-compiler 패키지 버전을 강제로 고정합니다.
"overrides": { "hermes-compiler": "0.15.0" }"resolutions": { "hermes-compiler": "0.15.0" }"pnpm": { "overrides": { "hermes-compiler": "0.15.0" } }iOS
CocoaPods 의존성을 설치할 때 RCT_HERMES_V1_ENABLED=0과 RCT_USE_PREBUILT_RNCORE=0 환경 변수를 함께 넘깁니다.
Androidandroid/gradle.properties에 hermesV1Enabled=false를 추가하고, React Native를 소스에서 빌드하도록 설정합니다.
React Native 0.84부터 iOS에서 사전 컴파일 바이너리가 기본으로 제공됩니다. 이전에는 opt-in이었지만 이제 기본으로 켜지며, iOS 앱의 빌드 시간이 크게 줄어듭니다.
즉, 클린 빌드를 할 때마다 React Native 코어를 소스에서 컴파일할 필요가 없습니다. 사전 컴파일된 .xcframework 바이너리를 pod install 과정에서 자동으로 내려받아 사용합니다.
React Native를 소스에서 빌드해야 한다면(예: Hermes V1에서 빠져나오려는 경우), pod 설치 시 RCT_USE_PREBUILT_RNCORE=0을 지정해 사전 컴파일 바이너리를 끌 수 있습니다.
새 아키텍처를 유일한 런타임 옵션으로 만든 0.82의 작업에 이어, React Native 0.84에서도 iOS와 Android 양쪽에서 레거시 아키텍처 코드를 계속 제거하고 있습니다. RFC에 설명한 대로, 릴리스마다 레거시 아키텍처 클래스를 몇 개씩 제거해 나갑니다.
0.83에서 레거시 아키텍처 코드를 컴파일에서 빼는 실험적 RCT_REMOVE_LEGACY_ARCH 플래그를 도입했는데, 0.84에서는 이것이 기본 동작이 됩니다. 레거시 아키텍처 코드가 더 이상 iOS 빌드에 포함되지 않으므로 빌드 시간과 앱 크기가 모두 줄어듭니다.
이미 새 아키텍처로 넘어온 앱이라면 깨질 일은 없습니다. 호환에 필요한 Interop Layer 코드는 그대로 남아 있습니다.
iOS에서 레거시 아키텍처 코드를 다시 켜려면 소스에서 빌드해야 합니다. 다음 플래그와 함께 CocoaPods 의존성을 설치하세요.
RCT_USE_PREBUILT_RNCORE=0 RCT_REMOVE_LEGACY_ARCH=0 bundle exec pod install이번 릴리스에서 제거된 레거시 아키텍처 클래스 목록입니다.
com.facebook.react.LazyReactPackage
com.facebook.react.bridge.CxxModuleWrapper
com.facebook.react.bridge.CxxModuleWrapperBase
com.facebook.react.bridge.CallbackImpl
com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener
com.facebook.react.bridge.OnBatchCompleteListener
com.facebook.react.bridge.ReactCxxErrorHandler
com.facebook.react.bridge.ReactInstanceManagerInspectorTarget
com.facebook.react.modules.debug.DidJSUpdateUiDuringFrameDetector
com.facebook.react.devsupport.BridgeDevSupportManager
com.facebook.react.uimanager.NativeKind
com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener
com.facebook.react.uimanager.layoutanimation.LayoutAnimationController
com.facebook.react.uimanager.layoutanimation.LayoutAnimationListenerReact Native 0.84는 Node.js v22.11 이상을 요구합니다. 이 버전업으로 React Native 툴링 생태계 전반에서 최신 JavaScript 기능을 쓸 수 있게 됩니다.
업그레이드 전에 Node.js 버전을 먼저 올려두세요. nvm이나 fnm 같은 버전 매니저 사용을 권장합니다.
이번 릴리스는 React 19.2.3을 React Native에 반영해, React 팀의 최신 수정과 개선을 포함합니다.
React Native의 ESLint 설정이 ESLint v9 Flat Config를 지원합니다. 프로젝트에서 최신 ESLint 툴링을 도입하기가 더 쉬워집니다.
PlatformColor 지원 및 테스트가 강화되었습니다.onKeyDown/onKeyUp 지원이 추가되어, 하드웨어 키보드나 TV 리모컨의 키 이벤트를 처리할 수 있습니다.onPress나 onLongPress 핸들러가 있는 Text 컴포넌트는 이제 자동으로 accessibilityRole="link"를 갖게 되어, 스크린 리더가 상호작용 가능한 텍스트를 올바르게 읽어줍니다.
Android에서는 재활용(recycle)되는 뷰의 접근성 상태 문제를 고치는 작업이 많이 이루어졌습니다. 뷰가 재활용될 때 isClickable과 OnClickListener 상태가 제대로 초기화되도록 해서, 스크린 리더가 잘못된 상태를 읽는 문제를 막았습니다.
URL에 빠져 있던 표준 속성들(hash, host, pathname 등)과 URLSearchParams의 메서드들(get, set, delete 등)이 추가되어, React Native의 URL 구현이 웹 표준에 더 가까워졌습니다. URLSearchParams의 중복 엔트리 문제도 수정되었습니다.
ImageResponseObserverCoordinator에서 드물게 발생하던 EXC_BAD_ACCESS 크래시를, 옵저버를 참조 카운팅 포인터로 감싸서 수정했습니다. 이 과정에서 RCTImage 옵저버 API의 객체 선언이 바뀌므로 react-native-svg 같은 의존 라이브러리가 영향을 받을 수 있습니다.BridgeDevSupportManager가 제거되었습니다.JSBigString이 jsi::Buffer를 직접 구현합니다. 중간 계층이던 BigStringBuffer는 제거되었습니다(현재는 deprecated). BigStringBuffer를 직접 상속하거나 의존하는 코드는 수정이 필요할 수 있습니다.전체 호환성 깨짐 목록은 0.84 CHANGELOG에서 확인하세요.
이번 릴리스에는 두 가지 deprecation이 있습니다.
XHRInterceptor와 WebSocketInterceptor API가 deprecated 되었습니다. 개발 도구는 대신 Chrome DevTools Protocol(CDP)의 Network 도메인을 사용해야 합니다.TurboModuleProviderFunctionType이 deprecated 되었습니다.React Native 0.84에는 95명의 컨트리뷰터가 만든 650개 이상의 커밋이 담겨 있습니다. 모든 분들의 노고에 감사드립니다!
이번 릴리스에서 특히 큰 기여를 해주신 분들께 특별히 감사를 전합니다.
이제 0.84가 React Native의 최신 안정 버전이며, 0.81.x는 지원 종료(unsupported) 상태가 됩니다. 자세한 내용은 React Native 지원 정책을 참고하세요.
기존 프로젝트에서는 React Native Upgrade Helper로 버전 간 코드 변경 사항을 확인하고, 함께 업그레이드 문서도 참고하세요.
💡 새로운 것: Community CLI 프로젝트를 위한 실험적 upgrade-react-native AI 스킬도 사용해볼 수 있습니다.
npx @react-native-community/cli@latest init MyProject --version latestExpo 프로젝트에서는 React Native 0.84를 expo@canary 릴리스로 사용할 수 있습니다. 다음 SDK인 SDK 56은 그다음 안정 릴리스인 React Native 0.85와 함께 제공됩니다.
공식 GitHub 릴리스와 CHANGELOG의 변경 항목을 한국어로 정리했습니다. 기록이 짧거나 비어 있는 버전은 공식 태그 비교로 보충하고 그 근거를 표시했습니다. 각 항목은 해당 패치의 변경 사항입니다.
| 버전 | 배포일 | 주요 내용 |
|---|---|---|
| 0.84.1 | 2026-02-28 | Android 모노레포와 Hermes V1 비활성화 설정 수정 |
gradle.properties를 먼저 찾도록 수정했습니다. 모노레포에서 hermesV1Enabled 설정을 올바르게 상속합니다.inspector-modern/chrome/Registration.h에 대체 심볼을 제공합니다.ReactPlugin.kt가 hermesV1Enabled를 항상 true로 설정하던 문제를 수정했습니다.출처: 공식 릴리스 0.84.1