๐Ÿธminzzi
Minzzi์•ผ
๐Ÿธminzzi
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (131)
    • ์˜ค๋ฅ˜ํ•ด๊ฒฐ (14)
    • FE (36)
      • Next.js (17)
      • 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)

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

  • ํ™ˆ

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

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

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

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

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

Minzzi์•ผ

FE/Next.js

[Next.js] App Router - ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…

2025. 5. 6. 17:41
ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 
3.2) ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ์„ค์ •ํ•˜๊ธฐ

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

Page Router vs App Router

๊ณตํ†ต์ 

- ํด๋”๊ธฐ๋ฐ˜ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐจ์ด์ 

- Page Router : ํŠน์ • ํด๋” ์•ˆ์— index.tsx๊ฐ€ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์—ญํ• , ๊ฒฝ๋กœ.tsx(ex. search.tsx) ์—ญ์‹œ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ(/search)๋กœ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ

- App Router : page.tsx๊ฐ€ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์—ญํ• ์„ ํ•จ, ๋ฌด์กฐ๊ฑด page.tsx๋กœ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๋กœ ํด๋”๊ฐ€ ํ•„์š”

 

App Router์˜ query string ๋ฐ›์•„์˜ค๊ธฐ

App Router์—์„œ๋Š” ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ž๋™์œผ๋กœ ์ „๋‹ฌ์ด ๋˜๋Š” Props์—๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์ด๋‚˜ URL ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ฐ™์€ ๊ฐ’๋“ค์ด ํฌํ•จ๋œ๋‹ค.

{
  params: Promise {  // URL parameter
    <pending>,
    [Symbol(async_id_symbol)]: 56857,
    [Symbol(trigger_async_id_symbol)]: 56856,
    [Symbol(kResourceStore)]: {
      isStaticGeneration: false,
      page: '/search/page',
      fallbackRouteParams: null,
      route: '/search',
      incrementalCache: [IncrementalCache],
      cacheLifeProfiles: [Object],
      isRevalidate: false,
      isPrerendering: undefined,
      fetchCache: undefined,
      isOnDemandRevalidate: false,
      isDraftMode: false,
      requestEndedState: [Object],
      isPrefetchRequest: false,
      buildId: 'development',
      reactLoadableManifest: {},
      assetPrefix: '',
      afterContext: [AfterContext],
      dynamicIOEnabled: false,
      dev: true,
      previouslyRevalidatedTags: [],
      refreshTagsByCacheKind: [Map],
      fetchMetrics: []
    },
    ...
  },
  searchParams: Promise {
    <pending>,
    [Symbol(async_id_symbol)]: 56798,
    [Symbol(trigger_async_id_symbol)]: 56792,
    [Symbol(kResourceStore)]: {
      isStaticGeneration: false,
      page: '/search/page',
      fallbackRouteParams: null,
      route: '/search',
      incrementalCache: [IncrementalCache],
      cacheLifeProfiles: [Object],
      isRevalidate: false,
      isPrerendering: undefined,
      fetchCache: undefined,
      isOnDemandRevalidate: false,
      isDraftMode: false,
      requestEndedState: [Object],
      isPrefetchRequest: false,
      buildId: 'development',
      reactLoadableManifest: {},
      assetPrefix: '',
      afterContext: [AfterContext],
      dynamicIOEnabled: false,
      dev: true,
      previouslyRevalidatedTags: [],
      refreshTagsByCacheKind: [Map],
      fetchMetrics: []
    },
    ...
  }
}

 

๋”ฐ๋ผ์„œ ์ด props๋ฅผ ํ™œ์šฉํ•ด์„œ query string๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

export default async function Page({
  searchParams,
}: {
  searchParams: Promise<{ q: string }>;
}) {
  const { q } = await searchParams;
  return <div>Search ํŽ˜์ด์ง€ : {q}</div>;
}

URL Parameter๋ฅผ ํฌํ•จํ•˜๋Š” ํŽ˜์ด์ง€

๋™์ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด [id] ์™€ ๊ฐ™์ด ๋Œ€๊ด„ํ˜ธ๊ฐ€ ํฌํ•จ๋œ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‚ด๋ถ€์— page.tsx๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

.
โ””โ”€ book
   โ””โ”€โ”€ [id]
       โ””โ”€โ”€ page.tsx

URL Parameter ๊บผ๋‚ด์˜ค๊ธฐ

export default async function Page({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id } = await params;

  return <div>book/[id] ํŽ˜์ด์ง€ : {id}</div>;
}

Catch All Segment / Optional Catch All Segment

[...id] : book/1/1๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก Catch All Segment๋ฅผ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

[[...id]] : Catch All Segment๋กœ๋Š” /book ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Optional Catch All Segment๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

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

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

[Next.js] ๋ฆฌ์•กํŠธ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ  (2) 2025.05.07
[Next.js] App Router - ๋ ˆ์ด์•„์›ƒ  (0) 2025.05.06
[Next.js] Page Router ์žฅ๋‹จ์   (0) 2025.05.06
[Next.js] Page Router - ISR  (4) 2025.05.06
[Next.js] page router - SSG(์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ)  (1) 2025.05.06
    'FE/Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Next.js] ๋ฆฌ์•กํŠธ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ
    • [Next.js] App Router - ๋ ˆ์ด์•„์›ƒ
    • [Next.js] Page Router ์žฅ๋‹จ์ 
    • [Next.js] Page Router - ISR
    ๐Ÿธminzzi
    ๐Ÿธminzzi

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