Server Components
Next13์ด ๋ฑ์ฅํ๋ฉด์ ๊ฐ์ฅ ์ค์ํ ๋ณํ๋ ์๋ฒ ์ปดํฌ๋ํธ๋ผ๊ณ ์๊ฐ๋๋ค
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ(RSC)๋ ์๋ฒ์์ ๋ ๋๋ง๋๊ณ ์ ํ์ ์ผ๋ก ์บ์๋ ์ ์๋ UI๋ฅผ ์์ฑํ ์ ์๋๋ก ํด์ค๋ค.
NextJS์์ ๋ ๋๋ง ์์
์ Route Segment ๋ณ๋ก ๋ถํ ๋๊ธฐ ๋๋ฌธ์ ์คํธ๋ฆฌ๋ฐ(Streaming)๊ณผ ๋ถ๋ถ ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค.
์๋ฒ ๋ ๋๋ง ๋ฐฉ์์๋ 3๊ฐ์ง๊ฐ ์๋ค.
- Static Rendering (์ ์ ๋ ๋๋ง)
- Dynamic Rendering (๋์ ๋ ๋๋ง)
- Streaming (์คํธ๋ฆฌ๋ฐ)
Benefits of Server Rendering
์๋ฒ์์ ๋ ๋๋ง์ ํ์ ๋์ ์ด์
- Data Fetching (๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ)
- ์๋ฒ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ก์ง์ ๋ฐ์ดํฐ ์์ค์ ๊ฐ๊น์ด์ ์๋ "์๋ฒ"๋ก ์ด์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- ์ด๊ฒ์ ๋ ๋๋ง์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์๊ฐ๊ณผ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ํ๋ ์์ฒญ์ ์๋ฅผ ๋จ์ถ์์ผ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
- Security (๋ณด์)
- ์๋ฒ ์ปดํฌ๋ํธ๋ ํ ํฐ๊ณผ API ํค ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๋ก์ง์ ์๋ฒ์ ์ ์งํ๋๋ก ํด์ค๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ ๋ณด๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ ธ์ถ๋ ์ํ์ ์์ ์ค๋ค.
- Caching (์บ์ฑ)
- ์๋ฒ์์ ๋ ๋๋ง์ ํจ์ผ๋ก์จ ๋ ๋๋ง ๊ฒฐ๊ณผ๊ฐ ์๋ฒ์ ์บ์ฑ๋ ์ ์๊ณ , ๋ค์๋ฒ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ์ ์์ฒญ์ด ์์ ๋ ์ฌ์ฌ์ฉํ ์ ์๋ค.
- ์ด๊ฒ์ ๊ฐ๊ฐ์ ์์ฒญ์ ๋ํด ๋ฐ์ํ๋ ์์ฒญ๋ ์์ ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ์์ฒญ์ ์ค์์ผ๋ก์จ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋น์ฉ์ ์ ๊ฐํ๋ค.
- Performance (์ฑ๋ฅ)
- ์๋ฒ ์ปดํฌ๋ํธ๋ ์ฑ๋ฅ์ ์ต์ ํ ํ ์ ์๋ ์ถ๊ฐ์ ์ธ ํด์ ์ ๊ณตํ๋ค.
- ์๋ฅผ ๋ค์ด, ๋น์ ์ด ์์ ํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ ์ฑ์ ์์ํ๋ค๊ณ ํ์ ๋
- ์ํธ์์ฉ์ด ํ์์๋ ๋ถ๋ถ๋ค์ ์๋ฒ๋ก ์ฎ๊น์ผ๋ก์จ ํด๋ผ์ด์ธํธ์ธก์ ์ ๋ฌํด์ผํ JavaScript์ ์์ ์ค์ผ ์ ์๋ค.
- ์ด๊ฒ์ ๋๋ฆฐ ์ธํฐ๋ท ๋๋ ๋ powerfulํ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์๊ฒ ์ด๋์ธ๋ฐ,
- ํด๋ผ์ด์ธํธ์ธก์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ์ ์ ์์ JavaScript๋ฅผ ๋ค์ด๋ฐ๊ณ , ํ์ฑํ๊ณ , ์คํํด๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค
- Initial Page Load and First Contentful Paint(FCP)
- ์๋ฒ์์ ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ฆ๊ฐ์ ์ผ๋ก ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋๋ก HTML์ ์์ฑํ ์ ์๋ค
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํ JavaScript๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ํ์ฑํ๊ณ , ์คํํ ํ์๊ฐ ์๋ค.
- Search Engine Optimization and Social Network Shareability (๊ฒ์ ์์ง ์ต์ ํ)
- ๋ ๋๋ง๋ HTML์ ๊ฒ์์์ง ๋ด์ ์ํด ๋น์ ์ ํ์ด์ง๋ฅผ ์์ธํํ๋๋ฐ ์ฌ์ฉ๋ ์ ์๋ค.
- ๋ ๋๋ง๋ HTML์ ์์ ๋คํธ์ํฌ ๋ด์ด ๋น์ ์ ํ์ด์ง์ ๋ํ Social Card ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋ ์ ์๋ค.
- ์ฌ๊ธฐ์ ๋ ๋๋ง๋ HTML์ ์๋ฒ ์ฌ์ด๋์์ ๋ฏธ๋ฆฌ ๋ ๋๋ง๋ HTML์ ์๋ฏธํ๋ค
- Streaming (์คํธ๋ฆฌ๋ฐ)
- ์๋ฒ ์ปดํฌ๋ํธ๋ ๋ ๋๋ง ์์ ์ Chunk ๋จ์๋ก ๋ถํ ํ ์ ์๋๋ก ํด์ค๋ค
- ๊ทธ๋ฆฌ๊ณ ๋ ๋๋ง์ด ์ค๋น๋๋๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์คํธ๋ฆผ๋๋๋ก ํด์ค๋ค
- ์ด๊ฒ์ ์ฌ์ฉ์๊ฐ ์ ์ฒด ํ์ด์ง๊ฐ ๋ก๋๋๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ์ค๋น๋ ๋ถ๋ถ๋ถํฐ ๋ณผ ์ ์๋๋ก ํด์ค๋ค
๊ฐ์ธ์ ์ธ ์๊ฒฌ์ด์ง๋ง 1,2๋ฒ์ Next ํ๋ก์ ํธ๊ฐ ๋ฐ์ดํฐ ์๋ฒ์ ๊ฐ์ ๊ณณ์ ์์ ๋์ ์ด์ผ๊ธฐ์ธ ๊ฒ ๊ฐ๋ค.
Using Server Components in Next.js
์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ๊ธฐ๋ณธ์ ์ผ๋ก NextJS๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค
- ์ด๊ฒ์ ์ถ๊ฐ์ ์ธ ์ค์ ์์ด ์๋ฒ ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค
- ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก ํ์์ ์ํค ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค
- ์๋จ์ 'use client'๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค (์์ธํ ๊ฑด Client Components ์ฐธ๊ณ ํ๊ธฐ)
How are Server Componetns rendered?
์๋ฒ ์ปดํฌ๋ํธ๋ ์ด๋ป๊ฒ ๋ ๋๋๋์ง?
- ์๋ฒ์์ NextJS๋ ๋ ๋๋ง์ ์กฐ์ ํ๊ธฐ ์ํด ๋ฆฌ์กํธ์ API๋ฅผ ์ฌ์ฉํ๋ค
- ๋ ๋๋ง ์์
์ Chunk ๋จ์๋ก ๋ถํ ๋๋ค
- ๊ฐ๋ณ Route Segments์ Suspense Boundaries ๋ณ๋ก
๊ฐ๊ฐ์ Chunk์ ๋ ๋๋ง์ 2๋จ๊ณ๋ก ์งํ๋๋ค
- React๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ React Server Component Payload(RSC Payload)๋ผ ๋ถ๋ฆฌ๋ ํน๋ณํ ๋ฐ์ดํฐ ํํ๋ก ๋ ๋๋งํ๋ค.
- NextJS๋ HTML์ ๋ ๋ํ๊ธฐ ์ํด RSC Payload์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ JavaScript ๋ช
๋ น์ ์ฌ์ฉํ๋ค.
=> ์ฆ, React์์ ์์ฑ๋ RSC Payload์ ํด๋ผ์ด์ธํธ์ธก JavaScript ๋ช ๋ น์ ๊ฒฐํฉํด์ HTML์ ์์ฑํ๋ค
ํด๋ผ์ด์ธํธ ์ธก์์๋?
- HTML์ ์ํธ์์ฉ์ด ์๋ ๋ถ๋ถ์ ์ฆ๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค - ์ด๊ฒ์ ์ด๊ธฐ ํ์ด์ง ๋ ๋๋ฅผ ์ํด์๋ง ์ฌ์ฉ๋๋ค.
- RSC Payload๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ฒ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์กฐ์ ํ๊ณ , DOM์ ์ ๋ฐ์ดํธํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- JavaScript ๋ช ๋ น๋ค์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ hydrate๋ฅผ ํ๊ณ , ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๊ฒ ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
RSC Payload๋ ๋ฌด์์ธ๊ฐ?
RSC Payload๋ ๋ ๋๋ ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ compactํ ๋ฐ์ด๋๋ฆฌ ํํ์ด๋ค.
์ด๊ฒ์ ๋ธ๋ผ์ฐ์ ์ DOM์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด์ ํด๋ผ์ด์ธํธ์ธก์ ๋ฆฌ์กํธ์์ ์ฌ์ฉ๋๋ค.
RSC Payload๋ ๋ค์์ ํฌํจํ๋ค
- ์๋ฒ ์ปดํฌ๋ํธ๋ค์ด ๋ ๋๋ ๊ฒฐ๊ณผ
- ์ด๋์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ค์ด ๋ ๋๋ ์ง์ ๋ํ Placeholder์ ๊ทธ๋ค์ JavaScript ํ์ผ์ ๋ํ ์ฐธ์กฐ
- ์๋ฒ ์ปดํฌ๋ํธ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋ ๋ชจ๋ props
Server Rendering Strategies
์๋ฒ ๋ ๋๋ง ๋ฐฉ์
์๋ฒ์ธก ๋ ๋๋ง ๋ฐฉ์์๋ 3๊ฐ์ง๊ฐ ์๋ค: Static, Dynamic, Streaming
Static Rendering (Default)
์ ์ ๋ ๋๋ง
์ ์ ๋ ๋๋ง์ ์ฌ์ฉํ๋ฉด, ๋น๋ ํ์(build time)์ ๋ ๋๋ง๋๊ฑฐ๋, ๋ฐ์ดํฐ ์ฌ์ ํจํ(Data Revalidation) ํ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ ๋๋ง๋๋ค.
๊ทธ ๊ฒฐ๊ณผ๋ ์บ์๋์ด Content Delivery Network(CDN)์ ํธ์๋ ์ ์๋ค.
์ด๋ฌํ ์ต์ ํ๋ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์ ์๋ฒ ์์ฒญ ์ฌ์ด์์ ๊ณต์ ํ ์ ์๊ฒ ํด์ค๋ค.
๊ฐ์ ์์ฒญ์ด ๋ค์ด์์ ๋, ์บ์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํด์ ์๋ตํ ์ ์๋ค๋ ์๋ฏธ
์ ์ ๋ ๋๋ง์ ์ ์ ์ธ ๋ธ๋ก๊ทธ ํฌ์คํธ ๋๋ ์ ํ ํ์ด์ง์ ๊ฐ์ด ๊ฒฝ๋ก๊ฐ ์ฌ์ฉ์๋ณ๋ก ๊ฐ์ธํ๋์ง ์์๊ณ ๋น๋ ํ์์ ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค.
Dynamic Rendering
๋์ ๋ ๋๋ง
๋์ ๋ ๋๋ง์ ์ฌ์ฉํ๋ฉด, ๊ฒฝ๋ก๋ ์์ฒญ ํ์(request time)์ ๋ ๋๋ง๋๋ค.
๋์ ๋ ๋๋ง์ ์ฟ ํค ๋๋ URL์ search params์ ๊ฐ์ด ๊ฒฝ๋ก๊ฐ ์ฌ์ฉ์๋ณ๋ก ๊ฐ์ธํ๋์ด ์๊ฑฐ๋, ์์ฒญ ํ์์๋ง ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
(URL search params๋ https://www.google.com?q=hello
์์ q=hello์ ๊ฐ์ params๋ฅผ ์๋ฏธ)
Switching to Dynamic Rendering
๋ ๋๋ง๋๋ ๋์ ๋์ ์ธ ํจ์ ๋๋ ์บ์๋์ง ์์ ๋ฐ์ดํฐ ์์ฒญ์ด ๋ฐ๊ฒฌ๋๋ฉด, NextJS๋ ์ ์ฒด ๊ฒฝ๋ก์ ๋ํด ๋์ ์ผ๋ก ๋ ๋๋งํ๋๋ก ์ ํํ๋ค.
์๋์ ํ
์ด๋ธ์ ์ด๋ป๊ฒ ๋์ ์ธ ํจ์๋ ๋ฐ์ดํฐ์ ์บ์ฑ์ด ๊ฒฝ๋ก๊ฐ ์ ์ ๋๋ ๋์ ์ผ๋ก ๋ ๋๋๋ ๊ฒ์ ์ํฅ์ ๋ฏธ์น๋์ง๋ฅผ ๋ํ๋ธ๋ค.
๋์ ํจ์ (Dynamic Functions) | ๋ฐ์ดํฐ (Data) | ๊ฒฝ๋ก (Route) |
์์ | ์บ์๋์์ | ์ ์ ์ผ๋ก ๋ ๋ |
์์ | ์บ์๋์์ | ๋์ ์ผ๋ก ๋ ๋ |
์์ | ์บ์๋์ง ์์์ | ๋์ ์ผ๋ก ๋ ๋ |
์์ | ์บ์๋์ง ์์์ | ๋์ ์ผ๋ก ๋ ๋ |
ํ
์ด๋ธ์ ๋ณด๋ฉด, ๊ฒฝ๋ก๊ฐ ์์ ํ ์ ์ ์ผ๋ก ๋ ๋๋๊ธฐ ์ํด์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์บ์ฑ๋์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ๋น์ ์ ์บ์๋๊ฑฐ๋ ์บ์๋์ง ์์ ๋ฐ์ดํฐ ์์ฒญ์ ๋ชจ๋ ๊ฐ๋ ๋์ ์ผ๋ก ๋ ๋๋๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ์ ์๋ค.
๊ฐ๋ฐ์๋ก์ ๋น์ ์ static๊ณผ dynamic ์ค์ ๊ณ ๋ฅผ ํ์๊ฐ ์๋ค.
NextJS๊ฐ ์์์ ํน์ง๊ณผ ์ฌ์ฉ๋๋ API๋ฅผ ๋ณด๊ณ , ๊ฐ ๊ฒฝ๋ก์ ๋ํ ์ต์ ์ ๋ ๋๋ง ์ ๋ต์ ์ ํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋์ , ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๊ณ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ํจํํ ๊ฒ์ธ์ง ์ ํํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์ ์ UI์์ ์คํธ๋ฆผํ ๋ถ๋ถ์ ๊ณจ๋ผ์ผ ํ ๊ฒ์ด๋ค.
Dynamic Functions
๋์ ์ธ ํจ์๋ ์ฟ ํค, ํ์ฌ ์์ฒญ ํค๋, ๋๋ URL's search params์ ๊ฐ์ด ์์ฒญ ํ์(request time)์๋ง ์ ์ ์๋ ์ ๋ณด์ ์์กดํ๋ค.
NextJS์์ ์ด๋ฌํ ๋์ ํจ์๋ค์ด ์๋ค.
cookies()
andheaders()
: ์๋ฒ ์ปดํฌ๋ํธ์์ ์ด๊ฒ ํจ์๋ค์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ๊ฒฝ๋ก๊ฐ ์์ฒญ ํ์์ ๋์ ๋ ๋๋ง์ ํ๋ ๊ฒ์ผ๋ก ์ ํํ๋ค.searchParams
: Pages prop์ ์ฌ์ฉํ๋ฉด ํ์ด์ง ์ ์ฒด๋ฅผ ์์ฒญ ํ์์ ๋์ ๋ ๋๋งํ๋ ๊ฒ์ผ๋ก ์ ํํ๋ค.
์ด๋ฌํ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์์ฒญ ํ์์ ๋์ ์ผ๋ก ๋ ๋๋งํ๋ ๊ฒ์ผ๋ก ์ ํํ ๊ฒ์ด๋ค.
Streaming
์คํธ๋ฆฌ๋ฐ
์คํธ๋ฆฌ๋ฐ์ ๋น์ ์ด UI๋ฅผ ์๋ฒ๋ก๋ถํฐ ์ ์ง์ ์ผ๋ก ๋ ๋ํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
์์
์ Chunk ๋จ์๋ก ๋ถํ ๋์ด ์ํ๋๊ณ , ์ค๋น๋๋๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ stream๋๋ค.
์ด๊ฒ์ ์ฌ์ฉ์๊ฐ ์ ์ฒด ๋ด์ฉ์ด ๋ ๋๋ง์ด ๋๋๊ธฐ ์ ์, ์ค๋น๊ฐ ๋๋๋๋ก ๋ถ๋ถ์ ์ผ๋ก ๋ณด์ฌ์ง ์ ์๊ฒ ํด์ค๋ค.
์คํธ๋ฆฌ๋ฐ์ NextJS์ App Router ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด ์๋ค.
์ด๊ฒ์ ์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ ์ฑ๋ฅ ๋ฟ๋ง ์๋๋ผ, ๋๋ฆฐ ๋ฐ์ดํฐ fetch์ ์์กดํ๋ UI๋ก ์ธํด ์ ์ฒด ๊ฒฝ๋ก์ ๋ ๋๋ง์ ๋ฐฉํดํ๋ ๊ฒ์ ๊ฐ์ ํ๋ค.
์ ํ ํ์ด์ง์ ๋ฆฌ๋ทฐ๋ค์ด ๊ทธ ์์ด๋ค.
๋น์ ์ loading.js
์ React Suspense๋ฅผ ์ด์ฉํ UI ์ปดํฌ๋ํธ
๋ฅผ ํตํด์ route segments๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒ์ ์์ํ ์ ์๋ค.
๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํด์ Loading UI and Streaming ๋ถ๋ถ์ ์ฐธ๊ณ ํด๋ผ.
์ฌ๊ธฐ๊น์ง๊ฐ ๊ณต์ ๋ฌธ์์ ๋์์๋ ์๋ฒ ์ปดํฌ๋ํธ์ ๋ํ ๋ด์ฉ์ด๋ค.
์ดํ์ Streaming์ ๋ํด์ ๊ฐ์ธ์ ์ผ๋ก ์กฐ๊ธ ๋ ์์๋ณด์๋ค
๊ธฐ์กด์ SSR์ ์ด๋ ๊ฒ ์ด๋ฃจ์ด์ง๋ค
- ์๋ฒ(DB)๋ก๋ถํฐ Data๋ฅผ fetchํ๋ค
- ์๋ฒ(NextJS)์์ HTML์ ๋ ๋๋งํ๋ค
- ํด๋ผ์ด์ธํธ์์ HTML์ ๋ฐ๋๋ค
- JavaScript๋ฅผ ๋ฐ์์์ hydrateํ๋ค
๊ทธ๋ ๋ค๋ฉด ์ด ๊ณผ์ ์ด ๋ชจ๋ ๋๋๊ธฐ ์ ์ ์ ์ ๋ ํ์ด์ง์ ์ํธ์์ฉ์ ํ ์๊ฐ ์๋ค.
์ด๊ฒ์ ๊ฐ์ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด Streaming์ด๋ค.
HTML์ ์๊ฒ ๋๋์ด(Chunk) ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๊ธฐ ์ ์ค๋น๋ ์ปดํฌ๋ํธ๋ ๋ฏธ๋ฆฌ streamํด์ ์ํธ์์ฉ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ Streaming์ด๋ผ๊ณ ํ๋ค.
=> ์ฐ์ ์์๊ฐ ๋์ ์ปดํฌ๋ํธ๋ฅผ ๋จผ์ ์๋ ํ๊ฒ ํ ์ ์๋ค
Reference
https://nextjs.org/docs/app/building-your-application/rendering/server-components
'๊ฐ๋ฐ > NextJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
RSC vs SSR (0) | 2024.05.04 |
---|---|
[๊ณต์๋ฌธ์ ๋ฒ์ญ] Composition Pattern (2) | 2024.03.22 |
[๊ณต์๋ฌธ์ ๋ฒ์ญ] NextJS ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ (0) | 2024.03.21 |