React 미드레벨 기술면접

React 미드레벨 (3~7년) 종합 5문항 조회수 127 · 2026-05-02 (토) 19:10:58
1 React 상태관리
Medium

Q. useState의 setter 함수에 값을 직접 전달하는 방식과 함수를 전달하는 방식(functional update)의 차이는 무엇이며, 각각 어떤 상황에서 사용해야 하나요? 실무에서 잘못 사용했을 때 발생할 수 있는 버그 사례를 설명해주세요.

A. 모범답안

setState(value)는 현재 state 값을 클로저로 캡처하여 사용하고, setState(prev => prev + 1)는 최신 state를 보장받습니다. 이벤트 핸들러에서 여러 번 state를 업데이트하거나, useEffect/setTimeout 같은 비동기 콜백 내에서 state를 참조할 때는 functional update를 사용해야 합니다. 직접 값을 전달하면 클로저 문제로 인해 이전 값을 참조하여 업데이트가 누락되는 버그가 발생할 수 있습니다. 특히 카운터 증가, 배열/객체 업데이트 시 이전 상태에 의존하는 경우 반드시 함수형 업데이트를 사용해야 합니다.

핵심 포인트
  • • 직접 전달 방식은 렌더링 시점의 state를 클로저로 캡처
  • • 함수형 업데이트는 React가 최신 state를 인자로 전달하여 항상 최신 값 보장
  • • 연속된 업데이트나 비동기 콜백에서는 함수형 업데이트 필수
  • • 클로저 문제로 인한 stale state 참조 방지
Follow-up 질문

useReducer를 사용하면 이러한 문제를 어떻게 해결할 수 있나요? useState 대신 useReducer를 선택하는 기준은 무엇인가요?

2 React 성능 최적화
Hard

Q. React.memo, useMemo, useCallback의 차이점을 설명하고, 이들을 과도하게 사용했을 때 오히려 성능이 저하될 수 있는 이유는 무엇인가요? 실무에서 최적화를 적용할지 판단하는 기준을 제시해주세요.

A. 모범답안

React.memo는 컴포넌트 메모이제이션, useMemo는 계산 비용이 높은 값의 메모이제이션, useCallback은 함수 참조 메모이제이션입니다. 과도한 사용 시 메모이제이션 자체의 비교 비용(shallow comparison)과 메모리 오버헤드가 발생하여 오히려 성능이 저하됩니다. 최적화 적용 기준은 1) 실제 성능 문제가 측정되었을 때, 2) 렌더링 비용이 높은 컴포넌트, 3) props가 자주 변경되지 않는 경우, 4) 자식 컴포넌트가 React.memo로 감싸져 있어 참조 동일성이 중요한 경우입니다. 프로파일러로 측정 후 병목이 확인된 부분에만 선택적으로 적용하는 것이 좋습니다.

핵심 포인트
  • • React.memo는 컴포넌트, useMemo는 값, useCallback은 함수 메모이제이션
  • • 메모이제이션 비용과 메모리 오버헤드 존재
  • • 조기 최적화는 오히려 코드 복잡도만 증가
  • • React DevTools Profiler로 측정 후 선택적 적용
  • • props 변경 빈도와 렌더링 비용을 고려한 의사결정
Follow-up 질문

React 18의 useDeferredValue와 useTransition을 사용한 최적화 방법과 기존 메모이제이션 기법과의 차이점은 무엇인가요?

3 React 아키텍처
Medium

Q. React 애플리케이션에서 전역 상태관리 라이브러리(Redux, Zustand, Recoil 등)를 도입할지 결정하는 기준은 무엇이며, Context API만으로 충분한 경우와 외부 라이브러리가 필요한 경우를 구분하여 설명해주세요.

A. 모범답안

Context API는 업데이트 빈도가 낮고 컴포넌트 트리가 깊지 않을 때 적합하며, 테마, 인증 정보, 언어 설정 등에 사용합니다. 외부 라이브러리는 1) 상태 업데이트가 빈번한 경우, 2) 세밀한 렌더링 최적화가 필요한 경우, 3) 미들웨어(로깅, 비동기 처리)가 필요한 경우, 4) 개발자 도구와 시간 여행 디버깅이 필요한 경우에 도입합니다. Context는 Provider 하위 모든 Consumer가 리렌더링되는 한계가 있어 성능이 중요한 대규모 앱에서는 부적합합니다. 상태의 성격(서버 상태 vs 클라이언트 상태)을 구분하고, React Query 같은 서버 상태 라이브러리와의 조합도 고려해야 합니다.

