231020(๊ธ) ์ฑ์ฅ
๐ค ์ฑ์ฅ์ผ์ง 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์ ๋ด๋ถ ๊ตฌํ ์ฝ๋๋ ํ๋ฒ ๋ด์ผ์ง!!!