๐Ÿธminzzi
Minzzi์•ผ
๐Ÿธminzzi
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (131) N
    • ์˜ค๋ฅ˜ํ•ด๊ฒฐ (14)
    • FE (36) N
      • Next.js (17) N
      • React (4)
      • React Native (0)
      • TypeScript (1)
      • JavaScript (14)
    • BE (0)
      • Nest.js (0)
    • ๋ฐ๋ธŒ์ฝ”์Šค (7)
    • ์›น ํ”„๋กœ์ ํŠธ (5)
    • CS (28)
      • Algorithm (5)
      • Python (4)
      • C++ (2)
      • Operating System (4)
      • Computer Networking (3)
      • Data Structure (1)
      • Machine Learning (3)
      • Tip (6)
    • Github (4)
    • Flutter (3)
      • ํ”„๋กœ์ ํŠธ (3)
    • Private (27)
      • ํšŒ๊ณ  (7)
      • ๋ฉด์ ‘ (17)
    • ๊ฐœ๋ฐœ๋„์„œ (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • reflow
  • ๋ฉด์ ‘
  • layout shift
  • SSR
  • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ํž™์˜์—ญ
  • ํ˜ธ์ด์ŠคํŒ…
  • ์›์‹œํƒ€์ž…
  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • react
  • ์˜ค๋ธ”์™„
  • ๋ ‰์‹œ์ปฌ
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ๋ชจ๋˜๋ฆฌ์•กํŠธ๋”ฅ๋‹ค์ด๋ธŒ
  • ์‹คํ–‰์ปจํƒ์ŠคํŠธ
  • next.js
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • ์ด๋ฒคํŠธ๋ฃจํ”„
  • ์‹คํ–‰์ปจํ…์ŠคํŠธ
  • ์ฝœ์Šคํƒ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๐Ÿธminzzi

Minzzi์•ผ

FE/Next.js

[Next.js] Page Router, ์„ค์ •, ๋„ค๋น„๊ฒŒ์ดํŒ…

2025. 5. 2. 23:34
ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 
2.1) Page Router๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
2.2) ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ์„ค์ •ํ•˜๊ธฐ
2.3) ๋„ค๋น„๊ฒŒ์ดํŒ…

2.1 Page Router๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค

Page Router ๋ž€?

๋งŽ์€ ๊ธฐ์—…์—์„œ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ๋ผ์šฐํ„ฐ

ํŠน์ • ์กฐ๊ฑด์„ ๊ธฐ์ค€์œผ๋กœ ์›น์„œ๋น„์Šค ๋‚ด์— ํŽ˜์ด์ง€๋ฅผ ๋ถ„ํ• ํ•˜๊ณ  ๋˜ ๊ทธ๋ ‡๊ฒŒ ๋ถ„ํ• ๋œ ํŽ˜์ด์ง€ ๊ฐ„์˜ ์ด๋™์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

ํŒŒ์ผ์˜ ์ด๋ฆ„(ํ˜น์€ ํด๋”์˜ ์ด๋ฆ„)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…์„ ์ œ๊ณต

 

๋™์  ๊ฒฝ๋กœ

/page/1, /page/2... ์ฒ˜๋Ÿผ ๊ฐ€๋ณ€์ ์ธ ๊ฐ’์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ๋กœ(๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€ ์ฃผ์†Œ ๋“ฑ)

/page ํด๋” ํ•˜๋‹จ์— [id].js ๋กœ ๋Œ€๊ด„ํ˜ธ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

npx(node package execute)

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์‹ค์ œ๋กœ ์˜ฌ๋ผ๊ฐ€์žˆ๋Š” ์„œ๋ฒ„์ธ npmjs.com์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ช…๋ น์–ด

 

ํด๋”๊ตฌ์กฐ 

public : ํŽ˜์ด์ง€ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€ ํŒŒ์ผ๊ฐ™์€ ์ •์ ์ธ ํŒŒ์ผ๋“ค์ด ๋ณด๊ด€๋˜์–ด ์žˆ์Œ

 

_app.tsx, _document.tsx ์˜ ์—ญํ• 

pages ํด๋” ๋ฐ‘์— ์žˆ๊ธด ํ•˜์ง€๋งŒ ํŽ˜์ด์ง€์˜ ์—ญํ• ์„ ํ•˜๋Š” ํŒŒ์ผ์ด ์•„๋‹˜

