๐ค React 19v์์ ์์ ํ๋๋ RSC์ ๋ํด ์์๋ณด์!
๋ฒ๋ค๋ง ์ ์ ํด๋ผ์ด์ธํธ ์ฑ์ด๋ SSR ์๋ฒ์๋ ๋ถ๋ฆฌ๋ ํ๊ฒฝ์์ ๋ ๋๋ง ๋๋ ์๋ก์ด ์ ํ์ ์ปดํฌ๋ํธ
์๋ฒ ์ปดํฌ๋ํธ๋
1. ๋น๋ ์๊ฐ์ CI ์๋ฒ์์ ํ๋ฒ ์คํ๋๊ฑฐ๋
2. ๊ฐ ์์ฒญ๋ง๋ค ์น ์๋ฒ๋ฅผ ํตํด ์คํ ๊ฐ๋ฅ
* ๋ฒ๋ค๋ง = ํ๋์ ์์ JS ์ฝ๋๋ก ๋ฌถ๊ธฐ ์
* ๋ถ๋ฆฌ๋ ํ๊ฒฝ = React ์๋ฒ ์ปดํฌ๋ํธ์ ์๋ฒ
SSR์ "๋ธ๋ผ์ฐ์ ๋์ ์๋ฒ์์ HTML์ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ์ "์ด๊ณ ,
Server Component๋ "React ์ปดํฌ๋ํธ๋ฅผ ์๋ฒ์์ ์คํํ ์ ์๊ฒ ํ React์ ์๋ก์ด ์ํคํ ์ฒ"
| ๊ตฌ๋ถ | React Server Components | Server-Side Rendering |
|---|---|---|
| ๋ฌด์์ธ๊ฐ | React์ ์ปดํฌ๋ํธ๋ฅผ ์๋ฒ์์ ์คํํ๋ ์๋ก์ด ๊ฐ๋ | ํด๋ผ์ด์ธํธ์ฉ React ์ฑ์ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ ๋๋งํ๋ ๊ธฐ์ |
| ์ถ๋ ฅ๋ฌผ | React ๋ด๋ถ ๊ตฌ์กฐ(ํธ๋ฆฌ)๋ฅผ RSC payload(JSON ์คํธ๋ฆผ)๋ก ์ง๋ ฌํ | ์์ฑ๋ HTML ๋ฌธ์์ด |
| ์คํ ์์น | ์๋ฒ (Node/Edge ๋ฑ) | ์๋ฒ (Node/Edge ๋ฑ) |
| ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ ๊ฒ | RSC ๊ฒฐ๊ณผ(JSON-like ๋ฐ์ดํฐ) + ์ผ๋ถ HTML | ์ ์ฒด HTML + hydration์ฉ JS |
| hydrate ๋๋ ๋์ | Client Component๋ง | ์ ์ฒด React ํธ๋ฆฌ |
| Next.js์์ ๊ตฌํํ ํํ | App Router | Pages Router |
| ๋ฐ์ดํฐ ํ์นญ ์์น | RSC ๋ด๋ถ (await fetch()) | getServerSideProps() ๊ฐ์ SSR ํจ์ ๋ด๋ถ |
* hydration = ์๋ฒ์์ ๋ ๋๋ง๋ ์ ์ ์ธ HTML์, ๋ธ๋ผ์ฐ์ ์์ React์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ํ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ
async ํจ์์ฌ๋ ๋๋๊ฐReact Server Component๋ ์๋ฒ ํ๊ฒฝ์์ ์คํ๋๊ธฐ ๋๋ฌธ์
๋ธ๋ผ์ฐ์ ์์ ๋ชปํ๋ ์ผ์ ํ ์ ์์:
์๋ฅผ ๋ค์ด DB ์ฟผ๋ฆฌ, ํ์ผ ์ฝ๊ธฐ, ์ธ๋ถ API ํธ์ถ, ...
export default async function Page() {
const data = await fetch("https://api.example.com/products").then(r => r.json());
return <ProductList products={data} />;
}
์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋
await์ ์จ๋ ๋ฌธ์ ์์await๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์คํธ๋ฆฌ๋ฐasync์ผ ์ ์์๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ปดํฌ๋ํธ๋ ๋ ๋๋ง์ด ๋๊ธฐ์ ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ
React์ ๋ ๋๋ฌ๋ ํด๋ผ์ด์ธํธ ์ชฝ์์ async ์ปดํฌ๋ํธ๋ฅผ ์ง์ํ์ง ์์
(๋ฐ์ดํฐ๋ useEffect๋ use ํ
๋ฑ์ ํตํด ๋ณ๋๋ก ๋ถ๋ฌ์์ผ ํจ)
Next.js App Router์์๋ ์ด ๋์ด ๊ฐ์ด ์๋
1. Next.js ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์
2. ์๋ฒ ์ปดํฌ๋ํธ(RSC) ์คํ -> ๋ฐ์ดํฐ fetch -> React ํธ๋ฆฌ ์์ฑ
3. ์๋ฒ๊ฐ ๊ทธ๊ฑธ SSR ํํ๋ก HTML๋ก "์ด๊ธฐ ์คํธ๋ฆผ" ์ ์ก
4. ๋์์ ๋ธ๋ผ์ฐ์ ๋ก RSC payload(JSON ์คํธ๋ฆผ)๋ ์ ์ก
5. ๋ธ๋ผ์ฐ์ ์์ Client Component hydrate
์ฆ,
App Router๋ RSC๋ก ๊ตฌ์ฑ๋ React ํธ๋ฆฌ๋ฅผ SSR ๋ฐฉ์์ผ๋ก ์คํธ๋ฆฌ๋ฐ
SSR์ HTML์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ์
RSC๋ React์ ์ผ๋ถ๋ฅผ ์๋ฒ์์๋ง ์คํํ๊ฒ ํด์ฃผ๋ ์๋ก์ด ์ค๊ณ