React Native 시니어 면접 질문과 답변

Milad Bonakdar
작성자
시니어 React Native 면접을 위해 아키텍처, FlatList 성능, 네이티브 모듈, 상태 관리, 테스트, 운영 트레이드오프를 준비하세요.
소개
시니어 React Native 면접은 문법만 묻지 않습니다. 앱 아키텍처, 성능 프로파일링, 네이티브 통합, 상태와 데이터 경계, 테스트 전략, 릴리스 품질, 실제 제품 제약 안에서 트레이드오프를 설명하는 능력을 봅니다.
이 가이드는 시니어 수준의 간결한 답변을 연습하기 위한 자료입니다. 먼저 어떤 결정을 내릴지 말하고, 그 이유와 위험, 대안을 설명하세요. 예를 들어 FlatList는 단순히 최적화할 수 있다고 말하지 말고, 빈 영역, 렌더링 배치, 메모이즈한 row, 안정적인 key, 고정 높이 또는 무거운 이미지가 진짜 원인일 때의 설계 변경까지 설명해야 합니다.
고급 React & Hooks (5개 질문)
1. useMemo와 useCallback에 대해 설명하십시오. 언제 사용해야 합니까?
답변: 두 훅 모두 값/함수를 메모이제이션하여 성능을 최적화합니다.
- useMemo: 계산된 값(비용이 많이 드는 계산)을 메모이제이션합니다.
- useCallback: 함수 참조를 메모이제이션합니다(재생성 방지).
- 언제 사용: 성능 문제가 있을 때만 사용하십시오. 시기상조의 최적화는 코드를 읽기 어렵게 만들 수 있습니다.
희소성: 매우 흔함 난이도: 중간
2. useRef는 무엇이며 어떤 사용 사례가 있습니까?
답변:
useRef는 재 렌더링을 유발하지 않고 렌더링 전반에 걸쳐 유지되는 변경 가능한 참조를 만듭니다.
- 사용 사례:
- DOM/네이티브 요소에 접근
- 재 렌더링을 트리거하지 않고 변경 가능한 값 저장
- 이전 값 유지
- 타이머/인터벌 저장
희소성: 흔함 난이도: 중간
3. 사용자 정의 훅을 설명하고 언제 만들어야 하는지 설명하십시오.
답변: 사용자 정의 훅은 재사용 가능한 상태 저장 로직을 별도의 함수로 추출합니다.
- 장점: 코드 재사용, 관심사 분리, 쉬운 테스팅
- 규칙: "use"로 시작해야 합니다.
희소성: 흔함 난이도: 중간
4. React Context는 무엇이며 언제 사용해야 합니까?
답변: Context는 prop drilling 없이 컴포넌트 트리를 통해 데이터를 전달하는 방법을 제공합니다.
- 사용 사례: 테마, 인증, 언어 설정
- 주의: 주의해서 사용하지 않으면 불필요한 재 렌더링을 유발할 수 있습니다.
희소성: 매우 흔함 난이도: 중간
5. useEffect와 useLayoutEffect의 차이점을 설명하십시오.
답변: 둘 다 부작용을 실행하지만 다른 시간에 실행합니다.
- useEffect: 렌더링이 화면에 그려진 후 비동기적으로 실행됩니다.
- useLayoutEffect: 페인트 전에 동기적으로 실행됩니다(시각적 업데이트를 차단).
- useLayoutEffect 사용 시기: DOM을 측정하거나 시각적 깜박임을 방지해야 할 때
희소성: 중간 난이도: 어려움
상태 관리 (4개 질문)
6. Redux와 핵심 원칙을 설명하십시오.
답변: Redux는 JavaScript 앱을 위한 예측 가능한 상태 컨테이너입니다.
- 핵심 원칙:
- 단일 진실 공급원(하나의 스토어)
- 상태는 읽기 전용입니다(변경하려면 액션 디스패치).
- 순수 함수(리듀서)로 변경
희소성: 매우 흔함 난이도: 어려움
7. Redux Toolkit은 무엇이며 Redux를 어떻게 간소화합니까?
답변: Redux Toolkit은 Redux 로직을 작성하는 공식 권장 방법입니다.
- 장점:
- 상용구 감소
- 불변 업데이트를 위한 내장 Immer
- Redux Thunk 포함
- 더 나은 TypeScript 지원
희소성: 흔함 난이도: 중간
8. 상태 관리를 위한 Redux의 대안은 무엇입니까?
답변: 여러 상태 관리 솔루션이 존재합니다.
- Context API + useReducer: 내장, 간단한 앱에 적합
- MobX: Observable 기반, 상용구 감소
- Zustand: 최소, 훅 기반
- Recoil: Facebook의 Atom 기반
- Jotai: 기본 Atom
희소성: 흔함 난이도: 중간
9. Redux에서 부작용을 어떻게 처리합니까?
답변: 비동기 작업을 위해 미들웨어를 사용하십시오.
- Redux Thunk: 함수를 반환하는 함수
- Redux Saga: 생성기 기반, 더 강력함
- Redux Observable: RxJS 기반
희소성: 흔함 난이도: 어려움
성능 최적화 (5개 질문)
10. FlatList 성능을 어떻게 최적화합니까?
답변: 여러 전략으로 FlatList 스크롤을 개선할 수 있습니다.
keyExtractor사용: 고유한 키 제공getItemLayout: 고정 높이 항목에 대한 측정 건너뛰기removeClippedSubviews: 화면 밖 뷰 언마운트(Android)maxToRenderPerBatch: 배치 크기 제어windowSize: 렌더링된 창 제어initialNumToRender: 초기에 렌더링할 항목renderItem메모이제이션: 불필요한 재 렌더링 방지
희소성: 매우 흔함 난이도: 중간
11. React Native 브리지는 무엇이며 성능에 어떤 영향을 미칩니까?
답변: 브리지는 JavaScript와 네이티브 코드 간의 통신 계층입니다.
- 작동 방식:
- JavaScript는 별도의 스레드에서 실행됩니다.
- 네이티브 모듈은 네이티브 스레드에서 실행됩니다.
- 브리지는 그 사이의 데이터를 직렬화합니다(JSON).
- 성능 영향:
- 브리지 통신은 비동기적입니다.
- 직렬화 오버헤드
- 빈번한 통신으로 인해 병목 현상이 발생할 수 있습니다.
- 솔루션:
- 브리지 교차 최소화
- 배치 작업
- 네이티브 애니메이션 사용(브리지 우회)
- 새 아키텍처(JSI)는 브리지를 제거합니다.
희소성: 흔함 난이도: 어려움
12. 불필요한 재 렌더링을 어떻게 방지합니까?
답변: 여러 기술로 낭비되는 렌더링을 방지할 수 있습니다.
- React.memo: 컴포넌트 메모이제이션
- useMemo/useCallback: 값/함수 메모이제이션
- 적절한 키 prop: React가 변경 사항을 식별하는 데 도움
- 인라인 객체/배열 피하기: 새 참조 만들기
- 컴포넌트 분할: 더 작고 집중된 컴포넌트
희소성: 매우 흔함 난이도: 중간
13. React Native에서 이미지를 어떻게 최적화합니까?
답변: 이미지 최적화는 성능에 매우 중요합니다.
- 이미지 크기 조정: 적절한 크기 사용
- 이미지 캐싱: react-native-fast-image와 같은 라이브러리 사용
- 지연 로딩: 요청 시 이미지 로드
- 점진적 로딩: 먼저 자리 표시자 표시
- WebP 형식 사용: 더 나은 압축
희소성: 흔함 난이도: 중간
14. 성능 프로파일링에 어떤 도구를 사용합니까?
답변: 여러 도구가 성능 문제를 식별하는 데 도움이 됩니다.
- React DevTools Profiler: 컴포넌트 렌더링 시간
- Flipper: 디버깅 및 프로파일링 도구
- Performance Monitor: 내장 FPS 모니터
- Systrace: Android 성능 추적
- Instruments: iOS 성능 프로파일링
희소성: 흔함 난이도: 중간
네이티브 모듈 및 플랫폼별 (4개 질문)
15. React Native에서 네이티브 모듈을 어떻게 만듭니까?
답변: 네이티브 모듈을 사용하면 플랫폼별 코드를 사용할 수 있습니다.
희소성: 중간 난이도: 어려움
16. 플랫폼별 코드를 어떻게 처리합니까?
답변: 플랫폼별 코드를 위한 여러 접근 방식:
- Platform 모듈: 런타임에 플랫폼 확인
- 플랫폼별 파일:
.ios.js및.android.js - Platform.select: 플랫폼에 따라 값 선택
희소성: 매우 흔함 난이도: 쉬움
17. 새 아키텍처(Fabric 및 TurboModules)는 무엇입니까?
답변: 새 아키텍처는 React Native 성능을 향상시킵니다.
- Fabric: 새 렌더링 시스템
- 동기 레이아웃
- 네이티브 뷰와의 더 나은 상호 운용성
- 타입 안전성
- TurboModules: 새 네이티브 모듈 시스템
- 지연 로딩
- JSI(JavaScript Interface) - 직접 C++ 통신
- 브리지 직렬화 없음
장점:
- 더 빠른 시작
- 더 낮은 메모리 사용량
- 동기 네이티브 호출
- 더 나은 타입 안전성
희소성: 중간 난이도: 어려움
18. React Native에서 딥 링크를 어떻게 처리합니까?
답변: 딥 링크를 사용하면 URL에서 특정 화면을 열 수 있습니다.
희소성: 흔함 난이도: 중간


