FEInterview Prep

YKSS

리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI

React Suspense가 내부적으로 어떻게 동작하는지를 '프로미스 던지기(throwing a Promise)' 메커니즘을 중심으로 설명한다. 컴포넌트가 비동기 데이터를 로딩할 때 프로미스를 throw하면, React가 이를 캐치하여 fallback UI를 렌더링하고 프로미스가 resolve되면 컴포넌트를 재렌더링하는 과정을 단계별로 분석한다.

2025-08-01·6분 읽기
React
원문 보기 ↗

핵심 요약

이 아티클은 React 컴포넌트와 렌더링 흐름를 실무 판단 기준으로 다시 정렬해 주는 읽기 자료입니다. React Suspense가 내부적으로 어떻게 동작하는지를 '프로미스 던지기(throwing a Promise)' 메커니즘을 중심으로 설명한다. 컴포넌트가 비동기 데이터를 로딩할 때 프로미스를 throw하면, React가 이를 캐치하여 fallback UI를 렌더링하고 프로미스가 resolve되면 컴포넌트를 재렌더링하는 과정을 단계별로 분석한다. 이 메커니즘이 어떻게 선언적 비동기 UI 패턴을 가능하게 하는지, 그리고 React 18의 concurrent mode와 어떻게 연동되는지를 설명한다.

이 아티클은 React 컴포넌트와 렌더링 흐름를 면접에서 바로 꺼낼 수 있는 답변 프레임으로 접어 두는 메모처럼 읽으면 좋습니다.

React 컴포넌트와 렌더링 흐름를 설명할 때 정의만 말하면 답변이 얕아지기 쉽습니다. Suspense는 컴포넌트 트리에서 throw된 프로미스를 캐치하여 fallback을 렌더링하는 에러 바운더리의 확장 개념이다 실무 판단 근거와 면접 답변의 밀도를 동시에 끌어올릴 수 있습니다.

학습 포인트

면접 답변으로 연결할 학습 포인트입니다.

Suspense는 컴포넌트 트리에서 throw된 프

Suspense는 컴포넌트 트리에서 throw된 프로미스를 캐치하여 fallback을 렌더링하는 에러 바운더리의 확장 개념이다 이 포인트를 알고 있으면 비슷한 상황에서 왜 이 접근을 선택하는지까지 설명할 수 있습니다.

Suspensethrowfallback컴포넌트
자주 하는 오해

Suspense는 컴포넌트 트리에서 throw된 프를 개념으로만 기억하고 맥락 없이 적용하면 Suspense는 컴포넌트 트리에서 throw된 프로미스를 캐치하여 fallback을 렌더링하는 에러 바운더리의 확장 개념이다 패턴 이름만 외우고 적용 조건을 구분하지 않으면 비슷한 문제에 같은 해법을 남용하게 됩니다.

데이터 페칭 라이브러리

데이터 페칭 라이브러리(React Query, SWR)는 캐시 미스 시 프로미스를 throw하고 resolve 후 캐시에서 데이터를 반환한다 이 포인트를 알고 있으면 비슷한 상황에서 왜 이 접근을 선택하는지까지 설명할 수 있습니다.

ReactQuerySWRthrow
자주 하는 오해

데이터 페칭 라이브러리를 개념으로만 기억하고 맥락 없이 적용하면 데이터 페칭 라이브러리(React Query, SWR)는 캐시 미스 시 프로미스를 throw하고 resolve 후 캐시에서 데이터를 반환한다 패턴 이름만 외우고 적용 조건을 구분하지 않으면 비슷한 문제에 같은 해법을 남용하게 됩니다.

React 18의 concurrent renderi

React 18의 concurrent rendering과 함께 Suspense는 렌더링 우선순위 제어와 결합되어 더욱 강력해졌다 이 포인트를 알고 있으면 비슷한 상황에서 왜 이 접근을 선택하는지까지 설명할 수 있습니다.

ReactconcurrentrenderingSuspense
자주 하는 오해

