framework/NextJS

๐Ÿš€ Next.js App Router ์„ค์น˜ ๋ฐ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ

octo54 2025. 4. 11. 10:43
๋ฐ˜์‘ํ˜•

๐Ÿš€ Next.js App Router ์„ค์น˜ ๋ฐ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ

Next.js๋Š” React ๊ธฐ๋ฐ˜์˜ ํ’€์Šคํƒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์ตœ์‹  ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐ€์ด๋“œ์—์„œ๋Š” Next.js์˜ App Router๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


โœ… ์‹œ์Šคํ…œ ์š”๊ตฌ ์‚ฌํ•ญ

  • Node.js:๋ฒ„์ „ 18.18 ์ด
  • ์šด์˜ ์ฒด์ œ:macOS, Windows(WSL ํฌํ•จ), ๋˜๋Š” Linu

โš™๏ธ ์ž๋™ ์„ค์น˜: create-next-app ์‚ฌ์šฉํ•˜๊ธฐ

Next.js์—์„œ๋Š” create-next-app CLI๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

npx create-next-app@latest

์‹คํ–‰ ํ›„, ์•„๋ž˜์™€ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค:

  • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ž…๋ ฅ
  • TypeScript ์‚ฌ์šฉ ์—ฌ๋ถ€
  • ESLint ์‚ฌ์šฉ ์—ฌ๋ถ€
  • Tailwind CSS ์‚ฌ์šฉ ์—ฌ๋ถ€
  • src/ ๋””๋ ‰ํ† ๋ฆฌ ์‚ฌ์šฉ ์—ฌ๋ถ€
  • App Router ์‚ฌ์šฉ ์—ฌ๋ถ€ (๊ถŒ์žฅ)
  • Turbopack ์‚ฌ์šฉ ์—ฌ๋ถ€
  • import alias ์„ค์ • ์—ฌ๋ถ€

์„ ํƒ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ•„์š”ํ•œ ์˜์กด์„ฑ์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ์ˆ˜๋™ ์„ค์น˜: ์ง์ ‘ ์„ค์ •ํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

1. ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜

npm install next@latest react@latest react-dom@latest

2. package.json ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  }
}

3. ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํŒŒ์ผ ๊ตฌ์กฐ ์„ค์ •

app/layout.tsx

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ko">
      <body>{children}</body>
    </html>
  );
}

app/page.tsx

export default function Page() {
  return <h1>Hello, Next.js!</h1>;
}

๐Ÿ–ผ๏ธ ์ •์  ์ž์‚ฐ ๊ด€๋ฆฌ: public ํด๋” ์‚ฌ์šฉ (์„ ํƒ ์‚ฌํ•ญ)

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— public ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ์˜ ์ •์  ์ž์‚ฐ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, public/profile.png ํŒŒ์ผ์€ ์ฝ”๋“œ์—์„œ /profile.png๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import Image from 'next/image';

export default function Page() {
  return <Image src="/profile.png" alt="Profile" width={100} height={100} />;
}

๐Ÿš€ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

  1. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘:
npm run dev
  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000 ์ ‘์†ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™•์ธ
  2. app/page.tsx ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ™•์ธ

๐Ÿงฉ TypeScript ์„ค์ •

Next.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ TypeScript๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. .ts ๋˜๋Š” .tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  next dev๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ•„์š”ํ•œ ์˜์กด์„ฑ์ด ์ž๋™์œผ๋กœ ์„ค์น˜๋˜๊ณ  tsconfig.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.


๐Ÿงน ESLint ์„ค์ •

ESLint๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. create-next-app์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋ฉฐ, ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ๋”ฐ๋ฅด์„ธ์š”:

  1. package.json์— ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€:
{
  "scripts": {
    "lint": "next lint"
  }
}
  1. ESLint ์‹คํ–‰:
npm run lint

ํ”„๋กฌํ”„ํŠธ์— ๋”ฐ๋ผ ์„ค์ •์„ ์™„๋ฃŒํ•˜๋ฉด .eslintrc.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์„ ํƒํ•œ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ eslint ๋ฐ eslint-config-next ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“ฆ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ฐ ๋ชจ๋“ˆ ๊ฒฝ๋กœ ๋ณ„์นญ ์„ค์ •

tsconfig.json ๋˜๋Š” jsconfig.json ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•˜์—ฌ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ฐ ๋ชจ๋“ˆ ๊ฒฝ๋กœ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

{
  "compilerOptions": {
    "baseUrl": "src/",
    "paths": {
      "@/components/*": ["components/*"],
      "@/styles/*": ["styles/*"]
    }
  }
}

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ชจ๋“ˆ์„ importํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

import { Button } from '@/components/button';

๐Ÿงช ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ

์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

npm run dev

๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000 ์ ‘์†ํ•˜์—ฌ "Hello, Next.js!" ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์„ธ์š”.


 

Next.js, App Router, React, ์›น ๊ฐœ๋ฐœ, ํ’€์Šคํƒ, TypeScript, ESLint, Tailwind CSS, ํ”„๋กœ์ ํŠธ ์„ค์ •, ์ •์  ์ž์‚ฐ ๊ด€๋ฆฌ