핵심 포인트
  • • Context API는 업데이트 빈도가 낮은 상태에 적합
  • • 외부 라이브러리는 성능 최적화와 미들웨어가 필요할 때 도입
  • • 서버 상태와 클라이언트 상태 분리 고려
  • • 팀 규모, 프로젝트 복잡도, 유지보수성을 종합적으로 판단
  • • 작게 시작해서 필요시 점진적으로 마이그레이션
Follow-up 질문

서버 상태와 클라이언트 상태를 분리하는 것이 왜 중요하며, React Query나 SWR 같은 라이브러리가 해결하는 문제는 무엇인가요?

4 React 코드 품질
Medium

Q. 동료가 작성한 컴포넌트에서 useEffect의 dependency array가 비어있거나 exhaustive-deps 경고를 무시하는 코드를 발견했습니다. 코드 리뷰 시 어떤 문제점을 지적하고, 어떻게 개선해야 하는지 설명해주세요. 의도적으로 빈 배열을 사용하는 정당한 경우도 있나요?

A. 모범답안

dependency array를 잘못 사용하면 stale closure 문제로 최신 props/state를 참조하지 못하거나, 의도하지 않은 부수효과가 발생합니다. eslint-plugin-react-hooks의 exhaustive-deps 규칙을 따라 effect 내부에서 사용하는 모든 외부 값을 의존성에 포함해야 합니다. 개선 방법은 1) 필요한 의존성 추가, 2) useCallback/useMemo로 참조 안정화, 3) effect 분리, 4) useReducer로 로직 통합입니다. 정당하게 빈 배열을 사용하는 경우는 컴포넌트 마운트 시 한 번만 실행되어야 하는 초기화 로직(이벤트 리스너 등록, 외부 라이브러리 초기화)이지만, 이 경우에도 effect 내부에서 외부 값을 참조하지 않아야 합니다.

핵심 포인트
  • • exhaustive-deps 경고는 잠재적 버그를 알려주는 중요한 신호
  • • stale closure로 인한 버그 발생 가능성
  • • 의존성 배열을 정확히 작성하거나 effect 로직 재설계
  • • 의도적인 빈 배열 사용은 마운트 시 한 번만 실행되는 초기화에 한정
  • • useEffectEvent(실험적) 또는 ref를 활용한 패턴 고려
Follow-up 질문

useEffect에서 cleanup 함수가 중요한 이유와, cleanup을 제대로 작성하지 않았을 때 발생할 수 있는 메모리 누수나 버그 사례를 설명해주세요.

5 React 시스템 설계
Hard

Q. 대규모 React 애플리케이션에서 코드 스플리팅과 lazy loading을 적용할 때 고려해야 할 사항들과, Suspense를 활용한 로딩 상태 관리 전략을 설명해주세요. 또한 SSR 환경에서 코드 스플리팅을 적용할 때 주의해야 할 점은 무엇인가요?

A. 모범답안

코드 스플리팅은 React.lazy와 dynamic import를 사용하여 라우트 레벨 또는 컴포넌트 레벨에서 적용하며, 번들 크기 감소와 초기 로딩 속도 개선이 목표입니다. Suspense로 로딩 상태를 선언적으로 관리하고, 여러 lazy 컴포넌트를 하나의 Suspense로 감싸 로딩 UI를 통합할 수 있습니다. 고려사항은 1) 적절한 chunk 크기와 분할 기준, 2) prefetching/preloading 전략, 3) 에러 바운더리와 함께 사용, 4) 로딩 폭포수 방지입니다. SSR 환경에서는 React.lazy가 서버에서 동작하지 않으므로 loadable-components 같은 라이브러리를 사용하거나, Next.js의 dynamic import를 활용해야 하며, 서버와 클라이언트의 chunk 매칭이 중요합니다.

핵심 포인트
  • • 라우트 레벨 스플리팅으로 초기 번들 크기 최소화
  • • Suspense로 선언적 로딩 상태 관리
  • • 적절한 chunk 분할 기준 설정(너무 작으면 네트워크 오버헤드)
  • • prefetch로 사용자 경험 향상
  • • SSR에서는 React.lazy 대신 별도 라이브러리 필요
  • • hydration mismatch 방지
Follow-up 질문

React 18의 Streaming SSR과 Selective Hydration이 코드 스플리팅 및 성능 최적화에 어떤 이점을 제공하나요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!