๋Œ€์‹  ๋„ฅ์ŠคํŠธ ์•ฑ์˜ ๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋  ๋กœ์ง์ด๋‚˜ ๋ ˆ์ด์•„์›ƒ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ์ผ

 

App ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• 

๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ

Component : ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์—ญํ• ์„ ํ•  ์ปดํฌ๋„ŒํŠธ

pageProps : ์ „๋‹ฌ๋  ํŽ˜์ด์ง€์˜ ํ”„๋กญ์Šค๋“ค์„ ๊ฐ์ฒด๋กœ ๋ชจ์•„๋†“์€ ๊ณณ

import "@/styles/globals.css";
import type { AppProps } from "next/app";

export default function App({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />;
}

๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋Š”(ํ—ค๋”, ํ‘ธํ„ฐ ๋“ฑ)์˜ ๊ณตํ†ต ์š”์†Œ๋Š” App ์ปดํฌ๋„ŒํŠธ์— ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

 

Document ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• 

๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ์ด ๋˜์–ด์•ผ ํ•˜๋Š” html ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ

๋ฉ”ํƒ€ ํƒœ๊ทธ ๋˜๋Š” ํฐํŠธ, ๊ตฌ๊ธ€ ์• ๋„๋ฆฌํ‹ฑ์Šค ๊ฐ™์€ ์„œ๋“œ ํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ

 

next.config.mjs

๋„ฅ์ŠคํŠธ ์•ฑ์˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ


2.2 ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ์„ค์ •ํ•˜๊ธฐ

์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ์„ค์ • ๋ฐฉ๋ฒ•

useRouter์—์„œ next/router, next/navigation ์˜ ์ฐจ์ด

next/navigation : App Router์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€์ž„

 

useRouter -> router๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

router๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ

 

book/234/234/234 ์ฒ˜๋Ÿผ id๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

- Catch All Segment : ํŒŒ์ผ ์ด๋ฆ„์— ... ๋ถ™์ด๊ธฐ [...id].tsx
๋‹ค๋งŒ Catch All Segment๋Š”. index.tsx(/book)๋Š” ๋Œ€์‘ํ•  ์ˆ˜ ์—†๋‹ค. -> ์™œ๋ƒํ•˜๋ฉด Catch All Segment๋Š” /book ๋’ค์— ๋ญ๊ฐ€ ๋‚˜์™€์•ผ ํ•˜๋Š” ๊ฒฝ๋กœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜๋„ /book ๋’ค์— ๋ญ๊ฐ€ ์˜ค๋“  ์•ˆ์˜ค๋“  ํŽ˜์ด์ง€๋ฅผ ๋ณด์ด๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? -> Optional Catch All Segment : [[...id]].tsx ์ฒ˜๋Ÿผ ๋Œ€๊ด„ํ˜ธ๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ฐ์‹ธ์ฃผ๋ฉด ๋œ๋‹ค.

 

404.tsx

pages/ ์•„๋ž˜์— 404.tsx ๋งŒ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ์ ‘์† ๋ถˆ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€ ์ฃผ์†Œ์— ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


2.3 ๋„ค๋น„๊ฒŒ์ดํŒ…

a / Link ์ฐจ์ด์ 

<a></a> : ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ฌ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒํƒœ ๊ฐ’์„ ์žƒ๊ณ  ์†๋„๊ฐ€ ์ €ํ•˜๋œ๋‹ค.

<Link></Link> : ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ๋งŒ ๋ฐ”๊ฟ€ ๋ฟ, ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€๋Š” ์•Š๋Š”๋‹ค.

 

Programmatic Navigation

์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ์ง์ ‘ ํด๋ฆญํ–ˆ์„ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ํŠน์ • ๋ฒ„ํŠผ์ด ํด๋ฆญ์ด ๋˜์—ˆ๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑํ–ˆ์„ ๊ฒฝ์šฐ ์–ด๋– ํ•œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'FE > Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Next.js] page router - API Routes  (0) 2025.05.03
[Next.js] page router - ํ”„๋ฆฌํŽ˜์นญ  (0) 2025.05.03
[Next.js] Next.js?  (1) 2025.05.01
[Next.js] reactStrictMode  (0) 2025.04.21
[Next.js] ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ  (0) 2024.06.10
    'FE/Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Next.js] page router - API Routes
    • [Next.js] page router - ํ”„๋ฆฌํŽ˜์นญ
    • [Next.js] Next.js?
    • [Next.js] reactStrictMode
    ๐Ÿธminzzi
    ๐Ÿธminzzi

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”