React 미드레벨 CS 기초 면접

React 미드레벨 (3~7년) CS 기초 5문항 조회수 89 · 2026-06-17 (수) 11:10:55
1 네트워크
Medium

Q. React 애플리케이션에서 API 요청 시 HTTP 메서드(GET, POST, PUT, PATCH, DELETE)를 선택하는 기준과 각 메서드의 멱등성(Idempotency) 개념을 설명해주세요. 특히 PUT과 PATCH의 차이점과 실무에서 어떤 상황에 각각 사용해야 하는지 예시와 함께 설명해주세요.

A. 모범답안

GET, PUT, DELETE는 멱등성을 가지며 같은 요청을 여러 번 해도 결과가 동일하지만, POST와 PATCH는 멱등성이 보장되지 않습니다. PUT은 리소스 전체를 교체하는 용도로 사용하며 모든 필드를 포함해야 하고, PATCH는 리소스의 일부만 수정할 때 사용합니다. 예를 들어 사용자 프로필 전체를 업데이트할 때는 PUT을, 특정 필드(예: 닉네임)만 변경할 때는 PATCH를 사용합니다. React에서 폼 전체 제출은 PUT, 개별 필드 자동 저장은 PATCH로 구현하는 것이 적절합니다.

핵심 포인트
  • • 멱등성: GET, PUT, DELETE는 멱등, POST는 비멱등
  • • PUT은 리소스 전체 교체, PATCH는 부분 수정
  • • 실무에서 폼 전체 제출 vs 개별 필드 업데이트 시나리오 구분
  • • 네트워크 재시도 로직 구현 시 멱등성 고려 필요
Follow-up 질문

React에서 네트워크 요청이 실패했을 때 자동 재시도 로직을 구현한다면, 멱등성을 고려하여 어떻게 설계하시겠습니까?

2 자료구조
Medium

Q. React 애플리케이션에서 실시간 채팅 기능을 구현할 때, 메시지 목록을 효율적으로 관리하기 위한 자료구조를 제안해주세요. 새 메시지 추가, 특정 메시지 삭제, 읽음 상태 업데이트가 빈번하게 발생하는 상황에서 배열 대신 다른 자료구조를 사용하는 것이 유리한 이유를 시간 복잡도와 함께 설명해주세요.

A. 모범답안

메시지 ID를 키로 하는 Map 또는 정규화된 객체 구조를 사용하는 것이 효율적입니다. 배열의 경우 특정 메시지 검색이 O(n)이지만, Map은 O(1)에 접근 가능합니다. 메시지 순서는 별도로 ID 배열을 유지하거나 LinkedList 구조를 활용할 수 있습니다. 읽음 상태 업데이트 시 배열은 해당 인덱스를 찾고 불변성을 유지하며 복사해야 하지만, Map은 직접 해당 메시지만 업데이트할 수 있어 성능상 유리합니다. 수천 개의 메시지가 있을 때 특히 차이가 두드러집니다.

핵심 포인트
  • • Map 또는 정규화된 객체로 메시지 저장 시 검색 O(1)
  • • 배열은 검색 O(n), 중간 삽입/삭제 시 성능 저하
  • • 순서 유지를 위해 ID 배열을 별도로 관리하는 하이브리드 접근
  • • 대량의 데이터에서 부분 업데이트 시 불변성 유지 비용 고려
Follow-up 질문

무한 스크롤로 과거 메시지를 로드할 때, 메모리 관리를 위해 오래된 메시지를 제거하는 전략을 어떻게 구현하시겠습니까?

3 알고리즘
Hard

Q. React에서 대용량 데이터셋을 필터링하고 정렬하는 기능을 구현할 때, 정렬 알고리즘의 선택이 성능에 미치는 영향을 설명해주세요. JavaScript의 Array.prototype.sort()가 내부적으로 어떤 알고리즘을 사용하며, 안정 정렬(Stable Sort)이 중요한 이유와 실무 사례를 설명해주세요.

A. 모범답안

