๐ก Next.js(App Router) ํ๊ฒฝ์์ ๊ฐ๋ฐํ ๋ ๊ฐ์ฅ ๋จผ์ ๋ง์ฃผ์น๋ ๊ฐ๋ ์ด ๋ฐ๋ก ์๋ฒ ์ปดํฌ๋ํธ(Server Components)์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ(Client Components)์ ๋๋ค. ์ด ๋ ๊ฐ์ง์ ํน์ง๊ณผ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ ํต์ฌ๋ง ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
๐ ์ปดํฌ๋ํธ ๋น๊ต
Next.js๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ฒ ์ปดํฌ๋ํธ(Server Component)๋ก ์ธ์
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ์ผ ์ต์๋จ์ "use client"๋ผ๋ ์ง์์ด๋ฅผ ๋ช
์ํด์ผ ํฉ๋๋ค.
| ๊ตฌ๋ถ | Server Component | Client Component |
| ๊ธฐ๋ณธ ์ธ์ | Next.js์ ๊ธฐ๋ณธ๊ฐ | ํ์ผ ์ต์๋จ์ "use client" ๋ช ์ ํ์ |
| ์ฃผ์ ์ญํ | ๋ณด์์ด ์ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, API ํธ์ถ, DB ์ง์ ์ ๊ทผ | ์ฌ์ฉ์ ์ธํฐ๋์ (ํด๋ฆญ, ์ ๋ ฅ), UI ์ํ ๊ด๋ฆฌ |
| React Hook | useState, useEffect ๋ฑ ์ฌ์ฉ ๋ถ๊ฐ | ๋ชจ๋ React Hook ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ |
๐ก ์ค์ ํฌ์ธํธ
์๋ฒ ์ปดํฌ๋ํธ ๋ด์ ์๋ฒ ์ ์ฉ ๋ก์ง(์: DB ์ง์ ์กฐํ ๋ฑ)์ด ์๊ณ , ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ฒ๋ผ ๋์ํ ์ ์๋ ๊ตฌ์กฐ๋ผ๋ฉด Next.js๊ฐ ๋น๋ ์์ ์ ์ด๋ฅผ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ฒ๋ผ ๋ค๋ฃฐ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐํ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ๋ช ํํ๊ฒ ์ญํ ์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ฅ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ '์ค์ฒฉ ๊ท์น' (์ํธ์์ฉ)
- ์๋ฒ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์์์ผ๋ก ๊ฐ์ง ์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ง์ importํด์ ๊ฐ์ง ์ ์์ต๋๋ค.
๐ก ์ค์ ํ์ฉ ๋ฐ ์ค์ฒฉ ๊ท์น
Server Component
// async ๋ Server Components ์์๋ง ์ธ ์ ์์
import Button from "./Button";
export default async function DataFetch() {
return (
<>
<h1>DataFetch</h1>
<Button /> {/* ๊ฐ๋ฅ */}
</>
);
}
Client Components
'use client';
import DataFetch from "./DataFetch";
export default function Button() {
return (
<>
{/* Server Component */}
<DataFetch />
<h1 onClick={() => alert("click")}>Button</h1>
</>
);
}
Client Component ์ Server Component ๋ฅผ ๋ฃ์ผ๋ฉด ๋ฐ๋ก ์๋ฌ๊ฐ ๋ฐ์

"๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ (Fetch) ๋ณด์์ด ํ์ํ ๋ก์ง์ ์๋ฒ ์ปดํฌ๋ํธ์๊ฒ, ์ํ(State)๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์ ์ ์ํธ์์ฉํ๋ UI๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ!"
์ฒ์์๋ ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ๊ณ๊ฐ ํท๊ฐ๋ฆด ์ ์์ง๋ง, "์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ชจ๋ก ๋๊ณ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์์์ผ๋ก ์กฐ๋ฆฝํ๋ค"๋ ๋ฐฉํฅ์ฑ๋ง ๊ธฐ์ตํ์๋ฉด ๋๋ค์์ ์๋ฌ๋ฅผ ์๋ฐฉํ ์ ์์ต๋๋ค.
Next.js App Router์ ์ฑ๋ฅ์ 100% ํ์ฉํ๊ธฐ ์ํด, ์ปดํฌ๋ํธ๋ฅผ ์ค๊ณํ ๋ ์ด ๋ ๊ฐ์ง ์ญํ ์ ๋จผ์ ๋ช ํํ ๋๋๋ ์ต๊ด์ ๋ค์ฌ๋ณด์ธ์!
'FrontEnd > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Next.js] App Router ๊ธฐ๋ณธ ํด๋ ๊ตฌ์กฐ ๋ฐ ํต์ฌ ํ์ผ ์ด์ ๋ฆฌ (0) | 2026.06.24 |
|---|---|
| [Next.js] Could not create a project called... npm naming restrictions ์๋ฌ ํด๊ฒฐ (0) | 2026.06.24 |