๐Ÿš€ Next.js ์‹ฌํ™” 12์žฅ: Micro-Frontend & Multi-Zones โ€” ๊ฑฐ๋Œ€ ๊ณต๋ฃก์„ ์กฐ๊ฐ๋‚ด์–ด ๋‹ค์Šค๋ฆฌ๊ธฐ

๐Ÿ“‹ ๊ฐœ์š”

Next.js Multi-Zones๋กœ ๊ฑฐ๋Œ€ ์•ฑ์„ ๋…๋ฆฝ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹ ๋ชฉ์ฐจ


๐Ÿ“Œ ์ด ๋ฌธ์„œ๋ฅผ ์ฝ๊ธฐ ์ „์—

โฑ๏ธ ์˜ˆ์ƒ ์ฝ๊ธฐ ์‹œ๊ฐ„: 20๋ถ„ (์ „์ฒด) / ํ•ต์‹ฌ ํŒŒํŠธ๋งŒ: 10๋ถ„

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ ์„ธ๊ณ„๊ด€: '์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ'

  • ์˜์ˆ˜(PM): "์˜ํ˜ธ ๋‹˜, ์šฐ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ ธ์„œ ๋นŒ๋“œ ํ•œ ๋ฒˆ์— 15๋ถ„์ด๋‚˜ ๊ฑธ๋ ค์š”! ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋А๋ ค์กŒ๋Š”๋ฐ ๋ฐฉ๋ฒ• ์—†๋‚˜์š”?"
  • ์˜ํ˜ธ(๋ฆฌ๋“œ): "์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ฑฐ๋Œ€ํ•ด์ ธ์„œ ๊ทธ๋ž˜์š”. ์ด์ œ '์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฉ”์ธ', '์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…', '๋งˆ์ผ“'์„ ๊ฐ๊ฐ ๋ณ„๋„์˜ Next.js ์•ฑ์œผ๋กœ ์ชผ๊ฐœ์•ผ ํ•  ๋•Œ๊ฐ€ ๋๋„ค์š”."
  • ์˜์ฒ (์ฃผ๋‹ˆ์–ด): "์–ด? ์•ฑ์„ ์ชผ๊ฐœ๋ฉด ์œ ์ €๊ฐ€ ํŽ˜์ด์ง€ ์ด๋™ํ•  ๋•Œ ์ƒˆ๋กœ๊ณ ์นจ ๋˜์ž–์•„์š”! SPA ๊ฐ™์€ ๋А๋‚Œ์ด ์•ˆ ๋‚˜๋ฉด ์–ด์ฉŒ์ฃ ?"
  • ์˜ํ˜ธ: "๊ทธ๋ž˜์„œ Multi-Zones๊ฐ€ ํ•„์š”ํ•œ ๊ฑฐ์˜ˆ์š”. ์œ ์ €๋Š” ํ•˜๋‚˜์˜ ์•ฑ์ธ ์ค„ ์•Œ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์—ฌ๋Ÿฌ ์•ฑ์ด ํ˜‘์—…ํ•˜๋Š” ๊ฑฐ์ฃ ."

๐ŸŽฏ ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค ์ฝ์œผ๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • ๊ฑฐ๋Œ€ํ•ด์ง„ Next.js ์•ฑ์„ ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„(Zones)๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋นŒ๋“œ ์†๋„์™€ ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ๋…๋ฆฝ์‹œ์ผœ ํŒ€๋ณ„ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค
  • rewrites๋ฅผ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ Next.js ์•ฑ์„ ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์œผ๋กœ ๋งค๋„๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค

๐Ÿค” ์™œ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€

์„œ๋น„์Šค๊ฐ€ ์„ฑ์žฅํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜. ์ด๊ฑธ ๋ชจ๋†€๋ฆฌ์‹(Monolithic) ํ”„๋ก ํŠธ์—”๋“œ๋ผ๊ณ  ํ•ด.
๋ฌธ์ œ๋Š” ์ฝ”๋“œ๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋นŒ๋“œ๊ฐ€ ๋А๋ ค์ง€๊ณ , ํ•œ ๋ช…์˜ ์‹ค์ˆ˜๋กœ ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ์ฃฝ์„ ์œ„ํ—˜๋„ ์ปค์ง„๋‹ค๋Š” ๊ฑฐ์•ผ.

๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ(MFE) ๋Š” ์ด ๊ฑฐ๋Œ€ํ•œ ์•ฑ์„ ์ž‘๊ฒŒ ์ชผ๊ฐœ๋Š” ์ฒ ํ•™์ด์•ผ.
Next.js์—์„œ๋Š” ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ์ˆœ์ •(Native)์ธ ๋ฐฉ์‹์ด ๋ฐ”๋กœ Multi-Zones์•ผ.

์‹œ๋‹ˆ์–ด์˜ ์ธ์‚ฌ์ดํŠธ:
"Module Federation(Webpack ์ „์šฉ)์€ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ์„ค์ •์ด ์ง€์˜ฅ์ด๊ณ  ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ์ง€์›์ด ๊นŒ๋‹ค๋กœ์›Œ์š”. ํ•˜์ง€๋งŒ Next.js์˜ Multi-Zones๋Š” rewrites ๊ธฐ๋ฐ˜์ด๋ผ SSR๋„ ์™„๋ฒฝํ•˜๊ณ  ๊ตฌ์กฐ๋„ ํ›จ์”ฌ ๋‹จ์ˆœํ•˜์ฃ . ๋Œ€๊ทœ๋ชจ ๊ธฐ์—…(Vercel, Uber, TikTok ๋“ฑ)๋“ค์ด ์ด ๋ฐฉ์‹์„ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ์˜ˆ์š”."


๐Ÿ—๏ธ ๋น„์œ ๋กœ ๋จผ์ € ์ดํ•ดํ•˜๊ธฐ

๐Ÿข ๋ฐฑํ™”์ ์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค๋ฉด?
๊ฑฐ๋Œ€ํ•œ ๋ฐฑํ™”์  ๊ฑด๋ฌผ ํ•˜๋‚˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฑด ํž˜๋“ค์–ด. ์ „๊ธฐ๊ฐ€ ๋‚˜๊ฐ€๋ฉด ๋ชจ๋“  ์ธต์ด ๋‹ค ์–ด๋‘์›Œ์ง€์ž–์•„.

  1. ๋ชจ๋†€๋ฆฌ์‹: ๊ฑด๋ฌผ์ด ํ†ต์งธ๋กœ ํ•˜๋‚˜์ธ ๋ฐฑํ™”์ .
  2. Multi-Zones: 1์ธต์€ ๋ช…ํ’ˆ์กด(Next.js ์•ฑ A), 2์ธต์€ ํ‘ธ๋“œ์ฝ”ํŠธ(Next.js ์•ฑ B), 3์ธต์€ ์ƒํ™œ๊ด€(Next.js ์•ฑ C)์œผ๋กœ ์ฃผ์ธ์ด ๊ฐ๊ฐ ๋”ฐ๋กœ ์žˆ๋Š” ๊ฑฐ์•ผ.

์†๋‹˜(์œ ์ €)์€ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ(๋„ค๋น„๊ฒŒ์ด์…˜)๋ฅผ ํƒ€๊ณ  ์ธต์„ ์ด๋™ํ•ด. 1์ธต(๋ช…ํ’ˆ) ์ฃผ์ธ์€ ์ง€ํ•˜์‹ค ๊ณต์‚ฌ๋ฅผ ํ•ด๋„ 2์ธต(ํ‘ธ๋“œ์ฝ”ํŠธ) ์˜์—…์—๋Š” ์ง€์žฅ์ด ์—†์ง€. ์†๋‹˜ ์ž…์žฅ์—์„œ๋Š” ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ '๋ฐฑํ™”์ '์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ.


๐Ÿ—บ๏ธ Multi-Zones vs Module Federation ๐ŸŸข

๐ŸŽฏ ์ด ์„น์…˜์„ ์ฝ๊ณ  ๋‚˜๋ฉด:

  • ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋งž๋Š” ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์ „๋žต์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋น„๊ต ํ•ญ๋ชฉMulti-Zones (Next.js ์ˆœ์ •)Module Federation (Webpack/Rspack)
