SDK 56 브레이킹 체인지 총정리
React Native 0.85, Hermes V1, Expo Router 분리, 플랫폼 요구사항, 마이그레이션 체크리스트
핵심 요약
- Expo SDK 56(2026-05-21 릴리스)은 RN 0.85, React 19.2.3, Node.js 22.13.x+, iOS 16.4+, Xcode 26.4+, Hermes V1 기본을 요구합니다.
- New Architecture 전환은 SDK 55에서 끝났으므로 SDK 56 마이그레이션은 "Legacy 제거"가 아니라 새 런타임·빌드·라우터 패키지 경계 점검입니다.
expo/fetch가globalThis.fetch기본 구현이 되고,File.copy()·Directory.move()가 비동기화되며, Expo Router가 React Navigation 의존을 분리하고,@expo/vector-icons가expo에서 빠집니다.- Expo Router 마이그레이션은
npx expo-codemod sdk-56-expo-router-react-navigation-replace로, 전체 업그레이드는expo@^56설치 후expo install --fix·expo-doctor로 진행합니다. - SDK 56 Expo Go는 스토어 미제공이라 development build나
eas go로 테스트하고, OTA는 fingerprint runtimeVersion으로 보호합니다.
핵심 기준
Expo SDK 56은 2026년 5월 21일 릴리스됐습니다. 공식 SDK 표를 보면 React Native 0.85, React 19.2.3, React Native Web 0.21.0, Node.js 22.13.x 이상이 필요합니다. New Architecture 전용 전환은 SDK 55에서 이미 끝났습니다. 그래서 SDK 56 마이그레이션은 "Legacy Architecture 제거"라기보다 새 런타임·빌드 요구사항·라우터 패키지 경계를 점검하는 작업입니다.
| 항목 | SDK 55 | SDK 56 |
|---|---|---|
| React Native | 0.83 | 0.85 |
| React | 19.2.0 | 19.2.3 |
| 최소 Node.js | 20.19.x | 22.13.x |
| iOS 최소 버전 | 15.1+ | 16.4+ |
| Xcode | 26.2+ | 26.4+ |
| Hermes | V0 기본 | V1 기본 |
| Expo UI | SwiftUI stable, Compose beta | SwiftUI·Compose stable |
주요 브레이킹 체인지
| 변경 | 영향 | 대응 |
|---|---|---|
expo/fetch가 globalThis.fetch 기본 구현 | 수동 expo/fetch import가 필요 없어짐. 일부 fetch polyfill과 충돌 가능 | 문제가 있으면 .env에 EXPO_PUBLIC_USE_RN_FETCH=1로 임시 회피 |
expo-file-system의 File.copy()·Directory.move() 비동기화 | 동기 호출을 기대한 코드가 Promise를 누락할 수 있음 | 동기 동작은 copySync()·moveSync()로 명시 |
| Expo Router가 React Navigation 의존을 분리 | 앱 코드의 @react-navigation/* 직접 import가 깨질 수 있음 | npx expo-codemod sdk-56-expo-router-react-navigation-replace <src> 실행 |
@expo/vector-icons가 expo 의존성에서 빠짐 | 기존 암묵 의존 앱에서 아이콘 import 실패 가능 | 직접 의존성 추가 또는 @react-native-vector-icons/*로 이전 |
| iOS 최소 16.4, Xcode 26.4 | 구형 iPhone 7/6s/SE 1세대 등 지원 중단 | 지원 기기 정책과 MDM 대상 기기 재점검 |
| Expo Go SDK 56 스토어 미제공 | App Store/Play Store의 Expo Go로 SDK 56 테스트 불가 | 프로덕션팀은 development build 또는 eas go 사용 |
Hermes V1 기본값
React Native 0.85부터 Hermes V1이 기본 JS 엔진입니다. 시작 시간과 런타임 성능, 메모리 사용량은 좋아지지만, JSI·worklet·native module 경계에서는 V0에 맞춰 두던 암묵 동작이 드러날 수 있습니다.
점검 우선순위:
- 앱 시작 직후 동작하는 JSI 기반 라이브러리(
react-native-reanimated, MMKV, Skia 등) expo-updatesOTA 적용 후 재시작·rollback 플로우- Android 저사양 기기의 cold launch P95/P99
- Hermes bytecode diff가 켜진 OTA 다운로드·적용 경로
SDK 55에서 올라오는 팀의 체크리스트
- Node.js를 22.13.x 이상으로 고정하고 CI 이미지·로컬
.tool-versions·Volta/asdf 설정을 맞춤 - Xcode 26.4+ 이미지에서 iOS 빌드가 통과하는지 확인
- iOS 최소 지원 버전 16.4+ 전환을 제품·고객지원·MDM 정책에 반영
-
npx expo install --fix후npx expo-doctor를 PR 게이트로 실행 - Expo Router 앱 코드의
@react-navigation/*import를expo-routerimport로 교체 -
@expo/vector-icons직접 의존 여부를 확인하고 새 scoped icon 패키지 이전 계획 수립 -
File.copy()·File.move()호출부의await누락 여부 점검 -
globalThis.fetch교체로 네트워크 SDK, Sentry breadcrumb, React Query retry 동작이 바뀌지 않는지 검증 - OTA 업데이트는
runtimeVersion: { "policy": "fingerprint" }또는 명시적 runtime 정책으로 보호 - EAS Observe의
ObserveRoot·markInteractive()를 SDK 56 API로 적용 - Expo UI·expo-widgets를 쓰는 화면은 development build에서 실제 디바이스 회귀 테스트 수행
업그레이드 순서
npm install expo@^56.0.0
npx expo install --fix
npx expo-doctor
npx expo-codemod sdk-56-expo-router-react-navigation-replace appContinuous Native Generation을 쓰는 프로젝트라면 SDK 업그레이드 후 기존 ios·android 산출물을
다시 생성하세요. 커스텀 native patch가 있다면 새 템플릿과 충돌하지 않는지 별도 diff로 확인합니다.