ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

 

๐Ÿ”— Next.js Multi-Zones: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์ „๋žต

Next.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์•ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์•ฑ์œผ๋กœ ๋‚˜๋ˆ ์•ผ ํ•  ํ•„์š”๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ์ด๋•Œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด ๋ฐ”๋กœ Multi-Zones์ž…๋‹ˆ๋‹ค.


โœ… Multi-Zones๋ž€?

Multi-Zones๋Š” ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ(์˜ˆ: example.com)์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Next.js ์•ฑ์„ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ๋ฐฐ์น˜ํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ฒ˜๋Ÿผ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  • / → main-app
  • /blog → blog-app
  • /admin → admin-app

๊ฐ ์•ฑ์€ ์„œ๋กœ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ·๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ๋„, ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ•˜๋‚˜์˜ ์‚ฌ์ดํŠธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.


โœ… ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜?

  • ํŒ€๋ณ„๋กœ ์•ฑ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ์กฐํ•ฉํ•ด ์šด์˜ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ (์˜ˆ: ํ•œ ์•ฑ์€ Next.js, ๋‹ค๋ฅธ ์•ฑ์€ Astro)

โœ… ์„ค์ • ๋ฐฉ๋ฒ•

1. ์•ฑ ๋ถ„๋ฆฌ

์˜ˆ๋ฅผ ๋“ค์–ด:

npx create-next-app main-app
npx create-next-app blog-app

2. ๊ฐ ์•ฑ์— basePath ์„ค์ •

// blog-app/next.config.js
module.exports = {
  basePath: '/blog',
  assetPrefix: '/blog',
};

3. ๋ฉ”์ธ ์•ฑ์—์„œ ํ”„๋ก์‹œ ์„ค์ •

// main-app/next.config.js
module.exports = {
  async rewrites() {
    return [
      {
        source: '/blog/:path*',
        destination: 'http://localhost:3001/blog/:path*',
      },
    ];
  },
};

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด example.com/blog/*๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ blog-app์œผ๋กœ ํ”„๋ก์‹œํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


โœ… ๋„ค๋น„๊ฒŒ์ด์…˜ ์ฒ˜๋ฆฌ

๋ฐ˜์‘ํ˜•
  • ๊ฐ™์€ ์•ฑ(Zone) ๋‚ด์—์„œ๋Š” <Link> ์‚ฌ์šฉ
  • ๋‹ค๋ฅธ ์•ฑ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” <a href="/blog"> ๊ฐ™์€ ์ „์ฒด ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋“œ ๋ฐฉ์‹ ์‚ฌ์šฉ

โœ… ์ฝ”๋“œ ๊ณต์œ ๋Š” ์–ด๋–ป๊ฒŒ?

์—ฌ๋Ÿฌ ์•ฑ ๊ฐ„์— ์ปดํฌ๋„ŒํŠธ๋‚˜ ์œ ํ‹ธ์„ ๊ณต์œ ํ•˜๋ ค๋ฉด ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. apps/, packages/ ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„๊ณ , pnpm, yarn workspaces, turborepo ๋“ฑ์„ ํ™œ์šฉํ•˜์„ธ์š”.


โœ… ์š”์•ฝ

ํ•ญ๋ชฉ ์„ค๋ช…

์•„ํ‚คํ…์ฒ˜ ์•ฑ์„ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌ (Zone)
๋„ค๋น„๊ฒŒ์ด์…˜ ๊ฐ™์€ Zone: Link, ๋‹ค๋ฅธ Zone: a
๋ฐฐํฌ ์ „๋žต ์•ฑ๋ณ„ ๋…๋ฆฝ ๋ฐฐํฌ ๊ฐ€๋Šฅ
์ฝ”๋“œ ๊ณต์œ  ๋ฐฉ์‹ ๋ชจ๋…ธ๋ ˆํฌ ๊ธฐ๋ฐ˜ ํŒจํ‚ค์ง€ ๊ณต์œ 
ํ™œ์šฉ ์˜ˆ์‹œ ๋Œ€๊ทœ๋ชจ SaaS, Admin ๋ถ„๋ฆฌ, ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์‹ ํ˜ผํ•ฉ ์šด์˜

๐Ÿ ๋งˆ๋ฌด๋ฆฌ

Multi-Zones๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ์˜ Next.js ์•ฑ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๊ณ  ์กฐ์ง์ด ๋ถ„ํ™”๋ ์ˆ˜๋ก ๋งค์šฐ ์œ ์šฉํ•ด์ง‘๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋…ธ๋ ˆํฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋™์‹œ์— ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 

Next.js, App Router, Multi-Zones, ๋ชจ๋…ธ๋ ˆํฌ, ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ, ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ, ๋…๋ฆฝ ๋ฐฐํฌ, Nginx Proxy, basePath, assetPrefix, SaaS ๊ตฌ์กฐ, ๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜


โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•