New Architecture 전환 가이드 — 마이그레이션 전략
React Native 0.76부터 New Architecture가 기본 활성화됩니다. JSI, Fabric, Turbo Modules 세 가지 축으로 성능과 안정성이 크게 개선됩니다.
New Architecture 구성요소
Old Architecture New Architecture
┌──────────────┐ ┌──────────────┐
│ JavaScript │ │ JavaScript │
└──────┬───────┘ └──────┬───────┘
│ │
┌──────┴───────┐ ┌──────┴───────┐
│ Bridge │ │ JSI │ ← C++ 직접 연결
│ (JSON 직렬화) │ │ (직접 참조) │
└──────┬───────┘ └──────┬───────┘
│ │
┌──────┴───────┐ ┌────────────────┼────────────────┐
│Native Modules│ │ │ │
│ + UI Manager │ │ Turbo Modules │ Fabric │
└──────────────┘ │ (네이티브 API) │ (렌더링) │
└────────────────┴────────────────┘
핵심 변화
| 요소 | 역할 | 이점 |
|---|---|---|
| JSI | JS↔Native 통신 | Bridge 제거, 동기 호출 가능 |
| Fabric | 렌더링 시스템 | C++ Shadow Tree, 동시성 지원 |
| Turbo Modules | 네이티브 모듈 | 지연 로딩, 타입 안전성 |
| Codegen | 코드 생성 | TypeScript에서 네이티브 인터페이스 자동 생성 |
활성화 방법
React Native 0.76+
기본적으로 New Architecture가 활성화되어 있음
별도 설정 불필요
이전 버전 (0.68~0.75)
// android/gradle.properties
newArchEnabled=true
# ios/Podfile
ENV['RCT_NEW_ARCH_ENABLED'] = '1'
라이브러리 호환성 확인
# 호환성 확인 도구
npx react-native-new-arch-check
# 또는 reactnative.directory에서 확인
# "New Architecture" 필터 사용
주요 라이브러리 지원 현황
지원 완료:
✅ react-navigation
✅ react-native-reanimated
✅ react-native-gesture-handler
✅ react-native-screens
✅ react-native-svg
✅ react-native-safe-area-context
✅ @react-native-async-storage/async-storage
✅ react-native-webview
확인 필요:
⚠️ 작은 커뮤니티 라이브러리
⚠️ 오래된 라이브러리 (유지보수 중단)
마이그레이션 단계
1단계: 준비
1. React Native 최신 버전으로 업그레이드
2. 모든 서드파티 라이브러리를 최신 버전으로 업데이트
3. 호환성 검사 실행
4. 비호환 라이브러리 대체안 검색
2단계: 활성화
1. New Architecture 활성화
2. 빌드 및 기본 기능 테스트
3. 에러 발생 시 비호환 라이브러리 식별
3단계: 검증
1. 전체 기능 테스트
2. 성능 비교 (시작 시간, FPS, 메모리)
3. E2E 테스트 실행
4. 스테이징 환경 배포
4단계: 배포
1. 점진적 배포 (10% → 50% → 100%)
2. 크래시 모니터링
3. 성능 메트릭 추적
Interop Layer
비호환 라이브러리를 위한 호환 레이어가 제공됩니다.
// react-native.config.js
module.exports = {
project: {
android: {
// 기존 방식의 컴포넌트를 Fabric에서 사용
unstable_reactLegacyComponentNames: ['LegacyMapView'],
},
ios: {
unstable_reactLegacyComponentNames: ['LegacyMapView'],
},
},
};
성능 개선 사례
실제 측정 결과 (대형 앱 기준):
앱 시작 시간: 2.1초 → 1.4초 (33% 감소)
화면 전환: 120ms → 80ms (33% 감소)
스크롤 프레임: 45fps → 58fps (29% 향상)
메모리 사용: 190MB → 160MB (16% 감소)
가장 큰 개선:
- Turbo Modules 지연 로딩 → 시작 시간 단축
- Fabric 동기 렌더링 → 레이아웃 점프 제거
- JSI 직접 호출 → Bridge 병목 제거
정리
- New Architecture는 JSI, Fabric, Turbo Modules 로 구성됩니다
- RN 0.76+에서 기본 활성화 되므로 준비가 필요합니다
- 마이그레이션 전 서드파티 라이브러리 호환성 을 반드시 확인하세요
- Interop Layer 로 비호환 라이브러리를 임시로 사용할 수 있습니다
- 실제로 앱 시작 시간, 스크롤 성능, 메모리 사용이 크게 개선 됩니다
댓글 로딩 중...