원문: React Native 0.85 - New Animation Backend, New Jest Preset Package
블로그 번역은 최초 발표 당시의 설명을 보존합니다. 본문의 “최신 버전”, 지원 상태, 출시 예정 안내도 발표 당시 기준입니다.
0.85.x 패치 내역을 별도로 정리했습니다. 확인한 가장 최근 정식 패치는 0.85.3입니다.
오늘 React Native 0.85를 릴리스하게 되어 기쁩니다!
이번 릴리스에는 새로운 애니메이션 백엔드(New Animation Backend)가 들어갔고, Jest 프리셋이 전용 패키지로 분리되었으며, 그 외에도 많은 개선과 버그 수정이 포함되어 있습니다.
React Native 0.85는 Software Mansion과 협업하여 만든 새로운 공유 애니메이션 백엔드(Shared Animation Backend)를 도입합니다.
이것은 Animated와 Reanimated 양쪽 모두에서 애니메이션이 내부적으로 어떻게 적용되는지를 담당하는 새로운 내부 엔진입니다. 핵심 애니메이션 업데이트 로직을 React Native 코어로 옮김으로써, Reanimated는 이전에는 불가능했던 성능 개선을 적용할 수 있게 되었고, 업데이트 재조정(reconciliation) 과정이 제대로 테스트되어 앞으로의 RN 업데이트에서도 안정적으로 유지되도록 보장할 수 있게 되었습니다.
Animated에서는 이제 네이티브 드라이버로 레이아웃 속성을 애니메이션할 수 있습니다. (기존에 문서에 명시되어 있던 제약은 더 이상 적용되지 않습니다.)
더 많은 예제는 react-native/packages/rn-tester/js/examples/AnimationBackend/에서 확인할 수 있습니다.
사용하려면 이 문서에서 설명하는 방법에 따라 React Native의 experimental 채널을 활성화하면 됩니다.
이 실험적 기능은 곧 릴리스될 React Native 0.85.1부터 사용할 수 있습니다.
새로운 애니메이션 백엔드를 사용하면 Animated에서 Flexbox 속성과 position 속성을 네이티브 드라이버로 애니메이션할 수 있습니다.
import {
Animated,
Button,
View,
useAnimatedValue,
} from 'react-native';
function MyComponent() {
const width = useAnimatedValue(100);
const toggle = () => {
Animated.timing(width, {
toValue: 300,
duration: 500,
useNativeDriver: true,
}).start();
};
return (
<View style={{flex: 1}}>
<Animated.View
style={{width, height: 100, backgroundColor: 'blue'}}
/>
<Button title="Expand" onPress={toggle} />
</View>
);
}
이번 릴리스에서 React Native DevTools에 여러 개선이 이루어졌습니다.
Metro 개발 서버가 이제 TLS 설정 객체를 받을 수 있습니다. 개발 중에 HTTPS(그리고 Fast Refresh용 WSS)를 사용할 수 있게 되어, 보안 연결을 강제하는 API를 테스트할 때 유용합니다.
metro.config.js에서 다음과 같이 설정합니다.
const fs = require('fs');
config.server.tls = {
ca: fs.readFileSync('path/to/ca'),
cert: fs.readFileSync('path/to/cert'),
key: fs.readFileSync('path/to/key'),
};
로컬 개발에서는 mkcert를 사용하면 브라우저 경고 없이 로컬에서 신뢰되는 인증서를 간단히 만들 수 있습니다.
React Native의 Jest 프리셋이 react-native에서 분리되어 새로운 @react-native/jest-preset 패키지로 옮겨졌습니다. 코어 패키지 크기가 줄어들고, 각 프로젝트가 테스트 설정을 더 유연하게 구성할 수 있게 됩니다.
jest.config.js를 한 줄만 수정하면 됩니다.
- preset: 'react-native',+ preset: '@react-native/jest-preset',
React Native 0.85는 지원이 종료(EOL)된 Node.js 버전과 v20.19.4 이전 릴리스에 대한 지원을 중단합니다. 업그레이드 전에 지원되는 Node.js 버전을 사용 중인지 확인하세요.
StyleSheet.absoluteFillObject 제거deprecated 상태였던 StyleSheet.absoluteFillObject API가 제거되었습니다. 대신 StyleSheet.absoluteFill을 사용하거나, 직접 absolute 포지셔닝 스타일을 정의하세요.
- const styles = StyleSheet.absoluteFillObject;+ const styles = StyleSheet.absoluteFill;
Pressable이 숨겨진 Activity 안에서 더 이상 이벤트 리스너를 언마운트하지 않습니다.ShadowNode::Shared, ShadowNode::Weak, ShadowNode::Unshared, ShadowNode::ListOfWeak, ShadowNode::ListOfShared, SharedImageManager, ContextContainer::Shared가 제거되었습니다. 실제로 사용되지 않던 것들이며, 라이브러리는 해당 타입을 직접 사용해야 합니다.RCTEventEmitter에 receiveTouches를 기본 no-op 구현으로 다시 추가했습니다. 아직 이 메서드에서 벗어나지 못한 라이브러리들의 breaking change를 줄이기 위한 수정입니다.ReactTextUpdate가 internal로 바뀌었으며, 외부에서 직접 접근해서는 안 됩니다.ReactZIndexedViewGroup deprecated.UIManagerHelper deprecated.CatalystInstanceImpl 제거 (이미 deprecated 상태였습니다).NativeViewHierarchyManager가 완전히 stub 처리되었습니다.RCTHostRuntimeDelegate가 deprecated 되었고 RCTHostDelegate로 통합되었습니다.React.XCFramework 사용 시 발생하던 중복 심볼(duplicate symbol) 에러가 수정되었습니다 (fmt 12.1.0 버전업을 통해).^0.84.0으로 올라갔습니다.250829098.0.10을 사용하도록 업데이트되었습니다.YogaNode가 Kotlin으로 마이그레이션되었습니다.AccessibilityInfo.setAccessibilityFocus가 deprecated 되었고, AccessibilityInfo.sendAccessibilityEvent 사용이 권장됩니다.$Values, mixed, $ReadOnly, $ReadOnlyArray).reactNativeDevServerIp로 개발 서버 IP를 지정할 수 있습니다.React.XCFramework에서 clang virtual file system 지원이 추가되었습니다.React Native 0.85에는 58명의 컨트리뷰터가 만든 604개 이상의 커밋이 담겨 있습니다. 모든 분들의 노고에 감사드립니다!
이번 릴리스에서 특히 큰 기여를 해주신 커뮤니티 멤버들께 특별히 감사를 전합니다.
또한 이번 릴리스 포스트에서 기능 문서화 작업에 참여해주신 다른 저자분들께도 감사드립니다.
이제 0.85가 React Native의 최신 안정 버전이며, 0.82.x는 지원 종료(unsupported) 상태가 됩니다. 자세한 내용은 React Native 지원 정책을 참고하세요.
기존 프로젝트에서는 React Native Upgrade Helper로 버전 간 코드 변경 사항을 확인하고, 함께 업그레이드 문서도 참고하세요.
npx @react-native-community/cli@latest init MyProject --version latest
Expo를 사용한다면, 다음 SDK인 SDK 56에 React Native 0.85가 포함될 예정입니다.
공식 GitHub 릴리스와 CHANGELOG의 변경 항목을 한국어로 정리했습니다. 기록이 짧거나 비어 있는 버전은 공식 태그 비교로 보충하고 그 근거를 표시했습니다. 각 항목은 해당 패치의 변경 사항입니다.
| 버전 | 배포일 | 주요 내용 |
|---|---|---|
| 0.85.3 | 2026-05-06 | Hermes 버전 선택, iOS 압축 해제, DevTools 갱신 |
| 0.85.2 | 2026-04-21 | 애니메이션 커밋 재시도 오류와 Metro 배너 수정 |
| 0.85.1 | 2026-04-14 | Android 디버그 FormData 업로드와 실험 기능 플래그 수정 |
debugger-frontend를 8edd9be에서 194d3f8 기준으로 갱신했습니다.version.properties의 값이 1000.0.0이 아니면 고정된 Hermes 버전을 사용합니다.replace-rncore-version.js가 임시 디렉터리에 먼저 압축을 풀도록 바꿨습니다. EdenFS에서 압축 해제가 오류 표시 없이 실패하던 문제를 수정했습니다.출처: 공식 릴리스 0.85.3 · 공식 CHANGELOG
pushAnimationMutations를 AnimationBackend에 추가했습니다.RawProps를 이동하지 않고 복사하도록 바꿨습니다. 애니메이션 백엔드에서 데이터가 손상될 수 있던 문제를 수정했습니다.Loading from Metro... 배너가 남는 문제를 수정했습니다.출처: 공식 릴리스 0.85.2 · 공식 CHANGELOG
FormData 업로드가 실패하던 문제를 수정했습니다.출처: 공식 릴리스 0.85.1 · 공식 CHANGELOG · 기능 플래그 수정 커밋