๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Front
NextJs
07-Route Groups

Route Groups

app ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ค‘์ฒฉ๋œ ํด๋”๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ URL ๊ฒฝ๋กœ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํด๋”๋ฅผ rouet groups(๋ผ์šฐํŠธ ๊ทธ๋ฃน)์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ํด๋”๊ฐ€ ๊ฒฝ๋กœ์˜ URL ๊ฒฝ๋กœ์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด URL ๊ฒฝ๋กœ ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ , ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ์™€ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ๋…ผ๋ฆฌ์  ๊ทธ๋ฃน์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์šฐํŠธ ๊ทธ๋ฃน์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


1. Convention(์ปจ๋ฒค์…˜)

๋ผ์šฐํŠธ ๊ทธ๋ฃน์€ ํด๋” ์ด๋ฆ„์„ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: (folderName)


2. ์˜ˆ์‹œ

2.1 URL ๊ฒฝ๋กœ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ผ์šฐํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ

URL ๊ฒฝ๋กœ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ผ์šฐํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๊ด€๋ จ ๋ผ์šฐํŠธ๋ฅผ ๋ชจ์•„ ๊ทธ๋ฃน์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ํด๋”๋“ค์€ URL ๊ฒฝ๋กœ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ: (marketing) ํ˜น์€ (shop))

๋ผ์šฐํŒ…-์šฉ์–ด

(marketing) ๊ณผ (shop) ๋‚ด๋ถ€์˜ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•œ URL ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ณต์œ ํ•˜๋”๋ผ๋„, ํด๋”์— layout.js ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ ๊ทธ๋ฃน๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์šฐํŒ…-์šฉ์–ด


2.2 ํŠน์ • ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ

ํŠน์ • ๋ผ์šฐํŠธ๋ฅผ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ๋ผ์šฐํŠธ ๊ทธ๋ฃน (์˜ˆ: (shop))์„ ๋งŒ๋“ค๊ณ , ๋™์ผํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ ์šฉํ•  ๋ผ์šฐํŠธ๋“ค์„ ๊ทธ๋ฃน ์•ˆ์œผ๋กœ ๋„ฃ์Šต๋‹ˆ๋‹ค (์˜ˆ: account ์™€ cart). ๊ทธ๋ฃน ๋ฐ–์— ์žˆ๋Š” ๋ผ์šฐํŠธ๋“ค์€ ๊ทธ๋ฃน ๋ ˆ์ด์•„์›ƒ์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์˜ˆ: checkout)

๋ผ์šฐํŒ…-์šฉ์–ด


2.3 Creating multiple root layouts

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๋ ค๋ฉด, ๊ฐ€์žฅ ์ƒ์œ„ ํด๋”์˜ layout.js ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋ผ์šฐํŠธ ๊ทธ๋ฃน์— layout.js ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์™„์ „ํžˆ ๋‹ค๋ฅธ UI ๋˜๋Š” ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์„น์…˜์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ์— <html> ๋ฐ <body> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ผ์šฐํŒ…-์šฉ์–ด

์œ„์˜ ์˜ˆ์‹œ์—์„œ (marketing) ๊ณผ (shop) ๋ผ์šฐํŠธ์—๋Š” ๊ฐ์ž์˜ ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ :

  • ๋ผ์šฐํŠธ ๊ทธ๋ฃน์˜ ์ด๋ฆ„์€ ๊ทธ๋ฃนํ™”๋ฅผ ํ†ตํ•œ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ผ๋ฟ, ๋‹ค๋ฅธ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • ๋ผ์šฐํŠธ ๊ทธ๋ฃน์˜ ์ด๋ฆ„์ด URL ๊ฒฝ๋กœ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ผ์šฐํŠธ ๊ทธ๋ฃน์„ ํฌํ•จํ•˜๋Š” ๋ผ์šฐํŠธ๋Š” ๋‹ค๋ฅธ ๋ผ์šฐํŠธ์™€ ๊ฐ™์€ URL ๊ฒฝ๋กœ๋กœ ๊ท€๊ฒฐ๋˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ผ์šฐํŠธ ๊ทธ๋ฃน์€ URL ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ,
    • (marketing)/about/page.js ํŒŒ์ผ๊ณผ (shop)/about/page.js ํŒŒ์ผ ๋ชจ๋‘ /about ๊ฒฝ๋กœ์— ๊ท€๊ฒฐ๋˜์–ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ตœ์ƒ์œ„ ํด๋”์— layout.js ํŒŒ์ผ ์—†์ด ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ์„ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ,
    • app/(marketing)/page.js ์ฒ˜๋Ÿผ page.js ํŒŒ์ผ์ด ๋ผ์šฐํŠธ ๊ทธ๋ฃน ์ค‘ ํ•˜๋‚˜์— ์ •์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ์„ ๊ฑฐ์ณ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ ์ธก ํƒ์ƒ‰๊ณผ ๋‹ฌ๋ฆฌ ์ „์ฒด ํŽ˜์ด์ง€ ๋กœ๋“œ(full page load)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, app/(shop)/layout.js ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” /cart ์—์„œ๋ถ€ํ„ฐ
    • app/(marketing)/layout.js ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” /blog ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์ „์ฒด ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๊ฒƒ์€ ๋‹ค์ค‘ ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ์ด ์žˆ์„ ๋•Œ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.