์ž‘๋™ ์›๋ฆฌ๋ผ์šฐํŒ… ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ (rewrites)๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ ์ฃผ์ž… (JavaScript ๊ณต์œ )
ํ†ตํ•ฉ ๊ฐ•๋„๋А์Šจํ•œ ๊ฒฐํ•ฉ (์•ฑ์ด ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋จ)๊ฐ•ํ•œ ๊ฒฐํ•ฉ (์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋ฅผ ๊ณต์œ )
SSR ์ง€์›โœ… ์™„๋ฒฝ ์ง€์› (๊ฐ€์žฅ ํฐ ์žฅ์ )โš ๏ธ ๊นŒ๋‹ค๋กœ์›€ (์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋™๊ธฐํ™” ํ•„์š”)
๊ตฌํ˜„ ๋‚œ์ด๋„๐ŸŸข ์‰ฌ์›€ (Config ์„ค์ • ์œ„์ฃผ)๐Ÿ”ด ์–ด๋ ค์›€ (๋นŒ๋“œ ๋„๊ตฌ ์‹ฌํ™” ์ง€์‹ ํ•„์š”)
์ถ”์ฒœ ์ƒํ™ฉ๋„๋ฉ”์ธ/๊ฒฝ๋กœ ๋‹จ์œ„๋กœ ๋ช…ํ™•ํžˆ ์ชผ๊ฐœ์งˆ ๋•Œ๋Œ€์‹œ๋ณด๋“œ ์œ„์ ฏ์ฒ˜๋Ÿผ ์„ž์—ฌ์žˆ์„ ๋•Œ

๐Ÿ—๏ธ Multi-Zones ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๐ŸŸก

1์ฐจ ์ „๋žต: ๋„๋ฉ”์ธ ๋งคํ•‘

๊ฐ€์žฅ ๋จผ์ € 'Host'(์ž…๊ตฌ) ์•ฑ๊ณผ 'Child'(์„œ๋ธŒ) ์•ฑ์„ ์ •ํ•ด์•ผ ํ•ด.

  • Host (Main): youngsu.com/ (๋ฉ”์ธ ํ™ˆ, ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ)
  • Zone 1 (Chat): youngsu.com/chat (์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์•ฑ)
  • Zone 2 (Market): youngsu.com/market (์•„์ดํ…œ ๊ฑฐ๋ž˜ ์•ฑ)

2์ฐจ ์ „๋žต: ์ž์‚ฐ(Assets)์˜ ๊ณ ์œ ์„ฑ

๊ฐ ์•ฑ์˜ _next/static ๊ฒฝ๋กœ๊ฐ€ ๊ฒน์น˜๋ฉด ์•ˆ ๋ผ! ๊ทธ๋ž˜์„œ assetPrefix๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ด.


๐Ÿš€ ์‹ค์ „! next.config.ts์—์„œ Zone ์—ฐ๊ฒฐํ•˜๊ธฐ ๐Ÿ”ด

1๋‹จ๊ณ„: ์„œ๋ธŒ ์•ฑ(Chat) ์„ค์ •

์˜์ฒ ์ด๊ฐ€ ๋งŒ๋“  ์ฑ„ํŒ… ์•ฑ์˜ ์„ค์ •์ด์•ผ.

// apps/chat/next.config.ts
import type { NextConfig } from "next";
 
const nextConfig: NextConfig = {
  // โœ… ํ•ต์‹ฌ 1: ๋นŒ๋“œ๋œ JS/CSS ํŒŒ์ผ๋“ค์ด ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ๋น„ํ‹€์–ด์คŒ
  assetPrefix: '/chat-static',
  
  // โœ… ํ•ต์‹ฌ 2: ๋‚ด๋ถ€ ๋ผ์šฐํŒ…์ด /chat ๋ฐ‘์—์„œ๋งŒ ๋Œ์•„๊ฐ€๋„๋ก ๊ณ ์ •
  basePath: '/chat',
 
  // ์ •์  ์ž์‚ฐ ์š”์ฒญ์„ assetPrefix๋กœ ๋‹ค์‹œ ๋Œ๋ ค์ฃผ๋Š” ์„ค์ •
  async rewrites() {
    return [
      {
        source: '/chat-static/_next/:path*',
        destination: '/_next/:path*',
      },
    ];
  },
};
 
