Next.js 13 ์ดํ์ ๋์
๋ App Router๋ ์ฌ์ค์ ์๋ก์ด ํ์ด์ง ๋ผ์ฐํ
ํจ๋ฌ๋ค์์ด๋ค.
๊ธฐ์กด์ ์ต์ํ๋ Pages Router ๋ฐฉ์๊ณผ๋ ๋ง์ด ๋ฌ๋ผ์, ์ฒ์ ๋ณด๋ฉด ๋นํฉ์ค๋ฝ์ง๋ง,
์ฐ๋ค ๋ณด๋ฉด ์ง์ง ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ๋ค๋ ๊ฑธ ๋๋ ์ ์์๋ค.
ํญ๋ชฉ | Pages Router | App Router |
---|---|---|
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ | pages/ ํด๋ ๊ธฐ๋ฐ | app/ ํด๋ ๊ธฐ๋ฐ |
์๋ฒ ์ปดํฌ๋ํธ | โ ๋ถ๊ฐ๋ฅ | โ ๊ธฐ๋ณธ ์ง์ (Server Components) |
๋ ์ด์์ | ํ์ด์ง๋ง๋ค ๋ฐ๋ก ๊ตฌ์ฑ | โ
์ค์ฒฉ ๋ ์ด์์ ์๋ ์ ์ฉ (layout.tsx ) |
๋ฐ์ดํฐ ํจ์นญ | getServerSideProps ๋ฑ ์ฌ์ฉ | โ
fetch , cache , use ๋ฑ ์์ ๋ก์ด ๋ฐฉ์ |
๋ผ์ฐํ ๋ฐฉ์ | ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ | ์ฌ์ ํ ํ์ผ ๊ธฐ๋ฐ์ด์ง๋ง Link , useRouter ๋ฑ์ด ๊ฐ์ ๋จ |
app/
โโโ layout.tsx // ๊ณตํต ๋ ์ด์์
โโโ page.tsx // ๋ฃจํธ ํ์ด์ง
โโโ about/
โ โโโ page.tsx // /about ๊ฒฝ๋ก
โโโ dashboard/
โ โโโ layout.tsx // /dashboard ๊ณตํต ๋ ์ด์์
โ โโโ page.tsx
App Router์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ๊ฐ ์๋ฒ์์ ์คํ๋๋ค.
์ฆ, ํด๋ผ์ด์ธํธ์ ๋ถํ์ํ JS๋ฅผ ์ค์ผ ์ ์๋ค.
ํ์ํ ๋๋ง use client
์ง์์ด๋ฅผ ํตํด Client Components๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
// ์๋ฒ ์ปดํฌ๋ํธ (๊ธฐ๋ณธ)
export default function Page() {
const data = await fetch(...);
return <div>{data}</div>;
}
// ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ
'use client'
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
layout.tsx
๋ ์ง์ง ๊ฐ๋ ฅํ๋ค. ํ์ด์ง ์ ํํด๋ layout์ด ์ ์ง๋ผ์ ์ ์ ๊ฒฝํ์ด ํจ์ฌ ๋ถ๋๋ฌ์.metadata
, loading.tsx
, error.tsx
, not-found.tsx
๋ฑ ๋ผ์ฐํธ๋ณ ์ ์ฉ ํ์ผ์ ํ์ฉํ๋ฉด ํ์ด์ง ์ํ ๊ด๋ฆฌ๊ฐ ์ฌ์์งApp Router๋ ํ์ต ๊ณก์ ์ด ๋ถ๋ช
์์ง๋ง,
์ ์ฒด ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ํ, ์ต์ ํ, UX ๊ด์ ์์ ๊น๋ํ๊ฒ ์ ๋ฆฌํด์ฃผ๋ ๋๊ตฌ๋ผ๋ ๋๋์ด ๋ค์๋ค.
ํนํ SSR/CSR ํผํฉ์ด๋ ์ค์ฒฉ ๋ ์ด์์์ด ๋๋ฌด ํธํด์, ์์ผ๋ก ํ๋ก์ ํธ์ ๊ธฐ๋ณธ์ผ๋ก ์ฐ๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
๐ โApp Router๋ ๋จ์ํ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ์๋๋ผ, ์น์ฑ ์ค๊ณ ๋ฐฉ์ ์์ฒด๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ํ๋ฆ์ด๋ค.โ