Bundler

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • Bundler

  • Bundler Tools

    • Parcel

    • webpack

    • rollup

Bundler

๐Ÿ“– Bundler ๋ฌด์—‡์ธ๊ฐ€?

  • ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ์ผ๋ถ€ ํ•˜๋“œ์›จ์–ด์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” Package์ด๋‹ค.

  • ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ๋“ค์— ๋Œ€ํ•ด ์˜์กด์„ฑ(์—ฐ๊ด€) ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ทธ๋ฃน(=๋ฒˆ๋“ค)์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒŽ Bundler์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ

์›น์˜ ์ดˆ์žฅ๊ธฐ ๋•Œ๋Š” ์›น์‚ฌ์ดํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ง€๊ธˆ๊ณผ ๊ฐ™์ด ์–ด๋งˆ์–ด๋งˆํ•˜์ง€ ์•Š์•˜๋‹ค. ์›น์„ ๊ตฌ์„ฑํ•˜๋Š” HTML์ด๋‚˜ JavaScript ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ง€๊ธˆ์— ๋น„ํ•ด์„œ ํ›จ์”ฌ ์ž‘์•˜๊ณ , ์„œ๋น„์Šค์˜ ์œ ์ง€๋ณด์ˆ˜๋„ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜.. ์ ์  ๊ธฐ์ˆ ์ด ๋ฐœ๋‹ฌํ•˜๋ฉด์„œ ํŒŒ์ผ ํ•˜๋‚˜ ๋‹น ์ฝ”๋“œ์˜ ์–‘๊ณผ ์›น์„ ๊ตฌ์„ฑํ•˜๋Š” ํŒŒ์ผ์˜์ˆ˜ ๋˜ํ•œ ์ปค์ง€๊ฒŒ ๋œ๋‹ค. ํ•˜๋‚˜์˜ ์›น์„œ๋น„์Šค์— ๋งŽ๊ฒŒ๋Š” ์ˆ˜์ฒœ๊ฐœ์˜ JavaScript ํŒŒ์ผ์„ ๋‹ค๋ฃจ๊ฒŒ ๋˜๋ฉด์„œ ์‚๊ฑฑ๊ฑฐ๋ฆฌ๋Š” ์†Œ๋ฆฌ๊ฐ€ ๋“ค๋ ค์˜ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

  • ํŒŒ์ผ๊ฐ„์˜ ์ค‘๋ณต๋œ ์ด๋ฆ„ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์ถฉ๋Œ

    • ๋Œ€๊ทœ๋ชจ ์›นํŽ˜์ด์ง€์˜ ๊ฒฝ์šฐ, ํ•œ์‚ฌ๋žŒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ์‚ฌ๋ฆผ์ด ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ•˜๋ฏ€๋กœ ์„œ๋กœ ๋งŒ๋“  ํ•จ์ˆ˜๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์ด ๊ฒน์น˜๋Š” ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์–ธ์ œ ์–ด๋””์„œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚ ์ง€ ๋ชจ๋ฅด๋Š” ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.

  • ํŒŒ์ผ ์ „์†ก ์†๋„ ๋ฌธ์ œ

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

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

โ‡’ ์œ„์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์›น ์—ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ "ํ•˜๋‚˜๋กœ ๋ฌถ๋Š”" ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

Bundler๋Š” ์–ด๋–ค ์ผ์„ ํ•˜๋Š”๊ฐ€?

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ํŒŒ์ผ์„ "ํ•˜๋‚˜๋กœ ๋ฌถ๋Š”" ๊ธฐ๋Šฅ

    • ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ฐ ํŒŒ์ผ ๋ณ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ํ•œ๋ฒˆ์˜ ์š”์ฒญ์œผ๋กœ ๋ชจ๋“  ํŒŒ์ผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ๋ชจ๋“ˆ์ด ๋ถˆ๋Ÿฌ์™€์ง€๊ณ  ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ด์ค€๋‹ค.

  • ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ ์—ญํ™œ๋„ ๊ฒธํ•œ๋‹ค.

Bundler Tools