export default nextConfig;

2๋‹จ๊ณ„: ๋ฉ”์ธ ํ˜ธ์ŠคํŠธ(Main) ์„ค์ •

์˜ํ˜ธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ธ ๊ฒŒ์ดํŠธ์›จ์ด ์„ค์ •์ด์•ผ.

// apps/main/next.config.ts
import type { NextConfig } from "next";
 
const CHAT_URL = process.env.CHAT_APP_URL || 'http://localhost:3001';
 
const nextConfig: NextConfig = {
  async rewrites() {
    return [
      // โœ… ํ•ต์‹ฌ: /chat์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฑ„ํŒ… ์„œ๋ฒ„(Zone 1)๋กœ ํ† ์Šค!
      {
        source: '/chat',
        destination: `${CHAT_URL}/chat`,
      },
      {
        source: '/chat/:path*',
        destination: `${CHAT_URL}/chat/:path*`,
      },
      // โœ… ์ •์  ํŒŒ์ผ๋„ ์„œ๋ผ์šด๋“œ๋กœ ํ† ์Šค
      {
        source: '/chat-static/_next/:path*',
        destination: `${CHAT_URL}/chat-static/_next/:path*`,
      }
    ];
  },
};
 
export default nextConfig;

๐Ÿงฉ ๊ณต์œ  ์ปดํฌ๋„ŒํŠธ์™€ ํŒจํ‚ค์ง€ ์ „๋žต ๐ŸŸก

๐Ÿค” ์ž ๊น, ๋จผ์ € ์ƒ๊ฐํ•ด๋ด
์•ฑ์„ ์ชผ๊ฐฐ๋Š”๋ฐ 'Header'๋‚˜ 'Footer' ์ฝ”๋“œ๋ฅผ ๋ชจ๋“  ์•ฑ์— ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋ฉด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?
๋‹น์—ฐํžˆ ์•ˆ ๋˜๊ฒ ์ง€. ๊ทธ๋ž˜์„œ Turborepo ๊ฐ™์€ ๋ชจ๋…ธ๋ ˆํฌ ๋„๊ตฌ๋ฅผ ์จ์„œ packages/ui๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ด.

์˜ํ˜ธ์˜ Pro-Tip:
"์ƒํƒœ ๊ด€๋ฆฌ(Redux, Query)๋ฅผ ์—ฌ๋Ÿฌ Zone์—์„œ ๊ณต์œ ํ•˜๋Š” ๊ฑด ๊ถŒ์žฅํ•˜์ง€ ์•Š์•„์š”. ๊ฐ Zone์€ ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ ๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค๋ฉด Shared Cookie๋‚˜ URL ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์“ฐ์„ธ์š”. ๊ทธ๊ฒŒ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋‹ต๊ฒŒ '๋А์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ' ์ƒํƒœ๊ฑฐ๋“ ์š”."


๐Ÿ ์ด๋ฒˆ์— ๋ฐฐ์šด ๋‚ด์šฉ ์ด์ •๋ฆฌ

๐Ÿ“‹ Multi-Zones ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋‹จ๊ณ„์ž‘์—… ๋‚ด์šฉ์ด์œ 
basePath์„œ๋ธŒ ์•ฑ์˜ ๊ฒฝ๋กœ ๊ณ ์ • (/chat)๋ผ์šฐํŒ… ์ถฉ๋Œ ๋ฐฉ์ง€
assetPrefix์ •์  ์ž์‚ฐ ๊ฒฝ๋กœ ๊ณ ์œ ํ™”JS/CSS ํŒŒ์ผ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€
rewritesํ˜ธ์ŠคํŠธ ์•ฑ์—์„œ ์„œ๋ธŒ ์•ฑ ์—ฐ๊ฒฐ์œ ์ €์—๊ฒŒ ํ•˜๋‚˜์˜ ์•ฑ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•จ

