ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ Next.js ํ์ต์ ๋ฆฌ์ฉ์ ๋๋ค.
3.4) ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ์ดํดํ๊ธฐ
3.5) ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ์ฃผ์์ฌํญ
3.4 ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ์ดํดํ๊ธฐ
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋?
- ๋ฆฌ์กํธ 18 ๋ฒ์ ๋ถํฐ ์๋กญ๊ฒ ์ถ๊ฐ๋ ์๋ก์ด ์ ํ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ
- ์๋ฒ ์ธก์์๋ง ์คํ๋๋ ์ปดํฌ๋ํธ์ด๋ค.
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ๋ํ๋๊ฒ๋ ๋ฐฐ๊ฒฝ
Page router์์์ ์ฌ์ ๋ ๋๋ง์ ๋ค์ ๋ ์ฌ๋ ค๋ณด๋ฉด ํ์ด๋๋ ์ด์ (ํ๋ฉด์ ์ํธ์์ฉ์ ์ถ๊ฐ)์ ์ํด ์๋ฒ๋ ๋ชจ๋ JS ํ์ผ๋ค์ ๋ฌถ๋ ๋ฒ๋ค๋ง์ ์งํํ๊ณ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ฒ๋คํ์ผ์ด ์ ๋ฌํ๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ํธ์์ฉ์ด ํ์ํ์ง ์์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๋ํ ๋ฒ๋ค์ ํฌํจ๋ ํ์๋ ์๋ค. ์๋ํ๋ฉด ํ์์ผ๋ก JS ๋ฒ๋ค ๊ณผ์ ์ ์งํํ๊ธฐ ์ ์ ์๋ฒ๋ ์ฌ์ ๋ ๋๋ง์ ํตํด ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
JS ๋ฒ๋ค์ ํฌํจ๋์ด์ผ ํ ์ปดํฌ๋ํธ
- useState๋ useEffect ๋ฑ์ ๋ฆฌ์กํธ ํ ์ค๊ฐ ์๋ ์ปดํฌ๋ํธ
- ์ด๋ฒคํธ ํ๋ค๋ฌ๊ฐ ๋ถ์ด ์์ด์ ๊ผญ ํ์ด๋๋ ์ด์ ์ ์งํํด์ผ ํ๋ ์ปดํฌ๋ํธ
Page router์์๋ ์ด๋ฌํ ์ํธ์์ฉ์ ํ์ง ์๋ ์ปดํฌ๋ํธ๋ค์ ์ ๊ฒฝ์ฐ์ง ์๊ธฐ๋๋ฌธ์ ๋ชจ๋ JS ํ์ผ๋ค์ ๋ฒ๋ค๋งํ์ฌ ๋ฒ๋ค์ ์ฉ๋์ด ์ธ๋ฐ์์ด ์ปค์ง๊ฒ ๋๊ณ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ถ๋ฌ์ค๋ ์๊ฐ๋ ์ค๋๊ฑธ๋ฆฐ๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ์ํธ์์ฉ์ด ํ์ํ ์ปดํฌ๋ํธ(ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ)๋ค๋ง JS ๋ฒ๋ค์ ํฌํจ์ํจ๋ค๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์์ฑ ์ค์ต
์๋ฒ ์ปดํฌ๋ํธ๋ ๋ฐ๋ก ๋ง๋ค์ด ์ค ํ์๊ฐ ์๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์ปดํฌ๋ํธ ์๋จ์ 'use client'; directive ์ง์์๋ฅผ ์ถ๊ฐํด์ค๋ค.
'use client';
์๋ฒ ์ปดํฌ๋ํธ์์ log๋ฅผ ์ฐ๋๋ผ๋ ๋ธ๋ผ์ฐ์ ์์ log๊ฐ ์ถ๋ ฅ๋์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. (๋์ ํฐ๋ฏธ๋ ์ฝ์์๋ ์ถ๋ ฅ๋๋ค.)
ํด๋ผ์ด์ธํธ, ์๋ฒ ์ปดํฌ๋ํธ๋ ์ด๋ค ์ปดํฌ๋ํธ๋ค์ด ๋์ด์ผ ํ๋?
์ํธ์์ฉ์ด ์๋ค -> ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ
์ํธ์์ฉ์ด ์๋ค -> ์๋ฒ ์ปดํฌ๋ํธ
co-location
page router์์๋ search.tsx ์ด๋ฐ ํ์ผ ์ญ์ path๋ก ์ฌ๊ฒผ๋๋ฐ,
app router์์๋ page.tsx, layout.tsx์ ์ ์ธํ ๋ชจ๋ ํ์ผ์ ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ ํ์ ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์ page.tsx์ ๋์ผํ ์์น์ search.tsx์ ๊ฐ์ ํ์ผ์ ์์ฑํด๋ path๋ก ์ฌ๊ธฐ์ง ์๋๋ค.
์ด๋ฌํ ํน์ง์ co-location์ด๋ผ๊ณ ํ๋ค.
3.5 ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ์ฃผ์์ฌํญ
1. ์๋ฒ ์ปดํฌ๋ํธ์๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ ์ฝ๋๊ฐ ํฌํจ๋๋ฉด ์๋๋ค.
- ์๋ฒ ์ปดํฌ๋ํธ๋ ๋ธ๋ผ์ฐ์ ์์ ์์ ์คํ์กฐ์ฐจ ๋์ง ์๋๋ค.
- useState, useEffect ๋ฑ์ ๋ฆฌ์กํธ hooks๋ onClick, onChange ๋ฑ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ญ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
- ๋ธ๋ผ์ฐ์ ์ธก์์ ์คํ๋๋ ๊ธฐ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ํ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
2. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ์์๋ง ์คํ๋์ง ์๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ
- ์๋ฒ์ธก์์๋ง ์คํ๋๋ ์ปดํฌ๋ํธ
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ
- ์ฌ์ ๋ ๋๋ง์ ์ํด ์๋ฒ์์ 1๋ฒ ์คํ
- ํ์ด๋๋ ์ด์ ์ ์ํด ๋ธ๋ผ์ฐ์ ์์ 1๋ฒ ์คํ
-> ์๋ฒ์ ํด๋ผ์ด์ธํธ์์ ๋ชจ๋ ์คํ๋จ
3. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ import ํ ์ ์๋ค.
"use client";
import ServerComponent from "./server-component.tsx"; // ๋ถ๊ฐ๋ฅ
export default function ClientComponent() {
return <ServerComponent />
}
์ค๋ฅ ๋ฐ์ํ๋ฉฐ, ์๋์น ์์ ๋์์ด ๋ฐ์ํ ์ ์๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์๋ฒ & ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์คํ๋๋ค.
์๋ฒ ์ธก์์ ์คํํ ๋๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ import ํด์ฌ ์ ์๊ฒ ์ง๋ง,
๋ธ๋ผ์ฐ์ ์ธก์์ ์คํํ ๋๋ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ ์ ์๋ค.
ํ์ง๋ง Next.js๋ ์ ๋ฌํ ์ค์๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ ServerComponent๋ฅผ Client Component๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ๋๋ค.
๊ทธ๋ผ์๋ ServerComponent๋ฅผ Client Component์ ํฌํจ์์ผ์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด?
์ ์ฝ๋์ฒ๋ผ import ํ์ง๋ง๊ณ props๋ก ํ์ฉํด๋ผ
"use client";
export default function ClientComponent({children}: {children: ReactNode;}) {
return <div>{children}</div>;
}
4. ์๋ฒ ์ปดํฌ๋ํธ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ ์ง๋ ฌํ ๋์ง ์๋ Props๋ ์ ๋ฌ ๋ถ๊ฐํ๋ค.
์ง๋ ฌํ๋?
๊ฐ์ฒด, ๋ฐฐ์ด, ํด๋์ค ๋ฑ์ ๋ณต์กํ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ ์์ผ๋ก ์ ์กํ๊ธฐ ์ํด ์์ฃผ ๋จ์ํ ํํ(๋ฌธ์์ด, Byte)๋ก ๋ณํํ๋ ๊ฒ
// Before
const person = {
name: "์ด์ ํ",
age: 27,
};
// After
{"name":"์ด์ ํ","age":27}
์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ์ง๋ ฌํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ์ด๋ ํ ๊ฐ์ด ์๋ ์ฝ๋๋ธ๋ญ์ ํฌํจํ๊ณ ์๋ ํน์ํ ํํ์ด๊ธฐ ๋๋ฌธ์
- ํด๋ก์ ๋ ๋ ์์ปฌ ์ค์ฝํ ๋ฑ์ ๋ค์ํ ํ๊ฒฝ์ ์์กดํด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋ชจ๋ ์ ๋ณด๋ค์ ๋จ์ํ ๋ฌธ์์ด์ด๋ ๋ฐ์ดํธ์ ํํ๋ก ํํํ ์ ์๊ธฐ ๋๋ฌธ
์ฌ์ ๋ ๋๋ง ๊ณผ์
- ์๋ฒ ์ปดํฌ๋ํธ๋ค์ด ๋จผ์ ์คํ์ด ๋๊ณ ๋์ค์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ค์ด ๋ค์ด์ด ์คํ๋๋ค.
- ์๋ฒ ์ปดํฌ๋ํธ๋ค๋ง ๋ฐ๋ก ํ ๋ฒ ์คํ์์ผ์ฃผ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก HTML ํ๊ทธ๊ฐ ๋ฐ๋ก ์คํ์ด ๋๋ ๊ฒ ์๋๋ผ RSC ํ์ด๋ก๋(React Server Component Payload : RSC ๊ฒฐ๊ณผ๋ฌผ)๋ผ๋ JSON ๋น์ทํ ํํ์ ๋ฌธ์์ด์ด ์์ฑ๋๋ค.
RSC payload : RSC๋ฅผ ์ง๋ ฌํํ ๊ฒฐ๊ณผ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
RSC payload ์ ํฌํจ๋๋ ๊ฐ
- ์๋ฒ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๊ฒฐ๊ณผ
- ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์์น
- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ๋ Props ๊ฐ
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์คํ
์ดํ์ ์์ง ์คํํ์ง ๋ชปํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ค๋ ๋ง์ ์คํ๋์ด RSC ํ์ด๋ก๋์ ํฉ์ณ์ ธ HTML ํ์ด์ง๊ฐ ์์ฑ๋๊ฒ ๋๋ค.
์ง๋ ฌํํ ์ ์๋ JS ํจ์๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ๋ Props๋ก ์ ๋ฌ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐํ์์๋ฌ๊ฐ ๋๋ค.
๋ฐ๋ผ์ ์๋ฒ ์ปดํฌ๋ํธ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ props๋ก ํจ์์ฒ๋ผ ์ง๋ ฌํ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฐ์ ๋ณด๋ด์ฃผ๊ฒ ๋๋ฉด ์๋๋ค.
'FE > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js] app router - ๋ฐ์ดํฐ ํ์นญ (0) | 2025.05.18 |
---|---|
[Next.js] App Router - ๋ค๋น๊ฒ์ดํ (0) | 2025.05.08 |
[Next.js] App Router - ๋ ์ด์์ (0) | 2025.05.06 |
[Next.js] App Router - ํ์ด์ง ๋ผ์ฐํ (0) | 2025.05.06 |
[Next.js] Page Router ์ฅ๋จ์ (0) | 2025.05.06 |