Update: Wikified 129 files from Datacollector_MAC/out_wiki (P-Reinforce v3.0)
This commit is contained in:
@@ -1,13 +1,35 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-DBD8A4
|
||||
category: "10_Wiki/💡 Topics/Software Engineering"
|
||||
confidence_score: 0.95
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-05-03
|
||||
github_commit: "[P-Reinforce] Continuous Worker - React Suspense"
|
||||
category: React Suspense.md
|
||||
tags: [auto-wikified, technical-documentation, merged, react suspense.md]
|
||||
title: Suspense
|
||||
description: "Suspense는 React 및 Vue 프레임워크에서 데이터 페칭(Fetching)이나 비동기 컴포넌트 로딩 작업이 완료될 때까지 렌더링을 대기(Suspend)시키고, 그 동안 대체할 수 있는 로딩 상태(Fallback UI)를 지능적으로 표시하는 컴포넌트 기반 ..."
|
||||
last_updated: 2026-05-04
|
||||
---
|
||||
|
||||
# [[React Suspense|React Suspense]]
|
||||
# Suspense
|
||||
|
||||
|
||||
## 📌 Brief 신Summary
|
||||
Suspense는 React 및 Vue 프레임워크에서 데이터 페칭(Fetching)이나 비동기 컴포넌트 로딩 작업이 완료될 때까지 렌더링을 대기(Suspend)시키고, 그 동안 대체할 수 있는 로딩 상태(Fallback UI)를 지능적으로 표시하는 컴포넌트 기반 아키텍처 패턴이다 [1-3]. 특히 React의 서버 컴포넌트(RSC), 스트리밍 아키텍처 및 동시성(Concurrent) 모드와 결합하여, 사용 가능한 데이터부터 즉시 렌더링하고 나머지는 준비되는 대로 전송하는 비순차적 스트리밍(Out-of-order streaming)을 구현하는 핵심 요소로 작동한다 [1, 4, 5].
|
||||
|
||||
## 📖 Core Content
|
||||
* **비순차적 스트리밍(Out-of-order streaming)과 점진적 하이드레이션:** React의 서버 컴포넌트(RSC) 환경에서 Suspense 바운더리 위에 있는 콘텐츠는 즉시 렌더링된다 [1]. 서버는 모든 데이터가 로드될 때까지 기다리지 않고 초기 셸(Shell)을 먼저 전송한 뒤, 각 Suspense 바운더리에 해당하는 데이터가 해결되는 대로 클라이언트에 점진적으로 스트리밍한다 [2, 5]. 클라이언트는 전송 중인 데이터가 도착하는 대로 하이드레이션을 시작할 수 있으며, 내부적으로 주석 노드 마커(`<!--$-->`, `<!--$!-->`)와 재시도 콜백 메커니즘을 활용하여 이 과정을 처리한다 [5, 6].
|
||||
* **동시성 렌더링(Concurrent Rendering) 지원:** React Native의 새로운 아키텍처인 Fabric 렌더러와 React 18의 동시성 기능과 호환되어 작동한다 [4]. 이는 React가 렌더링의 우선순위를 지정하거나 사용자 입력에 반응하기 위해 렌더링을 일시 중단할 수 있게 만들어, 더욱 유동적이고 반응성 높은 UI를 구현하게 해준다 [4].
|
||||
* **지연 로딩(Lazy Loading)의 시각적 처리:** `React.lazy`를 통해 컴포넌트를 청크(Chunk) 단위로 분리하여 필요할 때만 로드하여 성능을 최적화할 때, Suspense를 사용하여 로딩 중임을 나타내는 Fallback UI(예: `<Suspense fallback={<div>Loading...</div>}>`)를 매끄럽게 표시할 수 있다 [7].
|
||||
* **데이터 페칭 라이브러리와의 통합:** React Query 등 데이터 상태 관리 라이브러리의 `useSuspenseQuery` 훅과 결합하여, 클라이언트 컴포넌트 내부에서 비동기 호출을 처리하며 데이터가 준비될 때까지 UI 렌더링을 지연시킬 수 있다 [8].
|
||||
* **Vue 프레임워크에서의 확대 적용:** React뿐만 아니라 대규모 웹 애플리케이션을 위한 Vue 3 코어 업데이트에서도 Suspense에 대한 지원이 강화되었다 [3]. 비동기 컴포넌트를 서버에서 가져오는 동안 사용자에게 우아한 로딩 스켈레톤이나 폴백(Fallback) UI를 제공하는 데 활용된다 [3].
|
||||
|
||||
## ⚖️ Trade-offs & Caveats
|
||||
* **상태 업데이트 시의 시각적 파괴(UX 저하) 위험:** 라우팅 변경이나 쿼리 문자열 업데이트로 인해 비동기 훅(예: `useSuspenseQuery`)이 다시 트리거될 때, 적절한 트랜지션 처리(예: `startTransition`)를 해주지 않으면 현재 화면이 파괴되고 가장 가까운 Suspense 바운더리의 Fallback UI가 강제로 나타난다 [8, 9]. 이는 사용자에게 매우 끔찍한 UI 경험(awful UI)을 제공할 수 있으므로, 비동기 업데이트 시 기존 콘텐츠를 유지하기 위한 섬세한 제어가 필수적이다 [8, 9].
|
||||
* **데이터 로딩의 폭포수(Waterfall) 현상 주의:** 부모 컴포넌트와 자식 컴포넌트가 각각 독립적으로 데이터를 로드하는 경우에도, 자식 컴포넌트는 부모의 데이터 로드가 끝날 때까지 데이터 페칭조차 시작하지 못하는 블로킹(Blocking) 현상이 발생할 수 있다 [10]. 이를 방지하려면 컴포넌트 트리 상위에서 데이터를 병렬로 로드하여 전달하는 등의 최적화 설계가 동반되어야 한다 [10].
|
||||
* **로딩 상태 관리의 복잡성 증대:** Suspense를 사용하지 않는 전통적인 훅(예: `useQuery`) 기반 렌더링에서는 개발자가 수동으로 여러 데이터의 로딩 상태를 통합하여 관리할 수 있다 [11]. 그러나 Suspense 기반 라우팅과 캐싱 메커니즘에 전적으로 의존하게 될 경우, 특정 동작(예: `window.history.pushState`)을 사용할 때 여러 데이터의 동기화나 로딩 상태 병합을 개발자가 모두 수동으로 다시 추적하고 수집해야 하는 등 아키텍처의 복잡성이 커질 수 있다 [11].
|
||||
|
||||
---
|
||||
*Last updated: 2026-05-03*
|
||||
|
||||
## 📚 Legacy Insights & Additional Context
|
||||
> [!NOTE]
|
||||
> Below is content merged from previous versions of this documentation.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
React Suspense는 비동기 작업(데이터 페칭, 컴포넌트 지연 로딩 등)이 완료될 때까지 대기하며 사용자에게 로딩 스피너와 같은 대체(Fallback) UI를 보여줄 수 있도록 하는 선언적 설계 패턴이다 [1, 2]. 특히 React Server Components(RSC) 및 Streaming SSR과 결합하여, 전체 데이터를 기다리지 않고 HTML 셸(Shell)을 즉시 렌더링한 뒤 완료되는 경계별로 데이터를 점진적으로 스트리밍하는 핵심적인 역할을 수행한다 [3, 4].
|
||||
|
||||
Reference in New Issue
Block a user