โš ๏ธ ์ ˆ๋Œ€ ํ•˜์ง€ ๋ง ๊ฒƒ

์ƒํ™ฉโŒ ๋‚˜์œ ์˜ˆโœ… ์ข‹์€ ์˜ˆ
์•ฑ ์—ฐ๊ฒฐํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋„๋ฉ”์ธ (market.com)rewrites๋ฅผ ํ†ตํ•œ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ
์ž์› ๊ณต์œ ๋ชจ๋“  ์•ฑ์ด ํ•˜๋‚˜์˜ Redux Store ๊ณต์œ ๊ฐ ์•ฑ๋ณ„ ๋…๋ฆฝ Store + ์ตœ์†Œํ•œ์˜ ์ƒํƒœ ๊ณต์œ 
๋ฐฐํฌํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋นŒ๋“œ ๋ฐฐํฌZone ๋‹จ์œ„ ๋…๋ฆฝ ๋นŒ๋“œ & ๋…๋ฆฝ ๋ฐฐํฌ

๐Ÿ“ ๋งˆ๋ฌด๋ฆฌ ํ€ด์ฆˆ

Q1. Next.js Multi-Zones์—์„œ assetPrefix๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฐ์ •์ ์ธ ์ด์œ ๋Š”?

  • A) ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ
  • B) ์—ฌ๋Ÿฌ ์•ฑ์˜ ์ •์  ํŒŒ์ผ(JS, CSS) ๊ฒฝ๋กœ๊ฐ€ ๊ฒน์ณ์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ˜ผ๋ž€์— ๋น ์ง€๋Š” ๊ฑธ ๋ง‰๊ธฐ ์œ„ํ•ด
  • C) SEO ์ ์ˆ˜๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด
  • D) ์„œ๋ฒ„ ์šฉ๋Ÿ‰์„ ์•„๋ผ๊ธฐ ์œ„ํ•ด

โœ… ์ •๋‹ต: B
ํ•ด์„ค: ๋ชจ๋“  Next.js ์•ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ /_next/static/... ๊ฒฝ๋กœ๋ฅผ ์จ. ๋‘ ์•ฑ์˜ ํŒŒ์ผ๋ช…์ด ์šฐ์—ฐํžˆ ๊ฐ™์œผ๋ฉด(์˜ˆ: main.js) ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๊ฐ€ ๊ผฌ์ด๊ฒ ์ง€? ๊ทธ๋ž˜์„œ ์ฑ— ์•ฑ์€ /chat-static์ฒ˜๋Ÿผ ์ž๊ธฐ๋งŒ์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•ด.

Q2. ๋‹ค์Œ ์ค‘ Multi-Zones ์•„ํ‚คํ…์ฒ˜์˜ ์žฅ์ ์ด ์•„๋‹Œ ๊ฒƒ์€?

  • A) ํŒ€๋ณ„๋กœ ๊ธฐ์ˆ  ์Šคํƒ์ด๋‚˜ Next.js ๋ฒ„์ „์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค (์ ์ง„์  ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ).
  • B) ํŠน์ • ๊ธฐ๋Šฅ(Zone)์˜ ์—๋Ÿฌ๊ฐ€ ์ „์ฒด ์„œ๋น„์Šค๋กœ ๋ฒˆ์ง€๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
  • C) ์•ฑ ๊ฐ„์˜ ์ „์—ญ ์ƒํƒœ ๊ณต์œ ๊ฐ€ ๋งค์šฐ ์‰ฝ๊ณ  ๊ฐ„ํŽธํ•˜๋‹ค.
  • D) ๋นŒ๋“œ ๋‹จ์œ„๊ฐ€ ์ž‘์•„์ ธ์„œ ๋ฐฐํฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.

โœ… ์ •๋‹ต: C
ํ•ด์„ค: Multi-Zones๋Š” ์•ฑ์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด ์ „์—ญ ์ƒํƒœ ๊ณต์œ ๊ฐ€ ์˜คํžˆ๋ ค ๊นŒ๋‹ค๋กœ์›Œ. ์ด๊ฑด ๋‹จ์ ์ด์ž, ์•ฑ ๊ฐ„ ์˜์กด์„ฑ์„ ์ค„์ด๋Š” '์˜๋„๋œ ์„ค๊ณ„'์ด๊ธฐ๋„ ํ•ด.


