React 시니어 기술면접
새 면접Q. 마이크로 프론트엔드 아키텍처를 React로 구현할 때, 각 마이크로 앱 간의 상태 공유, 라우팅 통합, 중복 라이브러리 방지를 위한 설계 전략을 제시해주세요. Module Federation과 같은 기술의 활용 방안과 함께 설명해주세요.
Module Federation을 활용하여 런타임에 각 마이크로 앱을 동적으로 로드하고, shared 설정으로 React와 같은 공통 라이브러리를 싱글톤으로 관리합니다. 상태 공유는 CustomEvent 기반의 이벤트 버스나 경량 상태 관리 라이브러리를 컨테이너 앱에서 제공하여 처리하고, 각 마이크로 앱은 독립적인 라우팅을 가지되 컨테이너에서 통합 라우팅을 관리합니다. 버전 충돌 방지를 위해 공통 디자인 시스템과 API 계약을 명확히 정의하고, 각 팀의 배포 독립성을 보장하면서도 통합 테스트 환경을 구축해야 합니다.
- • Module Federation으로 런타임 통합 및 라이브러리 공유
- • 이벤트 버스 또는 경량 상태 관리로 앱 간 통신
- • 독립 배포 가능한 라우팅 및 API 계약 설계
- • 공통 디자인 시스템과 통합 테스트 전략
마이크로 프론트엔드 환경에서 A/B 테스트나 피처 플래그를 구현할 때 어떤 전략을 사용하시겠습니까?
Q. React 애플리케이션에서 메모리 누수가 발생하는 주요 원인들과 이를 탐지하고 해결하는 체계적인 방법론을 설명해주세요. Chrome DevTools의 Heap Snapshot 분석 방법도 포함해주세요.
메모리 누수의 주요 원인은 정리되지 않은 이벤트 리스너, 클린업되지 않은 타이머, 클로저에 의한 참조 유지, 전역 상태의 무분별한 증가 등입니다. Chrome DevTools의 Performance 탭에서 메모리 그래프가 계속 상승하는지 확인하고, Heap Snapshot을 타임라인별로 찍어 비교하여 Detached DOM nodes나 증가하는 객체를 식별합니다. useEffect의 cleanup 함수를 철저히 구현하고, WeakMap이나 WeakSet 사용을 고려하며, React DevTools Profiler로 불필요한 리렌더링을 제거하고, 대용량 데이터는 페이지네이션이나 가상화로 처리합니다.
- • 이벤트 리스너, 타이머, 클로저의 cleanup 누락 확인
- • Heap Snapshot 비교로 메모리 증가 원인 분석
- • useEffect cleanup과 WeakMap 활용
- • React DevTools Profiler로 불필요한 참조 제거
SPA에서 페이지 전환 시 이전 페이지의 메모리를 효과적으로 해제하기 위한 패턴은 무엇인가요?
Q. 대규모 React 애플리케이션에서 Redux, Zustand, Jotai, Recoil 등 다양한 상태 관리 라이브러리 중 선택 기준을 제시하고, 각각의 적합한 사용 사례와 함께 설명해주세요. 특히 서버 상태와 클라이언트 상태를 분리하는 관점에서 다뤄주세요.
서버 상태는 React Query나 SWR로 관리하고 클라이언트 상태만 별도 라이브러리로 관리하는 것이 현대적 접근입니다. Redux는 복잡한 비즈니스 로직, 미들웨어 필요, 타임트래블 디버깅이 중요한 경우에 적합하며, Zustand는 간단한 API로 빠른 개발이 필요할 때, Jotai/Recoil은 원자적 상태 관리와 선택적 구독이 필요한 경우 유용합니다. 팀의 기술 스택, 학습 곡선, 번들 크기, DevTools 지원, 타입스크립트 통합도를 고려하여 선택하되, 과도한 전역 상태보다는 상태를 가능한 로컬에 유지하는 것이 유지보수에 유리합니다.
- • 서버 상태는 React Query/SWR, 클라이언트 상태는 별도 관리
- • Redux는 복잡한 로직, Zustand는 간결함, Jotai/Recoil은 원자적 관리
- • 번들 크기, 학습 곡선, DevTools, 타입스크립트 지원 고려
- • 전역 상태 최소화, 로컬 상태 우선 원칙
React Server Components 환경에서 클라이언트 상태 관리 전략은 어떻게 달라져야 할까요?
Q. React 애플리케이션에서 발생할 수 있는 주요 보안 취약점(XSS, CSRF, 민감 정보 노출 등)과 이를 방지하기 위한 구체적인 대응 방안을 설명해주세요. dangerouslySetInnerHTML 사용 시 안전한 처리 방법도 포함해주세요.
React는 기본적으로 JSX에서 자동 이스케이핑으로 XSS를 방지하지만, dangerouslySetInnerHTML 사용 시 DOMPurify 같은 라이브러리로 sanitize해야 합니다. CSRF는 SameSite 쿠키 속성과 CSRF 토큰을 활용하고, API 요청 시 Origin 헤더를 검증합니다. 민감 정보는 환경 변수로 관리하되 클라이언트 번들에 포함되지 않도록 주의하고, 토큰은 httpOnly 쿠키에 저장하며, Content Security Policy 헤더를 설정하여 인라인 스크립트 실행을 제한합니다. 의존성 취약점은 npm audit과 Snyk로 정기적으로 점검합니다.
- • DOMPurify로 HTML sanitization, JSX 자동 이스케이핑 활용
- • CSRF 토큰, SameSite 쿠키, Origin 검증
- • 환경 변수 관리, httpOnly 쿠키, CSP 헤더 설정
- • npm audit, Snyk로 의존성 취약점 점검
JWT 토큰을 클라이언트에서 안전하게 저장하고 관리하는 최선의 방법은 무엇인가요?
Q. React 프로젝트의 코드 품질을 유지하고 팀원들의 일관된 코딩 스타일을 보장하기 위한 개발 환경 구축 전략을 제시해주세요. ESLint, Prettier, Husky, 코드 리뷰 프로세스를 포함하여 설명해주세요.
ESLint는 airbnb나 react-app 기본 룰셋에 팀 커스텀 룰을 추가하여 구성하고, Prettier로 코드 포맷팅을 자동화하며 두 도구가 충돌하지 않도록 eslint-config-prettier를 설정합니다. Husky와 lint-staged로 커밋 전 자동 린트/포맷팅을 강제하고, commitlint로 커밋 메시지 규칙을 통일합니다. 코드 리뷰는 PR 템플릿으로 체크리스트를 제공하고, 2명 이상의 승인을 필수로 하며, 자동화된 CI에서 테스트와 빌드를 검증합니다. 주기적인 코드 스타일 가이드 문서 업데이트와 팀 회고를 통해 룰을 개선합니다.
- • ESLint 커스텀 룰셋, Prettier 통합, 충돌 방지 설정
- • Husky, lint-staged로 커밋 전 자동 검증
- • PR 템플릿, 2인 이상 승인, CI 자동화
- • 코드 스타일 가이드 문서화 및 주기적 개선
주니어 개발자가 많은 팀에서 코드 리뷰의 효율성을 높이기 위한 구체적인 전략은 무엇인가요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!