Fabric — 새로운 렌더링 시스템
Fabric은 React Native의 새로운 렌더링 시스템으로, C++로 작성되어 더 빠른 렌더링과 동시성 기능을 지원합니다.
기존 렌더러의 한계
기존 아키텍처:
React (JS) → Shadow Tree (JS) → Bridge (비동기) → Native Views
문제점:
1. Bridge를 통한 비동기 통신 → 프레임 드롭
2. 모든 레이아웃 계산이 JS 스레드에서 실행
3. 동기적 측정(measure) 불가능 → 레이아웃 점프
Fabric의 동작 원리
Fabric 아키텍처:
React (JS) → Shadow Tree (C++) → Native Views
개선점:
1. C++로 작성된 Shadow Tree → 더 빠른 레이아웃 계산
2. JSI를 통한 동기적 통신 → Bridge 병목 제거
3. 동기적 측정 가능 → 레이아웃 점프 없음
4. React 18 동시성 기능 지원
핵심 변경사항
| 항목 | 기존 렌더러 | Fabric |
|---|---|---|
| Shadow Tree | JavaScript | C++ |
| 통신 | Bridge (비동기) | JSI (동기) |
| 레이아웃 측정 | 비동기 | ** 동기** |
| 동시성 | 미지원 | React 18 Concurrent |
| 우선순위 렌더링 | 미지원 | ** 지원** |
동시성 기능
Fabric은 React 18의 동시성 기능을 네이티브 렌더링에 도입합니다.
기존: 모든 렌더링이 동기적 → 무거운 업데이트가 UI 차단
Fabric: 우선순위 기반 렌더링
- 높은 우선순위: 터치 응답, 애니메이션 → 즉시 처리
- 낮은 우선순위: 데이터 로드 후 리스트 업데이트 → 중단 가능
사용자가 스크롤하면서 동시에 데이터 로드:
→ 스크롤 애니메이션(높은 우선순위)이 끊기지 않음
→ 리스트 업데이트(낮은 우선순위)는 유휴 시간에 처리
동기적 레이아웃 측정
// 기존: measure가 비동기 → 레이아웃 점프 발생
ref.current.measure((x, y, width, height) => {
// 콜백이 다음 프레임에서 실행 → 한 프레임 점프
});
// Fabric: 동기적 측정 → 즉시 레이아웃 적용
// Tooltip, Popover 등의 위치 계산이 정확해짐
Fabric 활성화
React Native 0.76+ 에서는 새 아키텍처가 기본 활성화입니다.
// react-native.config.js (수동 설정 시)
module.exports = {
project: {
android: {
unstable_reactLegacyComponentNames: ['MyLegacyComponent'],
},
ios: {
unstable_reactLegacyComponentNames: ['MyLegacyComponent'],
},
},
};
라이브러리 호환성
새 아키텍처로 전환 시 모든 서드파티 라이브러리가 Fabric을 지원하는지 확인해야 합니다.
호환성 확인 사이트: reactnative.directory
→ "New Architecture" 필터로 지원 여부 확인
주요 라이브러리 지원 현황 (2024+):
✅ react-native-reanimated
✅ react-native-gesture-handler
✅ react-native-screens
✅ react-native-svg
✅ react-native-maps
정리
- Fabric은 C++ 기반 Shadow Tree 로 더 빠른 레이아웃 계산을 제공합니다
- JSI를 통한 동기 통신 으로 Bridge 병목을 제거합니다
- React 18 동시성 을 지원하여 우선순위 기반 렌더링이 가능합니다
- 동기적 레이아웃 측정 으로 UI 점프가 사라집니다
- 서드파티 라이브러리의 Fabric 호환성 을 확인한 후 전환하세요
댓글 로딩 중...