React 18의 concurrent renderi를 개념으로만 기억하고 맥락 없이 적용하면 React 18의 concurrent rendering과 함께 Suspense는 렌더링 우선순위 제어와 결합되어 더욱 강력해졌다 패턴 이름만 외우고 적용 조건을 구분하지 않으면 비슷한 문제에 같은 해법을 남용하게 됩니다.

읽는 순서

  1. 1이론

    "리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI"의 멘탈 모델과 요약을 먼저 읽고, React 컴포넌트와 렌더링 흐름와 관련된 핵심 용어 3개를 적어보세요.

  2. 2구현

    리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI에서 다룬 아이디어를 작은 예제로 직접 구현하거나 기존 코드에 대입해 보면서 적용 조건을 확인하세요.

  3. 3실무

    현재 프로젝트에서 React 컴포넌트와 렌더링 흐름와 연결되는 화면이나 코드 리뷰 사례를 찾아, 어디서 같은 판단이 필요한지 정리해보세요.

  4. 4설명

    동료에게 "React Suspense의 동작 원리를 설명하고, 컴포넌트에서 프로미스를 throw한다는 것이 무엇을 의미하는지 설명해주세요."에 대한 답을 5분 안에 설명해보세요. 막히는 부분이 아직 이해가 얕은 구간입니다.

면접 연결 질문

hardReact Suspense의 동작 원리를 설명하고, 컴포넌트에서 프로미스를 throw한다는 것이 무엇을 의미하는지 설명해주세요.
힌트

[감점 답변] 용어 정의만 반복하거나 "리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI에서 그렇게 하더라" 수준으로 답하면 감점 포인트입니다. 면접관은 개념을 외운 사람보다 판단 근거를 말하는 사람을 찾습니다. [좋은 답변] React가 렌더링 중 throw된 값이 Promise인지 확인하고, 맞다면 fallback을 표시한 뒤 Promise.then으로 resolve를 감지하여 재렌더링하는 흐름을 설명하세요. 가능하면 선택 이유, 트레이드오프, 실제로 문제가 되는 상황까지 함께 연결하세요.

mediumSuspense와 ErrorBoundary를 함께 사용해야 하는 이유는 무엇인가요?
힌트

[감점 답변] 용어 정의만 반복하거나 "리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI에서 그렇게 하더라" 수준으로 답하면 감점 포인트입니다. 면접관은 개념을 외운 사람보다 판단 근거를 말하는 사람을 찾습니다. [좋은 답변] Suspense는 로딩 상태(pending promise)를 처리하고, ErrorBoundary는 rejected promise나 런타임 에러를 처리함. 두 가지가 함께 완전한 비동기 UI 패턴을 구성함을 설명하세요. 가능하면 선택 이유, 트레이드오프, 실제로 문제가 되는 상황까지 함께 연결하세요.

easyReact.lazy()와 Suspense를 사용한 코드 스플리팅 구현 방법을 설명해주세요.
힌트

[감점 답변] 용어 정의만 반복하거나 "리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI에서 그렇게 하더라" 수준으로 답하면 감점 포인트입니다. 면접관은 개념을 외운 사람보다 판단 근거를 말하는 사람을 찾습니다. [좋은 답변] React.lazy로 동적 import를 감싸고, Suspense의 fallback prop으로 로딩 UI를 제공하는 기본 패턴을 코드와 함께 설명하세요. 가능하면 선택 이유, 트레이드오프, 실제로 문제가 되는 상황까지 함께 연결하세요.

자기 점검

"Suspense는 컴포넌트 트리에서 throw된 프"가 왜 중요한지 스크롤 올리지 않고 한 문장으로 설명해보세요.
Suspensethrowfallback컴포넌트
자주 하는 오해

"Suspense는 컴포넌트 트리에서 throw된 프"를 기능 목록으로만 외우는 것. 실제로는 왜 이 접근이 필요한지와 적용 조건까지 설명해야 합니다.

리액트 서스펜스의 내부 작동 원리: 프로미스를 던지기와 선언적 비동기 UI에서 강조한 판단 기준을 실무 예시와 함께 설명해보세요.
ReactQuerySWRthrow
자주 하는 오해

좋은 사례만 기억하고 실패 조건을 빼먹는 것. 실제 면접에서는 언제 위험해지는지까지 함께 말해야 합니다.