모바일 개발 · 중급
React Native 애플리케이션에서 발생할 수 있는 일반적인 렌더링 성능 저하 문제를 어떻게 진단하고 해결할 수 있나요? 디버깅 도구(예: Flipper, React DevTools) 활용 방안을 포함하여 설명해주세요.
힌트 · 불필요한 리렌더링, 과도한 계산, 큰 이미지 로딩 등이 원인이 될 수 있으며, 프로파일러를 통해 병목 지점을 파악하고 `memo`, `useCallback` 등으로 최적화합니다.
React DevToolsFlipperProfilershouldComponentUpdateuseMemo
모범답안
React Native 앱의 렌더링 성능 저하 문제는 여러 가지 원인이 있을 수 있습니다. 가장 흔한 경우는 불필요한 리렌더링, 과도한 계산, 그리고 큰 이미지 로딩입니다.
진단 방법으로는 먼저 React DevTools나 Flipper의 Profiler를 활용하여 렌더링 성능 병목 지점을 파악합니다. Profiler를 통해 어떤 컴포넌트가 가장 많은 시간을 소요하는지, 그리고 왜 리렌더링되는지 확인할 수 있습니다.
해결 방법으로는 memo를 사용하여 불필요한 리렌더링을 방지하고, useCallback이나 useMemo를 사용하여 함수나 값을 메모이제이션하여 불필요한 계산을 줄일 수 있습니다. 또한, 큰 이미지는 최적화하거나 로딩 방식을 개선해야 합니다. shouldComponentUpdate를 활용하여 리렌더링 조건을 직접 제어하는 방법도 있습니다.
예를 들어, memo를 사용하면 props가 변경되지 않는 컴포넌트의 리렌더링을 막을 수 있습니다.
const MyComponent = React.memo(function MyComponent(props) {
// render using props
});
이러한 도구와 기법들을 적절히 활용하면 React Native 앱의 렌더링 성능을 효과적으로 개선할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 React Native 면접 질문
- React Native에서 `StyleSheet.create`를 사용하여 스타일을 정의하는 것이 인라인 스타일이나 일반 JavaScript 객체를 직접 사용하는 것보다 어떤 이점들이 있나요?
- `FlatList` 컴포넌트의 성능을 최적화하기 위한 방법들을 3가지 이상 설명하고, 각 방법이 어떤 원리로 성능 향상에 기여하는지 구체적으로 설명해주세요.
- React Native에서 JavaScript 코드와 네이티브 모듈(Java/Kotlin for Android, Objective-C/Swift for iOS) 간의 통신 원리에 대해 설명하고, 네이티브 모듈을 언제 사용해야 하는지 예시를 들어주세요.
- React Native 애플리케이션에서 JavaScript Bridge의 병목 현상을 최소화하고 성능을 극대화하기 위한 전략은 무엇이며, 이를 위해 JSI(JavaScript Interface)와 TurboModules이 어떤 역할을 하는지 설명하고, 실제 프로젝트에 적용했던 경험을 바탕으로 구체적인 구현 방안을 제시해 주세요.
- 복잡한 데이터 구조(예: 대용량 이미지 데이터, 파일 스트림, 커스텀 객체 그래프)를 React Native의 JavaScript 환경과 네이티브 모듈(iOS/Android) 간에 효율적으로 전달하고 처리하기 위한 설계 전략을 설명해 주세요. 특히, 이러한 데이터 전송 시 발생할 수 있는 메모리 문제나 스레딩 이슈를 어떻게 관리할 것인지 구체적인 방안을 제시해 주세요.
- React Native의 새로운 아키텍처(Fabric Renderer, TurboModules, JSI)로 마이그레이션할 때 예상되는 주요 이점과 도전 과제는 무엇이며, 기존 프로젝트를 새로운 아키텍처로 전환하기 위한 구체적인 단계와 고려해야 할 사항들을 설명해 주세요.