๐Ÿฃ ์˜์ฒ ์ด์˜ ํ‡ด๊ทผ ์ผ๊ธฐ

์˜ค๋Š˜์€ ์ •๋ง ๊ฑฐ๋Œ€ํ•œ ์„œ๋น„์Šค์˜ ๋ผˆ๋Œ€๋ฅผ ์ชผ๊ฐœ๊ณ  ํ•ฉ์น˜๋Š” 'Micro-frontends & Multi-Zones' ๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ ์‹œ์•ผ๊ฐ€ ํ™• ํŠธ์ด๋Š” ๊ธฐ๋ถ„์ด์—ˆ์–ด! ์ฒ˜์Œ์—” "์™œ ๋ฉ€์ฉกํ•œ ์•ฑ์„ ๊ตณ์ด ์ชผ๊ฐœ์„œ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€?" ์‹ถ์—ˆ๋Š”๋ฐ, ํŒ€๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ์™€ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ '์˜๋„๋œ ๋ถ„๋ฆฌ' ๋ผ๋Š” ๊ฑธ ์•Œ๊ณ  ๋‚˜๋‹ˆ ์ •๋ง ๊นŠ์€ ๋œป์ด ์žˆ์—ˆ๊ตฌ๋‚˜ ์‹ถ๋”๋ผ.

๐Ÿ’ก ์˜ค๋Š˜์˜ ๊ตํ›ˆ: "๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ ์  ์œ ํ–‰์ด ์•„๋‹ˆ๋ผ, ์กฐ์ง์˜ ๊ทœ๋ชจ์— ๋งž๋Š” ์•„ํ‚คํ…์ฒ˜ ์„ ํƒ์ด๋‹ค. ๋…๋ฆฝ์ ์ธ Zone์œผ๋กœ ์•ฑ์„ ๊ฒฉ๋ฆฌํ•˜๋˜, assetPrefix ์™€ rewrites ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ '์šฐ์ฃผ' ๋ฅผ ์„ ๋ฌผํ•˜์ž!"

์˜ํ˜ธ ๋ฆฌ๋“œ ๋‹˜์ด ๋„๋ฉ”์ธ ์ž…์  ๋น„์œ ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด ์ฃผ์‹ค ๋•Œ, ์™œ ๊ฐ Zone์ด ์ž๊ธฐ๋งŒ์˜ ์ •์  ์ž์‚ฐ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€ ๋‹จ๋ฒˆ์— ์ดํ•ด๊ฐ€ ๊ฐ€๋”๋ผ. ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ž˜ ์งœ๋Š” ๊ฑธ ๋„˜์–ด, ํŒ€ ๊ฐ„์˜ ํ˜‘์—… ํšจ์œจ๊นŒ์ง€ ๊ณ ๋ คํ•˜๋Š” ๊ฒŒ ์ง„์งœ '์‹œ๋‹ˆ์–ด' ์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์ด๋ผ๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์–ด. ์˜ค๋Š˜ ๋„ˆ๋ฌด ๊ฑฐ์‹œ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณ ๋ฏผํ–ˆ๋”๋‹ˆ ๋จธ๋ฆฌ๊ฐ€ ๋ตํ•˜๋„ค. ํ‡ด๊ทผ๊ธธ์— ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๋‹จ๊ณจ ์„œ์ ์— ๋“ค๋Ÿฌ์„œ ์ฐจ๋ถ„ํ•˜๊ฒŒ ์ฑ… ์ข€ ๋ณด๋ฉด์„œ ๋‡Œ๋ฅผ ์‹ํ˜€์•ผ๊ฒ ์–ด. ๋‚ด์ผ์€ ๋” '์œ ์—ฐํ•œ' ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ๊ฑฐ์•ผ! ๐Ÿฃ


๐Ÿ”— ๋” ์•Œ์•„๋ณด๊ธฐ