๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Front-end

Next.js ๋นŒ๋“œ ์ตœ์ ํ™” : Babel → SWC ์ „ํ™˜

๋ฌธ์ œ ์ƒํ™ฉ

  • ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์‹œ๊ฐ„์ด 1๋ถ„ 30์ดˆ๋ฅผ ์ดˆ๊ณผ
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ‘๋ชฉ ๋ฐœ์ƒ

์›์ธ ๋ถ„์„

๋นŒ๋“œ ๋กœ๊ทธ ํ™•์ธ ๊ฒฐ๊ณผ

info - Disabled SWC as replacement for Babel because of custom Babel configuration ".babelrc"

์ฃผ์š” ๋ฌธ์ œ์ :

  • .babelrc ํŒŒ์ผ๋กœ ์ธํ•œ SWC ๋น„ํ™œ์„ฑํ™”
  • 738MB ํฌ๊ธฐ์˜ node_modules
  • 1MB ์ด์ƒ์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฒˆ๋“ค
  • 200๊ฐœ ์ด์ƒ ํŽ˜์ด์ง€์˜ SSR ์„ค์ •

ํ•ด๊ฒฐ ๊ณผ์ •

1. SWC ์ปดํŒŒ์ผ๋Ÿฌ ํ™œ์„ฑํ™”

rm -f .babelrc
// next.config.js
const nextConfig = {
  // SWC ๊ฐ•์ œ ํ™œ์„ฑํ™”
  swcMinify: true,
  // ๋นŒ๋“œ ์ตœ์ ํ™”
  experimental: {
    forceSwcTransforms: true,
  },
  // ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”
  compiler: {
    removeConsole: process.env.NODE_ENV === "production",
  },
};

2. JSX ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ์ˆ˜์ •

  • SWC ์ „ํ™˜ ํ›„ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ˆ˜์ •
// ์ˆ˜์ • ์ „
<Box style={{ margin: "0px 20px" }}>-></Box>

// ์ˆ˜์ • ํ›„
<Box style={{ margin: "0px 20px" }}>→</Box>

3. ๋ฒˆ๋“ค ์ตœ์ ํ™”

  • ์›นํŒฉ ์ฒญํฌ ๋ถ„ํ•  ์„ค์ •
webpack: (config, { dev }) => {
  if (!dev) {
    config.optimization = {
      ...config.optimization,
      splitChunks: {
        chunks: 'all',
        cacheGroups: {
          vendor: {
            test: /[\\\\\\\\/]node_modules[\\\\\\\\/]/,
            name: 'vendors',
            priority: 10,
          },
          mui: {
            test: /[\\\\\\\\/]node_modules[\\\\\\\\/]@material-ui[\\\\\\\\/]/,
            name: 'mui',
            priority: 20,
          },
        },
      },
    };
  }
}

 

ETC. ์ถ”๊ฐ€ ๊ฐœ์„ ์‚ฌํ•ญ

  • ๋ฒˆ๋“ค ๋ถ„์„ ๋„๊ตฌ ์ถ”๊ฐ€
npm install --save-dev @next/bundle-analyzer

์ง€์†์  ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ npm run analyze ๋ช…๋ น์–ด ์ง€์›.

์š”์•ฝ

1. **SWC ์ปดํŒŒ์ผ๋Ÿฌ ํ™œ์„ฑํ™”**
   - .babelrc ํŒŒ์ผ ์ œ๊ฑฐ
   - next.config.js์— forceSwcTransforms ์ ์šฉ
   - JSX ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ์ˆ˜์ •

2. **๋ฒˆ๋“ค ์ตœ์ ํ™”**
   - vendor/mui ์ฒญํฌ ๋ถ„๋ฆฌ
   - ํ”„๋กœ๋•์…˜ console.log ์ œ๊ฑฐ
   - ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ… ๊ฐœ์„ 

 

๊ฒฐ๊ณผ

๊ฐœ์„  ์ „

  • local build (์•ฝ 4๋ถ„ ์†Œ์š”)

  • github action ๋‚ด build (์•ฝ 6๋ถ„ ์†Œ์š”)

๊ฐœ์„  ํ›„

  • local build (์•ฝ 1๋ถ„30์ดˆ ์†Œ์š”)

  • github action ๋‚ด build (์•ฝ 3๋ถ„ ์†Œ์š”)

 

 

๋ถ„์„

ํ•ญ๋ชฉ ๊ฐœ์„  ์ „ ๊ฐœ์„  ํ›„ ๊ฐœ์„  ๋น„์œจ
์ด ๋นŒ๋“œ ์‹œ๊ฐ„ 235.81์ดˆ 80.32์ดˆ -66% (2.9๋ฐฐ ๋น ๋ฆ„)
User Time 31.41์ดˆ 18.13์ดˆ -42% ๊ฐœ์„ 
CPU ์‚ฌ์šฉ๋ฅ  241% 254% +5% ์ฆ๊ฐ€
์ด CPU ์‹œ๊ฐ„ 110.62์ดˆ 38.63์ดˆ -65% ๊ฐœ์„ 
์ปดํŒŒ์ผ๋Ÿฌ Babel SWC -
๋ฒˆ๋“ค ๋ถ„์„ ๋ฏธ์ง€์› ์ง€์› -