FEInterview Prep

FEConf · FEConf 2025 2025

60 FPS in React Native

React Native 앱에서 60 FPS 애니메이션을 구현하는 New Architecture 기반 최적화 전략을 소개합니다.

React Native성능 최적화New ArchitectureJSIReanimated

요약

핵심 토픽

React Native New ArchitectureJSIReanimated 3UI 스레드 애니메이션성능 프로파일링

학습 포인트

1. 구 Bridge vs New Architecture(JSI)

구 아키텍처: JS→Native 통신을 JSON 직렬화/역직렬화로 처리해 지연이 발생. 비동기 큐에 메시지가 쌓이면 프레임 드랍. New Architecture(JSI): JS와 Native가 C++ 레이어를 통해 직접 메모리를 공유하고 동기 호출 가능. Fabric(UI), TurboModules(Native 모듈)로 구성.

핵심 용어

BridgeJSIJSON 직렬화동기 통신

2. Reanimated 3: UI 스레드 애니메이션

Reanimated 3는 `worklet` 함수를 UI 스레드에서 직접 실행합니다. JS 스레드가 바쁘거나 멈춰도 애니메이션이 끊기지 않습니다. `useSharedValue`, `useAnimatedStyle`로 애니메이션 값을 정의하고 `withSpring`, `withTiming`으로 전환 효과를 적용합니다. Gesture Handler와 함께 사용하면 제스처 기반 애니메이션도 UI 스레드에서 처리됩니다.

핵심 용어

workletuseSharedValueUI 스레드Gesture Handler

3. FlatList 성능 최적화

FlatList의 주요 최적화: `keyExtractor`로 안정적인 키 제공, `getItemLayout`으로 아이템 높이 사전 계산(스크롤 오프셋 계산 비용 제거), `windowSize` 조정으로 메모리와 렌더 비용 균형, `removeClippedSubviews`로 화면 밖 뷰 메모리 해제, `React.memo`로 아이템 컴포넌트 리렌더 방지.

핵심 용어

getItemLayoutwindowSizeremoveClippedSubviewsReact.memo

면접 질문

중급

Q1. React Native의 구 아키텍처와 New Architecture의 차이를 설명해주세요.

힌트

[감점 답변] 정의만 반복하거나 "React Native의 구 아키텍처와 New Architecture의 차이를 설명해주세요."에 대해 장단점 없이 단편적으로 답하면 감점 포인트입니다. 면접관은 실무 적용 경험이 부족하다고 판단합니다. [좋은 답변] 구: JS-Native 간 Bridge로 JSON 비동기 통신 → 직렬화 비용, 프레임 드랍 위험. New: JSI(JavaScript Interface)로 C++ 레이어를 통해 직접 동기 통신 가능. Fabric(렌더러), TurboModules(네이티브 모듈)로 구성. 이로 인해 Reanimated 같은 UI 스레드 라이브러리가 더 효과적으로 동작합니다.

고급

Q2. React Native에서 60 FPS 애니메이션을 보장하려면 어떻게 해야 하나요?

힌트

[감점 답변] 정의만 반복하거나 "React Native에서 60 FPS 애니메이션을 보장하려면 어떻게 해야 하나요?"에 대해 장단점 없이 단편적으로 답하면 감점 포인트입니다. 면접관은 실무 적용 경험이 부족하다고 판단합니다. [좋은 답변] 핵심: JS 스레드가 아닌 UI 스레드에서 애니메이션을 구동해야 합니다. Reanimated 3의 worklet 함수가 UI 스레드에서 실행됩니다. JS 스레드 작업(API 호출, 무거운 연산)이 애니메이션에 영향을 주지 않도록 격리하고, `InteractionManager.runAfterInteractions`로 애니메이션 완료 후 무거운 작업을 실행합니다.

초급

Q3. React Native의 FlatList와 ScrollView의 차이와 FlatList를 사용해야 하는 이유는 무엇인가요?

힌트

[감점 답변] 정의만 반복하거나 "React Native의 FlatList와 ScrollView의 차이와 FlatList를 사용해야 하는 이유는 무엇인가요?"에 대해 장단점 없이 단편적으로 답하면 감점 포인트입니다. 면접관은 실무 적용 경험이 부족하다고 판단합니다. [좋은 답변] ScrollView는 모든 자식을 한 번에 렌더합니다. 100개 아이템이면 100개 모두 렌더. FlatList는 화면에 보이는 아이템만 렌더하고 스크롤 시 재활용(virtualization)합니다. 긴 목록에서 ScrollView를 쓰면 초기 렌더 시간과 메모리 사용량이 폭증하므로 FlatList를 사용해야 합니다.

선행 학습

  • React Native 기본 컴포넌트와 스타일링
  • React 성능 최적화 기본(memo, useMemo)
  • 네이티브 앱 렌더링 기초 개념

핵심 타임스탬프

React Native New Architecture 핵심 구간00:00 - 03:00
JSI 핵심 구간03:00 - 07:00
Reanimated 3 핵심 구간07:00 - 12:00
UI 스레드 애니메이션 핵심 구간12:00 - 17:00

학습 방법

1단계: React Native 개발자 메뉴의 Perf Monitor를 켜고 기존 앱의 JS FPS와 UI FPS를 측정해보세요. 두 값이 같이 낮은지(JS 문제) UI FPS만 낮은지(렌더 문제) 구분하는 것이 시작입니다. 2단계: Reanimated 3 공식 예제에서 `withSpring`과 `useSharedValue`로 카드 스와이프 애니메이션을 구현해 worklet이 UI 스레드에서 실행됨을 Flipper에서 확인해보세요. 3단계: 100개 이상 아이템 목록을 ScrollView와 FlatList로 각각 구현하고 Perf Monitor로 메모리와 FPS 차이를 비교해보세요. 4단계: 동료에게 "React Native New Architecture"의 핵심을 5분 안에 설명해보세요. 막히는 부분이 아직 구조적으로 이해되지 않은 지점입니다.