# [[Suspense]] ## πŸ“Œ Brief Summary Reactμ—μ„œ μ œκ³΅ν•˜λŠ” λ‚΄μž₯ λ„κ΅¬λ‘œ, 주둜 `React.lazy()`와 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”λ“œ λΆ„ν• (Code Splitting) 및 μ§€μ—° λ‘œλ”©(Lazy Loading)을 κ΅¬ν˜„ν•˜λŠ” 데 핡심적인 역할을 ν•©λ‹ˆλ‹€ [1, 2]. λ™μ μœΌλ‘œ λΆˆλŸ¬μ˜€λŠ” λͺ¨λ“ˆμ΄λ‚˜ 데이터가 λ‘œλ“œλ˜λŠ” λ™μ•ˆ μ‚¬μš©μžμ—κ²Œ 보여쀄 λŒ€μ²΄ UI(예: λ‘œλ”© μŠ€ν”Όλ„ˆ, μŠ€μΌˆλ ˆν†€ μƒνƒœ)λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€ [3, 4]. 이λ₯Ό 톡해 초기 JavaScript λ²ˆλ“€ 크기λ₯Ό 쀄이고 μ‚¬μš©μž κ²½ν—˜κ³Ό λ Œλ”λ§ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 3]. ## πŸ“– Core Content * **μ§€μ—° λ‘œλ”©(Lazy Loading)κ³Ό λ²ˆλ“€ 크기 μ΅œμ ν™”**: λͺ¨λ˜ ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 규λͺ¨κ°€ 컀짐에 따라 JavaScript λ²ˆλ“€ 크기가 μ¦κ°€ν•˜μ—¬ 초기 λ‘œλ“œ μ‹œκ°„μ΄ λŠλ €μ§€λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [1, 2]. `Suspense`λ₯Ό `React.lazy()` ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ λŒ€μ‹œλ³΄λ“œ, 차트, 지도와 같이 무거운 μ»΄ν¬λ„ŒνŠΈλ‚˜ 거의 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ·°λ₯Ό ν•„μš”ν•  λ•Œλ§Œ μ˜¨λ””λ§¨λ“œ(on-demand) λ°©μ‹μœΌλ‘œ λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 3, 5]. 이 μ ‘κ·Ό 방식은 초기 λ²ˆλ“€ 크기λ₯Ό 잠재적으둜 20~70%κΉŒμ§€ κ°μ†Œμ‹œν‚€λ©°, TTI(Time to Interactive) 및 Core Web Vitals μ§€ν‘œλ₯Ό κ°œμ„ ν•˜λŠ” 데 κΈ°μ—¬ν•©λ‹ˆλ‹€ [1-3]. * **라우트 레벨의 μ½”λ“œ λΆ„ν• (Route-level Code Splitting)**: Vite와 같은 λ²ˆλ“€λŸ¬λ₯Ό μ‚¬μš©ν•˜λŠ” React ν”„λ‘œμ νŠΈμ—μ„œ 각 νŽ˜μ΄μ§€ 라우트 μš”μ†Œλ₯Ό ``둜 감싸면, 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ ν•œ λ²ˆμ— λ‘œλ“œλ˜λŠ” 것을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 7]. 결과적으둜 각 νŽ˜μ΄μ§€λŠ” κ°œλ³„ 청크(chunk) 파일둜 λΆ„λ¦¬λ˜μ–΄, μ‚¬μš©μžκ°€ ν•΄λ‹Ή 경둜둜 이동할 λ•Œλ§Œ λ‹€μš΄λ‘œλ“œλ˜λ„λ‘ μ΅œμ ν™”λ©λ‹ˆλ‹€ [7, 8]. * **λŒ€μ²΄ UI(Fallback UI) 제곡**: μ§€μ—° λ‘œλ”© 쀑인 μ»΄ν¬λ„ŒνŠΈκ°€ 쀀비될 λ•ŒκΉŒμ§€ 화면이 λΉ„μ–΄μžˆκ±°λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 멈좘 κ²ƒμ²˜λŸΌ 보이지 μ•Šλ„λ‘, `` μ»΄ν¬λ„ŒνŠΈμ˜ `fallback` 속성을 톡해 λ‘œλ”© μΈλ””μΌ€μ΄ν„°λ‚˜ μŠ€μΌˆλ ˆν†€ UIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ [3]. * **λ™μ‹œμ„± λ Œλ”λ§(Concurrent Rendering)과의 μ‹œλ„ˆμ§€**: React 18의 λ™μ‹œμ„± κΈ°λŠ₯(예: `useTransition`)κ³Ό κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•  경우, 데이터가 λ‘œλ“œλ˜κ±°λ‚˜ 무거운 필터링 μž‘μ—…μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ 즉각적인 μ‚¬μš©μž μƒν˜Έμž‘μš©(타이핑, 클릭 λ“±)을 μ°¨λ‹¨ν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ μ•ˆμ •μ μœΌλ‘œ `fallback` UIλ₯Ό ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React.lazy()]], [[Code Splitting]], [[Lazy Loading]], [[Performance Optimization]], [[Concurrent Features]] - **Projects/Contexts:** [[Vite + React μ„±λŠ₯ μ΅œμ ν™”]], [[ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ Œλ”λ§ 병λͺ© κ°œμ„ ]] - **Contradictions/Notes:** ν•„μˆ˜μ μΈ μ–΄λ³΄λΈŒ 더 ν΄λ“œ(above-the-fold) μ»΄ν¬λ„ŒνŠΈλ‚˜ μ¦‰μ‹œ 화면에 λ Œλ”λ§λ˜μ–΄μ•Ό ν•˜λŠ” λΉ λ₯Έ UI μš”μ†Œμ—λŠ” `Suspense`와 μ§€μ—° λ‘œλ”©μ„ μ μš©ν•˜λŠ” 것을 ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€ [5]. --- *Last updated: 2026-04-26*