๐Ÿ› ๏ธ Parcel

  • ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์‹ฑ์œผ๋กœ ๋ถˆ๊ฝƒ ํŠ€๊ฒŒ ๋น ๋ฅธ ์„ฑ๋Šฅ ์ด๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ฉ”์ธ ๋ฌธ๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ด ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์ฃผ์žฅํ•˜๊ธธ webpack๋ณด๋‹ค 2๋ฐฐ ๊ฐ€๋Ÿ‰ ๋น ๋ฅธ ์†๋„์˜ ๋ฒˆ๋“ค๋ง์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

    • ์žฅ์ 1 : webpack์˜ ๊ท€์ฐฎ์€ ์ดˆ๊ธฐ ์„ค์ •(webpack.config.js)๊ณผ ๊ฐ™์€ ์„ค์ •์ด ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ

    • ์žฅ์ 2 : ๋‹จ์ˆœํžˆ ์„ค์น˜ํ•˜๊ณ  ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ๋ช…๋ นํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํฐ ์žฅ์ 

    • ์žฅ์ 3 : ์†Œ๊ทœ๋ชจ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๋ฒˆ๋“ค๋Ÿฌ

๐Ÿ› ๏ธ webpack

  • 2012๋…„๋„์— ์ถœ์‹œํ•œ ํ˜„์žฌ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฒˆ๋“ค๋Ÿฌ

  • ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€์ธ CRA(create-react-app)์— ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜์–ด์žˆ๋Š” ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ”๋กœ Webpack

    • ์žฅ์  : ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํฌ๊ณ  ์˜ค๋ž˜๋œ ๋งŒํผ ์ˆ˜๋งŽ์€ ์„œ๋“œํŒŒํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๋‹จ์  : ์ดํ›„ ์ถœ์‹œ๋œ ๋ฒˆ๋“ค๋Ÿฌ๋“ค๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฐ ์ฒ˜๋ฆฌ์†๋„ ๊ทธ๋ฆฌ๊ณ  ๋ฒˆ๊ฑฐ๋กœ์šด ํ™˜๊ฒฝ ์„ธํŒ…

๐Ÿ› ๏ธ rollup

  • webpack๊ณผ ์œ ์‚ฌํ•œ ๋ฒˆ๋“ค๋Ÿฌ

  • Webpack๊ณผ Parcel์˜ ๊ฒฝ์šฐ ์ž์ฒด ๋กœ๋”๋ฅผ ํ†ตํ•ด commonJSํ˜•ํƒœ(require()ํ˜•ํƒœ)๋กœ ๋ฒˆ๋“ค๋ง์ด ์ง„ํ–‰๋˜์ง€๋งŒ, Rollup์˜ ๊ฒฝ์šฐ ES๋ชจ๋“ˆ(es6์˜ import, export)๋กœ ๋ฒˆ๋“คํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์žฅ์  : ๋™์›๋ฆฌ์— ๋”ฐ๋ผ ์ค‘๋ณต์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ์šฉ๋Ÿ‰์ด ํฐ webpack์— ๋น„ํ•ด ์ค‘๋ณต์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์ž์ฒด ์šฉ๋Ÿ‰์ด ์ž‘๋‹ค.

    • ๋‹จ์  : entry(in, out)์ด ๋งŽ์•„์งˆ ์ˆ˜๋ก ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  plugin์˜ ์„ค์ •์ด ์ž์œ ๋กญ์ง€ ๋ชปํ•˜๋‹ค.

โœ๐Ÿป Bundler Tools์— ๋Œ€ํ•œ ๋‚˜์˜ ์ƒ๊ฐ

  • node.js ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์„ ํ•ด๋ณธ์ ์ด ์—†๋‹ค. parcel ์„ค์น˜ํ•˜๊ณ  ์„ธํŒ…ํ•ด๋ณด๋ฉด์„œ ์ฒ˜์Œ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์ ‘ํ•ด๋ณธ๋‹ค. webpack ๋‹จ์–ด๋Š” ๋งŽ์ด ๋“ค์–ด๋ดค์ง€๋งŒ, ์ด๊ฒŒ ๋ฒˆ๋“ค๋Ÿฌ์ธ์ง€๋„ ๋ชฐ๋ž๋‹ค

  • Parcel,webpack,rollup, ์ •๋ฆฌํ•œ 3๊ฐ€์ง€ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์ด๊ฒƒ ๋ง๊ณ ๋„ ์ƒˆ๋กœ์šด ๋ฒˆ๋“ค๋Ÿฌ๋“ค์ด ์ƒ๊ฒจ๋‚˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ค‘์š”ํ•œ ๊ฑด ๋ฒˆ๋“ค๋Ÿฌ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๋งˆ๋‹ค ์•Œ๋งž์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์“ฐ๋Š”๊ฒŒ ํ•ต์‹ฌ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋ฒˆ๋“ค๋Ÿฌ์˜ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•ด๋ณด์ธ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

Last updated