JavaScript의 Array.sort()는 V8 엔진 기준으로 TimSort(Merge Sort와 Insertion Sort의 하이브리드)를 사용하며, 평균 O(n log n)의 시간 복잡도를 가집니다. 안정 정렬은 동일한 값을 가진 요소들의 상대적 순서를 유지하는데, 다중 조건 정렬 시 중요합니다. 예를 들어 먼저 날짜로 정렬한 후 우선순위로 정렬할 때, 안정 정렬이 아니면 같은 우선순위 내에서 날짜 순서가 깨질 수 있습니다. React에서 테이블 컴포넌트의 다중 컬럼 정렬이나 정렬된 상태를 유지하며 필터링할 때 안정 정렬이 필수적입니다.

핵심 포인트
  • • JavaScript sort()는 TimSort 사용, O(n log n) 복잡도
  • • 안정 정렬은 동일 값의 상대적 순서 유지
  • • 다중 조건 정렬 시 안정 정렬 필수
  • • 대용량 데이터는 서버 사이드 정렬 고려
Follow-up 질문

10만 개 이상의 행을 가진 테이블에서 클라이언트 사이드 정렬을 구현해야 한다면, 어떤 최적화 전략을 사용하시겠습니까?

4 데이터베이스
Medium

Q. React 애플리케이션에서 관계형 데이터를 다룰 때 N+1 쿼리 문제가 발생할 수 있습니다. 이 문제가 무엇인지 설명하고, GraphQL과 REST API 환경에서 각각 어떻게 해결할 수 있는지 설명해주세요. 또한 프론트엔드에서 이 문제를 감지하고 백엔드 팀과 협업하는 방법을 제시해주세요.

A. 모범답안

N+1 쿼리 문제는 부모 데이터 N개를 조회한 후, 각 부모마다 관련 자식 데이터를 조회하여 총 N+1번의 쿼리가 발생하는 현상입니다. REST API에서는 적절한 JOIN이나 include 파라미터로 필요한 데이터를 한 번에 가져오도록 엔드포인트를 설계해야 합니다. GraphQL에서는 DataLoader를 사용해 배칭과 캐싱으로 해결할 수 있습니다. 프론트엔드에서는 브라우저 개발자 도구의 Network 탭에서 동일 패턴의 반복적인 요청을 확인하고, React Query의 devtools로 쿼리 패턴을 분석하여 백엔드 팀에 피드백할 수 있습니다.

핵심 포인트
  • • N+1 문제: 부모 조회 1번 + 각 부모당 자식 조회 N번
  • • REST는 적절한 JOIN, GraphQL은 DataLoader로 해결
  • • Network 탭에서 반복 요청 패턴 감지
  • • 백엔드와 API 설계 단계에서 필요한 데이터 구조 협의
Follow-up 질문

프론트엔드에서 여러 개의 독립적인 API 호출을 병렬로 처리하는 것과 백엔드에서 하나의 엔드포인트로 합치는 것의 트레이드오프는 무엇인가요?

5 운영체제
Medium

Q. 브라우저에서 JavaScript 실행 시 메모리 누수(Memory Leak)가 발생하는 주요 원인들을 설명하고, React 애플리케이션에서 특히 주의해야 할 메모리 누수 패턴과 이를 디버깅하는 방법을 설명해주세요. Chrome DevTools의 Memory Profiler를 어떻게 활용할 수 있나요?

A. 모범답안

JavaScript 메모리 누수의 주요 원인은 해제되지 않은 이벤트 리스너, 타이머, 클로저에 의한 참조 유지, 전역 변수 남용 등입니다. React에서는 useEffect에서 cleanup 함수를 누락하거나, unmount된 컴포넌트에서 setState 호출, 큰 데이터를 참조하는 클로저 등이 문제됩니다. Chrome DevTools의 Memory 탭에서 Heap Snapshot을 여러 시점에 찍어 비교하고, Detached DOM 노드나 계속 증가하는 객체를 찾아낼 수 있습니다. Allocation Timeline으로 메모리 할당 패턴을 시각화하여 문제 지점을 특정할 수 있습니다.

핵심 포인트
  • • 주요 원인: 미해제 이벤트 리스너, 타이머, 클로저 참조
  • • React에서 useEffect cleanup 누락이 흔한 패턴
  • • Heap Snapshot으로 시점별 메모리 비교
  • • Detached DOM과 지속 증가하는 객체 추적
Follow-up 질문

SPA에서 페이지 전환을 반복할 때마다 메모리 사용량이 계속 증가한다면, 어떤 순서로 문제를 진단하시겠습니까?

댓글 0

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

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