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

Rollup: ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์˜ ํ˜์‹ 

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 2. 21.

Rollup: ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์˜ ํ˜์‹ 

1. Rollup ์†Œ๊ฐœ

1.1 ๊ฐœ๋…

Rollup์€ JavaScript ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ES6 ๋ชจ๋“ˆ์˜ ํ‘œ์ค€์„ ์ž˜ ๋”ฐ๋ฅด๊ณ  Tree-shaking๊ณผ ๊ฐ™์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๊ฐ•์กฐํ•˜๋ฉฐ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1.2 ์œ ๋ž˜

Rollup์€ 2015๋…„ Rich Harris์— ์˜ํ•ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, ES6 ๋ชจ๋“ˆ์˜ ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฒˆ๋“ค๋Ÿฌ๋กœ ์ฃผ๋ชฉ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ๋’ค๋กœ๋„ ๊พธ์ค€ํ•œ ์—…๋ฐ์ดํŠธ์™€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋กœ ๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์„ ํ˜ธ๋˜๋Š” ๋„๊ตฌ๋กœ ์ž๋ฆฌ๋งค๊น€ํ–ˆ์Šต๋‹ˆ๋‹ค.

2. Rollup์˜ ์—ฐ๊ด€ ๊ธฐ์ˆ 

2.1 Babel

Babel์€ Rollup๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์ตœ์‹  JavaScript ๋ฌธ๋ฒ•์„ ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋™์ž‘ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

2.2 NPM (Node Package Manager)

NPM์€ Rollup์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ๋ชจ๋“ˆ์„ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

3. Rollup ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ๊ฐœ

Rollup์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

3.1 rollup-plugin-node-resolve

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ, NPM์— ๋“ฑ๋ก๋œ ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์™€ ๋ฒˆ๋“ค์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.2 rollup-plugin-commonjs

CommonJS ๋ชจ๋“ˆ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ES6 ๋ชจ๋“ˆ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

3.3 rollup-plugin-babel

Babel๊ณผ ํ†ตํ•ฉํ•˜์—ฌ Rollup์—์„œ ES6+ ์ฝ”๋“œ๋ฅผ ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3.4 rollup-plugin-terser

Rollup์ด ์ƒ์„ฑํ•œ ๋ฒˆ๋“ค์„ ์••์ถ•ํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

4. Rollup์˜ ์žฅ๋‹จ์ 

4.1 ์žฅ์ 

  • Tree-shaking: ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ES6 ๋ชจ๋“ˆ ์ง€์›: ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜์—ฌ ES6 ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„: ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ์„ค์ •์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.2 ๋‹จ์ 

  • ์„ค์ • ๋ณต์žก์„ฑ: ์ดˆ๊ธฐ ์„ค์ •์ด ๋‹ค์†Œ ๋ณต์žกํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ์— ๋น„ํ•ด ํ•™์Šต ๊ณก์„ ์ด ๋†’์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ๋ถ€์ ํ•ฉ: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Webpack๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. Rollup ์„ค์ • ์˜ˆ์ œ

์•„๋ž˜๋Š” Rollup ์„ค์ •์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

// rollup.config.js
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import babel from 'rollup-plugin-babel';

export default {
  input: 'src/main.js',
  output: {
    file: 'dist/bundle.js',
    format: 'iife'
  },
  plugins: [
    resolve(),
    commonjs(),
    babel({
      exclude: 'node_modules/**'
    })
  ]
};

์ด ์„ค์ •์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ES6 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ , ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Rollup์€ ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์„ค์ • ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Rollup ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Rollup์€ ํ˜„๋Œ€์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹น์‹ ์˜ ํ”„๋กœ์ ํŠธ์—๋„ ๋†’์€ ์ƒ์‚ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€