framework/NextJS

๐Ÿš€ Next.js ๊ณต์‹ ๋ฌธ์„œ ํ•ต์‹ฌ ์š”์•ฝ ๋ฐ ์‹ค์ „ ๊ฐ€์ด๋“œ

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

๐Ÿš€ Next.js ๊ณต์‹ ๋ฌธ์„œ ํ•ต์‹ฌ ์š”์•ฝ ๋ฐ ์‹ค์ „ ๊ฐ€์ด๋“œ 

์›น ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ React๋ฅผ ํ™œ์šฉํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด, Next.js๋Š” ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.
React์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ , ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ด์ฃผ๋Š” ์ตœ๊ณ ์˜ ์„ ํƒ์ง€์ฃ .

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Next.js ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ , ์‹ค๋ฌด์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
"๊ทธ๋ƒฅ ๋ฒˆ์—ญ"์ด ์•„๋‹Œ, ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ์‹ค์ „ ํ™œ์šฉ์— ๋งž๊ฒŒ ํ•ด์„ํ•œ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.


โœ… Next.js๋Š” ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ์ธ๊ฐ€์š”?

Next.js๋Š” React ๊ธฐ๋ฐ˜์˜ ํ’€์Šคํƒ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
React๋งŒ์œผ๋กœ๋Š” ์–ด๋ ค์šด ๋ถ€๋ถ„๋“ค – ๋ผ์šฐํŒ…, ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR), ์ •์  ํŽ˜์ด์ง€ ์ƒ์„ฑ(SSG), ์ด๋ฏธ์ง€ ์ตœ์ ํ™”, SEO, ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ… – ์ด ๋ชจ๋“  ๊ฑธ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.


๐Ÿงญ Next.js์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

๊ธฐ๋Šฅ ์„ค๋ช…

๋ผ์šฐํŒ… ์‹œ์Šคํ…œ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… + ๋ ˆ์ด์•„์›ƒ, ์ค‘์ฒฉ ๋ผ์šฐํŒ…, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๊นŒ์ง€
๋ Œ๋”๋ง ๋ฐฉ์‹ CSR, SSR, SSG, ISR + React Server Component์™€ Streaming๊นŒ์ง€ ์ง€์›
๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ fetch API ์ตœ์ ํ™” + ์บ์‹ฑ + ์žฌ๊ฒ€์ฆ(Revalidation)
์Šคํƒ€์ผ๋ง CSS Modules, Tailwind CSS, Emotion ๋“ฑ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ž๋™ ๋ฆฌ์‚ฌ์ด์ง•, ์›นํฌ๋งท ์ง€์› ๋“ฑ Core Web Vitals ์ตœ์ ํ™”
TypeScript ์ง€์› ๊ธฐ๋ณธ ๋‚ด์žฅ + ํ–ฅ์ƒ๋œ ํƒ€์ž… ๊ฒ€์‚ฌ ๋ฐ ์„ค์ •

โš™๏ธ App Router vs Pages Router

๋ฐ˜์‘ํ˜•

Next.js์—๋Š” 2๊ฐ€์ง€ ๋ผ์šฐํŒ… ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. App Router (์ตœ์‹  ๋ฐฉ์‹)

  • app/ ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ๋ฐ˜
  • Server Component, Streaming ์ง€์›
  • ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์— ๊ฐ•๋ ฅ ์ถ”์ฒœ

2. Pages Router (๊ธฐ์กด ๋ฐฉ์‹)

  • pages/ ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ๋ฐ˜
  • Next.js์˜ ์ „ํ†ต์ ์ธ ๊ตฌ์กฐ
  • ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ์œ ์ง€๋ณด์ˆ˜ ์‹œ ํ™œ์šฉ

Tip: ๊ณต์‹ ๋ฌธ์„œ๋Š” App Router๋ฅผ ๊ธฐ๋ณธ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋“œ๋กญ๋‹ค์šด์„ ํ†ตํ•ด Pages Router ๋ฌธ์„œ๋กœ ์ „ํ™˜๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  ์‚ฌ์ „ ์ง€์‹ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

Next.js๋ฅผ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ ์ „์— ์•„๋ž˜ ๊ธฐ์ˆ ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์ดํ•ด๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

  • HTML/CSS ๊ธฐ๋ณธ
  • JavaScript ES6 ๋ฌธ๋ฒ•
  • React ๊ธฐ์ดˆ (์ปดํฌ๋„ŒํŠธ, props, ์ƒํƒœ ๋“ฑ)

๐Ÿงฐ ์‹ค์ „์—์„œ Next.js๋ฅผ ์ด๋ ‡๊ฒŒ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค

# ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (App Router ๊ธฐ์ค€)
npx create-next-app@latest my-app --typescript --app
// app/page.tsx (๊ธฐ๋ณธ ํ™ˆ ํŽ˜์ด์ง€)
export default function HomePage() {
  return <h1>์•ˆ๋…•ํ•˜์„ธ์š”, Next.js!</h1>
}
// app/layout.tsx (๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ)
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ko">
      <body>{children}</body>
    </html>
  )
}
// app/api/hello/route.ts (๊ฐ„๋‹จํ•œ API)
export async function GET() {
  return Response.json({ message: "Hello from API!" })
}

์ด๋ ‡๊ฒŒ Next.js๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
API ๋ผ์šฐํŠธ๋ฅผ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•  ํ•„์š” ์—†์ด, ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฑ์—”๋“œ API๊นŒ์ง€ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงญ ๋ฌธ์„œ ํ™œ์šฉ ํŒ

  • ์ขŒ์ธก ๋ฉ”๋‰ด: ์ „์ฒด ๊ธฐ๋Šฅ ๊ตฌ์กฐ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ
  • ์šฐ์ธก ๋ฉ”๋‰ด: ํ•ด๋‹น ํŽ˜์ด์ง€ ์„น์…˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Ctrl+K ๋˜๋Š” Cmd+K: ๊ฒ€์ƒ‰ ์ฐฝ ํ˜ธ์ถœ
  • ์˜ˆ์ œ ์ฝ”๋“œ: ๋ณต๋ถ™ํ•ด์„œ ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

๐Ÿ” ์‹ค์ „์—์„œ ์ด๋Ÿฐ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜์„ธ์š”

์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค ์ ์šฉ ๋ฐฉ์‹

ํฌํŠธํด๋ฆฌ์˜ค ์›น์‚ฌ์ดํŠธ ์ •์  ํŽ˜์ด์ง€ (SSG) ๊ธฐ๋ฐ˜ ๋ฐฐํฌ
๋ธ”๋กœ๊ทธ MDX + App Router๋กœ SSR/ISR ์ ์šฉ
๋Œ€์‹œ๋ณด๋“œ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ + ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ํ˜ผํ•ฉ
API ์„œ๋ฒ„ app/api/ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋‚ด๋ถ€ API ๊ตฌ์ถ•

๐Ÿง‘‍๐Ÿ’ป ๋‹น์‹ ์ด ์ง€๊ธˆ ํ•ด์•ผ ํ•  ๊ฒƒ

  1. create-next-app์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  2. app/ ๊ตฌ์กฐ ์ดํ•ดํ•˜๋ฉฐ ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€ ๋งŒ๋“ค์–ด๋ณด๊ธฐ
  3. API ๋ผ์šฐํŠธ ์‹ค์Šต
  4. ์ •์ /๋™์  ๋ Œ๋”๋ง ๋น„๊ตํ•ด๋ณด๊ธฐ

๐Ÿ ๋งˆ๋ฌด๋ฆฌ

Next.js๋Š” ์ด์ œ ๋‹จ์ˆœํ•œ React ๋ณด์กฐ ๋„๊ตฌ๋ฅผ ๋„˜์–ด, ์™„์„ฑ๋„ ๋†’์€ ์›น ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์ง€๋งŒ, ๋„ˆ๋ฌด ๋ฐฉ๋Œ€ํ•œ ๋งŒํผ ํ•ต์‹ฌ ๊ตฌ์กฐ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ๋‹จ๊ณ„๋ณ„๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ์‹ค์ „ ํ”„๋กœ์ ํŠธ๋ฅผ Next.js๋กœ ์ง„ํ–‰ํ•  ๊ณ„ํš์ด๋ผ๋ฉด, ์ด ๊ธ€์ด ๊ตฌ์กฐ์ ์ธ ์ดํ•ด์˜ ์ฒซ ๊ฑธ์Œ์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ถ”ํ›„ ์‹œ๋ฆฌ์ฆˆ๋กœ App Router ๊ตฌ์กฐ ํ•ด๋ถ€, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ์บ์‹ฑ ์ „๋žต, **Next.js๋กœ ์™„์„ฑํ•˜๋Š” ๋ธ”๋กœ๊ทธ ํ”„๋กœ์ ํŠธ**๋„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


 

Next.js, React, ์›น๊ฐœ๋ฐœ, ํ’€์Šคํƒ, App Router, ์ •์ ์‚ฌ์ดํŠธ, ์„œ๋ฒ„์‚ฌ์ด๋“œ๋ Œ๋”๋ง, ์›นํ”„๋ ˆ์ž„์›Œํฌ, TypeScript