๐Ÿšค ์„ฑ์žฅ์ผ์ง€ 7.0

์ฑ… ํ–‰๋ณตํ•œ ์ด๊ธฐ์ฃผ์˜์ž(์›จ์ธ ๋‹ค์ด์–ด)์˜ ๋‚ด์šฉ์— ์ž๊ทน๋ฐ›์•„ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ์„ฑ์žฅ๊ธฐ๋ก

์‚ด์•„์žˆ๋Š” ๊ฝƒ๊ณผ ์ฃฝ์€ ๊ฝƒ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฐ€?
์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
์ƒ๋ช…์˜ ์œ ์ผํ•œ ์ฆ๊ฑฐ๋Š” ์„ฑ์žฅ์ด๋‹ค!

โš› (7.0)<์™„์ „ ๊ฐœํŽธ> ํŒŒ์ธ๋งŒ ํ•™์Šต๋ฒ•์„ ์•Œ๊ฒŒ ๋œ๋งŒํผ, ์„ฑ์žฅ์ผ์ง€๋Š” ์ •๋ง ๊ทธ ๋‚ ์˜ ํ‚ค์›Œ๋“œ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.

Next.js์˜ Parallel Routes

Next.js์˜ Route ๊ด€๋ จ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ์žฌ๋ฏธ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ๋ฐ”๋กœ Parallel Routes์ด๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ํ‰ํ–‰์œผ๋กœ(๋ณ‘๋ ฌ๋กœ) ๋ผ์šฐํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. layout.tsx ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด๋‹น ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ๊ณณ์—์„œ ํด๋”๋ช… ์•ž์— @๋ฅผ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํด๋”์˜ ์ด๋ฆ„์— ํ•ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” layout.tsx ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ง๋กœ ํ•˜๋ฉด ๋˜๊ฒŒ ๋ณต์žกํ•ด๋ณด์ด๋Š”๋ฐ ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.

export default function Layout({ children, aa, bb }: Props) {
  return (
    <>
      <h1>Layout</h1>
      {children} // ๊ธฐ๋ณธ์ ์œผ๋กœ layout.tsx๊ฐ€ ์œ„์น˜ํ•œ ๊ณ„์ธต์˜ page.tsx ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค.
      {aa} // @aa ํด๋”์˜ page.tsx ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค.
      {bb} // ๋งˆ์ฐฌ๊ฐ€์ง€
    </div>
  );
}

์ด ๋•Œ ๋˜ ์ค‘์š”ํ•œ ๊ฒŒ ์žˆ๋‹ค. ๋ฐ”๋กœ default.tsx์ธ๋ฐ, ์ด ํŒŒ์ผ์˜ ์—ญํ• ์€ ์œ„์™€ ๊ฐ™์ด ๋™์ผํ•œ ์œ„์น˜์—์„œ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ทธ ๋‚ด๋ถ€์— ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋Š” ์—†๋Š” ๊ฒฝ์šฐ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ Œ๋”๋งํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, @aa ํด๋”์— page.tsx๊ฐ€ ์žˆ๊ณ  @bb ํด๋”์—๋Š” page.tsx๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— @bb ํด๋”์˜ page.tsx๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— @bb ํด๋”์˜ default.tsx๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค.

์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์€ ๋ง๋กœ ์„ค๋ช…์ด ์–ด๋ ค์›Œ์„œ ์•„๋ž˜ ์ฐธ๊ณ ์— ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ณด๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค!

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์ •๋ง ์žฌ๋ฏธ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„..!(์‚ฌ์‹ค ์ฒ˜์Œ์— ์ดํ•ดํ•˜๋Š”๋ฐ ๋จธ๋ฆฌ๊ฐ€ ์•„ํŒ ์Œโ€ฆ)

๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ์œ„์˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด์„œ Modal(๋ชจ๋‹ฌ)์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค!!!(์ฐธ๊ณ )

