μ΅μ React 18 + Next.js App Router νκ²½μμ λμ
λ Streaming SSR κ°λ
κ³Ό μ€λ¬΄ μ μ© μ λ΅μ μ 리ν λ¬Έμμ
λλ€.
β
Streaming SSRμ΄λ?
- *Streaming SSR (Server-Side Rendering)**μ μλ²μμ HTML μ 체λ₯Ό λ λλ§ν ν ν λ²μ μ μ‘νλ κΈ°μ‘΄ SSRκ³Ό λ¬λ¦¬, λ λλ§λ HTML μ‘°κ°(chunk)μ μ μ§μ μΌλ‘ ν΄λΌμ΄μΈνΈμ μ μ‘νλ λ°©μμ
λλ€.
React 18μ ReactDOMServer
κ° μ§μνλ©°, Next.js App Routerμμ νμ©λ©λλ€.
β
κΈ°λ³Έ λμ μ리
- λΈλΌμ°μ κ° νμ΄μ§ μμ²
- μλ²λ νμ΄μ§ μ»΄ν¬λνΈλ₯Ό Reactλ‘ λ λλ§
- κ°
<Suspense>
κ²½κ³λ§λ€ HTMLμ "λΆλΆμ μΌλ‘ flush()"
- ν΄λΌμ΄μΈνΈλ μ‘°κ°λ³ HTMLμ λ°μ μ¦μ νλ©΄μ νμ
- λλ¦° λΆλΆμ λμ€μ λ°λΌ λμ°© (μ μ§μ λ λλ§)
μμ:
<Suspense fallback={<div>Loading...</div>}>
<Component1 /> // 1μ΄ delay
</Suspense>
<Suspense fallback={<div>Loading...</div>}>
<Component2 /> // 2μ΄ delay
</Suspense>
μ€ν νλ¦:
- 1μ΄ ν: Component1 λ λλ§
- 2μ΄ ν: Component2 λ λλ§
β
μ€νΈλ¦¬λ°μ΄ μλνλ 쑰건
- β
<Suspense>
μ¬μ© (flush κ²½κ³κ° λ¨)