π Next.js App Router: λ μ΄μμκ³Ό νμ΄μ§ ꡬ쑰 μλ²½ κ°μ΄λ
π Next.js App Router: λ μ΄μμκ³Ό νμ΄μ§ ꡬ쑰 μλ²½ κ°μ΄λ
Next.jsμ App Routerλ React κΈ°λ° μΉ μ ν리μΌμ΄μ μμ νμ΄μ§ ꡬ쑰μ UI λ μ΄μμμ νμΌ μμ€ν κΈ°λ°μΌλ‘ ꡬμ±ν μ μκ² ν΄μ€λλ€. app/ λλ ν 리 λ΄λΆμ ν΄λμ νμΌ μ΄λ¦μ΄ κ³§ λΌμ°ν κ²½λ‘κ° λλ©°, μ€μ²© λΌμ°ν κ³Ό λ μ΄μμ 곡μ κ° λ§€μ° μμ°μ€λ½κ³ μ§κ΄μ μΌλ‘ ꡬνλ©λλ€.
π νμ΄μ§(Page)λ?
page.tsx λλ page.js νμΌμ νΉμ κ²½λ‘μ νμλ μ½ν μΈ λ₯Ό λ΄λΉν©λλ€.
μμ 1 – λ£¨νΈ κ²½λ‘
// app/page.tsx
export default function Home() {
return <h1>ν νμ΄μ§</h1>;
}
→ / κ²½λ‘μ λμλ©λλ€.
μμ 2 – μλΈ κ²½λ‘
// app/dashboard/page.tsx
export default function Dashboard() {
return <h1>λμ보λ</h1>;
}
→ /dashboard κ²½λ‘μ λμλ©λλ€.
π§± λ μ΄μμ(Layout)μ΄λ?
layout.tsxλ ν΄λΉ κ²½λ‘ λ° λͺ¨λ νμ κ²½λ‘μ νμ΄μ§λ₯Ό κ°μΈλ κ³΅ν΅ UIμ
λλ€.
children propμ ν΅ν΄ νμ νμ΄μ§λ₯Ό λ λλ§ν©λλ€.
μμ – μ 체 μ¬μ΄νΈμ κ³΅ν΅ μ μ©
// app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="ko">
<body>
<header>κ³΅ν΅ ν€λ</header>
{children}
</body>
</html>
);
}
→ /, /dashboard, /about λ± λͺ¨λ κ²½λ‘μ μ μ©λ©λλ€.
μμ – νΉμ κ²½λ‘ μ μ© λ μ΄μμ
// app/dashboard/layout.tsx
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
return (
<div className="dashboard">
<aside>μ¬μ΄λλ°</aside>
<main>{children}</main>
</div>
);
}
→ /dashboard μ΄νμ νμ΄μ§λ€μλ§ μ μ©λ©λλ€.
π§ μ€μ²© λΌμ°ν (Nested Routing)
App Routerμμλ ν΄λ ꡬ쑰 = URL κ²½λ‘μ λλ€.
app/
βββ layout.tsx → μ 체 μ± κ³΅ν΅ λ μ΄μμ
βββ page.tsx → /
βββ dashboard/
βββ layout.tsx → /dashboard μ μ© λ μ΄μμ
βββ page.tsx → /dashboard
βββ settings/
βββ page.tsx → /dashboard/settings
- /: λ£¨νΈ νμ΄μ§ (app/page.tsx)
- /dashboard: λμ보λ λ©μΈ νμ΄μ§
- /dashboard/settings: μ€μ νμ΄μ§
→ μμ λ μ΄μμμ΄ νμ λ μ΄μμμ κ°μΈλ κ³μΈ΅μ UI κ΅¬μ‘°κ° μμ±λ©λλ€.
π λ μ΄μμ vs νμ΄μ§: μ°¨μ΄μ μ 리
νλͺ© λ μ΄μμ νμ΄μ§
νμΌλͺ | layout.tsx | page.tsx |
μν | κ³΅ν΅ UI (ν€λ, λ€λΉκ²μ΄μ λ±) | κ°λ³ κ²½λ‘μ μ½ν μΈ |
μ€μ²© μ¬λΆ | κ°λ₯ (μμ → νμλ‘ κ³μΈ΅μ μ μ©) | κ²½λ‘λ³ 1:1 λμ |
μν μ μ§ | μ μ§λ¨ (νμ΄μ§ μ΄λ μ 리λ λλ§λμ§ μμ) | νμ΄μ§ μ΄λ μ λ³κ²½ |
π λ μ΄μμ μν μ μ§μ μ₯μ
- μ±λ₯ μ΅μ ν: λ μ΄μμμ νμ΄μ§ κ° μ ν μ 리λ λλ§λμ§ μμ
- UX κ°μ : μ¬μ΄λλ°, ν UI λ± μν μ μ§κ° νμν μ»΄ν¬λνΈ κ΅¬μ±μ μ ν©
- ꡬ쑰μ λͺ νμ±: μ€μ²© λ μ΄μμ → μ€μ²© UI μ€κ³κ° μ¬μ
β μμ½
- app/ λ΄λΆμ ν΄λλ₯Ό λ§λ€κ³ page.tsxλ₯Ό μΆκ°νλ©΄ ν΄λΉ κ²½λ‘κ° μλ μμ±λ©λλ€.
- layout.tsxλ₯Ό νμ©νλ©΄ κ³΅ν΅ UIλ₯Ό μ€μ ν μ μκ³ , μ€μ²© ꡬμ±μ΄ κ°λ₯ν©λλ€.
- νμ΄μ§μ λ μ΄μμμ React μ»΄ν¬λνΈμ΄λ©°, childrenμ ν΅ν΄ μνμ κ΄κ³λ₯Ό ꡬμ±ν©λλ€.
- λ μ΄μμμ μνλ₯Ό μ μ§νμ¬ UI/UXμ ν° μ΄μ μ μ 곡ν©λλ€.
Next.js, App Router, λ μ΄μμ ꡬμ±, νμ΄μ§ ꡬ쑰, μ€μ²© λΌμ°ν , ν΄λ κΈ°λ° λΌμ°ν , React, νλ‘ νΈμλ ꡬ쑰, SSR, SEO μ΅μ ν 10κ°