์•ˆ๊ทธ๋ž˜๋„ Next.js์—์„œ๋„ React์™€ ๋น„์Šทํ•˜๊ฒŒ Portal์„ ์จ์•ผํ•˜๋‚˜ ํ–ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ์‰ฝ๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋‹ˆ! ๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.(๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๋Š๋ผ ๋จธ๋ฆฌ๊ฐ€ ์•„ํŒ ๋”ฐโ€ฆ) ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•์˜ ๊ตฌ์กฐ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

โ””โ”€ src
   โ””โ”€ app
      โ”œโ”€ example
      โ”‚  โ”œโ”€ @exampleModal
      โ”‚  โ”‚  โ””โ”€ filter
      โ”‚  โ”‚     โ””โ”€ page.tsx
      โ”‚  โ””โ”€ default.tsx, layout.tsx, page.tsx
      โ”œโ”€ @homeModal
      โ”‚  โ”œโ”€ filter
      โ”‚  โ”‚  โ””โ”€ page.tsx
      โ”‚  โ””โ”€ default.tsx
      โ””โ”€ default.tsx, layout.tsx, page.tsx

์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด home์—์„œ๋Š” โ€™/โ€˜๋กœ ์ ‘๊ทผ ์‹œ์— home ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๋ฉด์„œ @homeModal์— ํ•ด๋‹นํ•˜๋Š” default๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค.(modal์ด ๋ณด์ด๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ null์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.) ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋Œ€๋กœ โ€˜/filterโ€™๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” @homeModal์— ์žˆ๋Š” filter์— ์žˆ๋Š” page.tsx๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค. ์ด ๋•Œ, ๋ชจ๋‹ฌ์˜ ๊ธฐ๋Šฅ์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ(์ฆ‰, ๊ธฐ์กด home ์ปดํฌ๋„ŒํŠธ๋Š” ๋ Œ๋”๋ง ๋˜์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—) home์˜ default.tsx์—๋Š” home์˜ page.tsx๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด home ์ปดํฌ๋„ŒํŠธ๋Š” ๋ Œ๋”๋ง๋˜๊ณ , @homeModal์˜ filter์— ์žˆ๋Š” page.tsx๊ฐ€ ๋ Œ๋”๋ง๋˜๋ฉด์„œ ๋ชจ๋‹ฌ์ด ๋ Œ๋”๋ง๋œ๋‹ค. ์ฒ˜์Œ์—” ์ด ๋ถ€๋ถ„ ์ž์ฒด๊ฐ€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋ผ์„œ ๋งŽ์ด ํ—ค๋งธ๋Š”๋ฐ ํ•œ ๋ฒˆ ์ดํ•ดํ•˜๋ฉด ๋‚˜๋ฆ„..? ์ง๊ด€์ ์ด๊ณ  ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋ชจ๋‹ฌ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋’ค๋กœ๊ฐ€๊ธฐ๊ฐ€ ์ ์šฉ๋˜์—ˆ์œผ๋ฉด ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค! ์œ„์™€ ๊ฐ™์ด ๋ชจ๋‹ฌ ์ž์ฒด๊ฐ€ ๋ผ์šฐํŒ…์œผ๋กœ ๊ตฌํ˜„๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋‹ฌ์ฐฝ์ด ๋–ด์„ ๋•Œ ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ํ•˜๋ฉด ๋ชจ๋‹ฌ์ด ์‚ฌ๋ผ์ง„ ํ™”๋ฉด์ด ๋ Œ๋”๋ง๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ข€๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ผญ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค!

๐Ÿ“ ํšŒ๊ณ 

์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ์ง€๋งŒ ์ƒˆ๋กœ์šด ์žฌ๋ฏธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ํ•˜๋ฃจ์˜€๋‹ค. ๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ๋  ๋•Œ, Next์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ๋„ ํ•œ๋ฒˆ ๋ด์•ผ์ง€!!!

์ฐธ๊ณ