์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…: ๋™์  ๋กœ๋”ฉ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์‹ฌ์ธต ๋ถ„์„ | MLOG | MLOG ); }

์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ, `HeavyModal`์˜ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ "์ด์šฉ ์•ฝ๊ด€ ๋ณด๊ธฐ" ๋ฒ„ํŠผ์„ ์ฒ˜์Œ ํด๋ฆญํ•  ๋•Œ๋งŒ ์„œ๋ฒ„์—์„œ ์š”์ฒญ๋ฉ๋‹ˆ๋‹ค.

3. ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํ”Œ๋ฆฌํŒ… (๋ฒค๋” ์ฒญํฌ)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋Š” ์ข…์ข… `node_modules`์˜ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: React, Lodash, D3.js, Moment.js)์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ์ž์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์ž์ฃผ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋“ค์„ ๋ณ„๋„์˜ "๋ฒค๋”(vendor)" ์ฒญํฌ๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ์žฅ๊ธฐ์ ์ธ ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ์˜ ์ด์ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐฐํฌํ•  ๋•Œ, ์‚ฌ์šฉ์ž๋Š” ์ž‘๊ณ  ๋ณ€๊ฒฝ๋œ ์•ฑ ์ฒญํฌ๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋” ํฐ ๋ฒค๋” ์ฒญํฌ๋Š” ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์—์„œ ์ง์ ‘ ์ œ๊ณต๋  ์ˆ˜ ์žˆ์–ด, ๋ฒˆ๊ฐœ์ฒ˜๋Ÿผ ๋น ๋ฅธ ํ›„์† ํŽ˜์ด์ง€ ๋กœ๋“œ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

Webpack(์˜ `SplitChunksPlugin`) ๋ฐ Vite์™€ ๊ฐ™์€ ํ˜„๋Œ€ ๋ฒˆ๋“ค๋Ÿฌ๋“ค์€ ์ด ์ ์— ๋Œ€ํ•ด ๋งค์šฐ ๋˜‘๋˜‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ข…์ข… ๋ชจ๋“ˆ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒค๋” ์ฒญํฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ตœ์†Œํ•œ์˜ ์„ค์ •๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Webpack splitChunks ์„ค์ • ์˜ˆ์ œ:


// webpack.config.js
module.exports = {
  // ... ๋‹ค๋ฅธ ์„ค์ •๋“ค
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[/]node_modules[/]/,
          name: 'vendors',
          chunks: 'all',
        },
      },
    },
  },
};

์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํšจ๊ณผ: ์˜ํ–ฅ ์ธก์ •ํ•˜๊ธฐ

์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ก ์ ์ธ ์—ฐ์Šต์— ๊ทธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ์„ ์ง์ ‘์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ์‹ค์งˆ์ ์ด๊ณ  ์ธก์ • ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๊ธฐ๋ฒ• ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€

๊ธฐ๋ณธ์„ ๋งˆ์Šคํ„ฐํ–ˆ๋‹ค๋ฉด, ๋” ๊ณ ๊ธ‰ ๊ธฐ์ˆ ๋กœ ๋กœ๋”ฉ ์ „๋žต์„ ๋”์šฑ ๋‹ค๋“ฌ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ฆฌํŽ˜์นญ(Prefetching)๊ณผ ํ”„๋ฆฌ๋กœ๋”ฉ(Preloading)

๋™์  ๋กœ๋”ฉ์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ƒˆ ์ฒญํฌ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Webpack๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋Š” "๋งค์ง ์ฝ”๋ฉ˜ํŠธ"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค:


// ์ด ๋ชจ๋“ˆ์ด ํ‰๊ฐ€๋  ๋•Œ ๋Œ€์‹œ๋ณด๋“œ ์ฝ”๋“œ๋ฅผ ํ”„๋ฆฌํŽ˜์น˜ํ•ฉ๋‹ˆ๋‹ค
const DashboardPage = lazy(() => 
  import(/* webpackPrefetch: true */ './pages/DashboardPage')
);

๋ฒˆ๋“ค ๋ถ„์„๊ธฐ๋กœ ์Šคํ”Œ๋ฆฌํŒ… ์ง€์  ์‹๋ณ„ํ•˜๊ธฐ

๋ฌด์—‡์„ ๋ถ„ํ• ํ•ด์•ผ ํ• ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ถ”์ธกํ•˜์ง€ ๋ง๊ณ  ๋ถ„์„ํ•˜์„ธ์š”! `webpack-bundle-analyzer` ๋˜๋Š” `source-map-explorer`์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๋ฒˆ๋“ค์˜ ๋Œ€ํ™”ํ˜• ํŠธ๋ฆฌ๋งต ์‹œ๊ฐํ™”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ถ„ํ• ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ข‹์€ ํ›„๋ณด์ธ ๊ฐ€์žฅ ํฐ ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฆ‰์‹œ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์›Œํ„ฐํด ํ”ผํ•˜๊ธฐ

ํ•œ ์ฒญํฌ๊ฐ€ ๋กœ๋“œ๋˜์–ด์•ผ ๋‹ค๋ฅธ ์ฒญํฌ์˜ ๋กœ๋”ฉ์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๋™์  ์ž„ํฌํŠธ ์ฒด์ธ์„ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ฒญํฌ์˜ ๋กœ๋”ฉ์„ ๋ณ‘๋ ฌ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ์ด ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜์„ธ์š”.

๊ฒฐ๋ก : ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค

์ตœ์ ์˜ ์›น ์„ฑ๋Šฅ์„ ์ถ”๊ตฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์€ ํ‹ˆ์ƒˆ ์ตœ์ ํ™”์—์„œ ๋ชจ๋“  ์ค‘์š”ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ‘œ์ค€์ ์ด๊ณ  ํ•„์ˆ˜์ ์ธ ๊ด€ํ–‰์œผ๋กœ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋†€๋ฆฌ์‹์—์„œ ์˜จ๋””๋งจ๋“œ ๋กœ๋”ฉ ์ „๋žต์œผ๋กœ ์ „ํ™˜ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ„, ๋ฐ์ดํ„ฐ ๋ฐ ์žฅ์น˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์กด์ค‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด์ ์€ ๋ช…ํ™•ํ•˜๊ณ  ์„ค๋“๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

ํ˜„๋Œ€์ ์ธ ๋„๊ตฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์› ๋•๋ถ„์— ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์Šคํ”Œ๋ฆฌํŒ…์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ ์–ด๋А ๋•Œ๋ณด๋‹ค ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋ฐ”๋กœ ํ–‰๋™ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์„ ๋ถ„์„ํ•˜๊ณ , ๊ฐ€์žฅ ํฐ ์˜์กด์„ฑ๊ณผ ๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์ฒซ ๋ฒˆ์งธ ์Šคํ”Œ๋ฆฟ ์ง€์ ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ์‚ฌ์šฉ์ž์™€ ์„ฑ๋Šฅ ์ง€ํ‘œ๊ฐ€ ๋‹น์‹ ์—๊ฒŒ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.