Front-end

webpack(์›นํŒฉ)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

 

 


 

๐Ÿ™‹โ€โ™‚๏ธ ์ข…์ข… React, vue์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด ์›น์„ ๋งŒ๋“ค ๋•Œ, webpack์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋งŽ์ด ๋ณด์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

web-pack์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณผ๋•Œ๋งˆ๋‹ค, '์Œ, web-pack์€ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋‹ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ค‘์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฒ ์ง€' ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๋„˜์–ด๊ฐ”์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ„๋‹จํžˆ ๋ฌด์—‡์„ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ์ง€ ์•Œ๊ณ  ๊ฐ€๋Š” ๊ฒƒ ๋˜ํ•œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ webpack ์ด๋ž€ ๋ฌด์Šจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ผ๊นŒ์š”?

webpack์— ๋Œ€ํ•œ ์œ„ํ‚ค๋ฐฑ๊ณผ์˜ ์„ค๋ช…์„ ๋ณด๋ฉด,

์›นํŒฉ(Webpack ๋˜๋Š” webpack)์€ ์˜คํ”ˆ ์†Œ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JS) ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ด๋‹ค.

์›นํŒฉ์€ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์ทจํ•˜์—ฌ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๋Œ€ํ‘œํ•˜๋Š” ์ •์  ์ž์‚ฐ๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค.

์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ,

์ฆ‰, webpack์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ? web-pack๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ์š”?

์›น ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„์„ ๊ฐœ๋ฐœ ํ•  ๋•Œ, javascript๋ฅผ ์ด์šฉํ•ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ํšจ๊ณผ๋ฅผ ๋„ฃ์–ด ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์›น์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ์„œ ๋งŒ๋“ค์–ด์ง„ jsํŒŒ์ผ๋“ค ์ค‘ ์ค‘๋ณต๋˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋Š” ํŒŒ์ผ๋“ค๋ผ๋ฆฌ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์–ด ์†Œ์Šค์ฝ”๋“œ์˜ ๊ทœ๋ชจ๋ฅผ ์ค„์ด๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ข‹๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ๋ชจ๋“ˆํ™”๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒŒ์ผ๋“ค์„ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ(bundler), ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํ‚น ๋น„์šฉ ๊ฐ์†Œ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

bundler

๐Ÿ‘‰ ๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋กœ์„œ Webpack์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„๊นŒ์š”?

๋ชจ๋“ˆ๋ฒˆ๋“ค๋Ÿฌ๋กœ webpack๋ฟ ์•„๋‹ˆ๋ผ Browsify, Grunt, Gulp๋“ฑ ๋งŽ์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ,

webpack์˜ ์ˆ˜ํ–‰๋Šฅ๋ น(Performance)๊ฐ€ ๋›ฐ์–ด๋‚˜ ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ Web-pack์˜ ์ฃผ์š” ๊ฐœ๋…

1. Entry

  • ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘์ ์„ ์›นํŒฉ์—์„œ๋Š” ์—”ํŠธ๋ฆฌ(Entry)๋ผ๊ณ  ํ•œ๋‹ค.
  • ์›นํŒฉ์€ ์—”ํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋กœ๋”ฉํ•˜๊ณ  ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ๋Š”๋‹ค.

2. Output

  • ์—”ํŠธ๋ฆฌ์— ์„ค์ •ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹œ์ž‘์œผ๋กœ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š”๋‹ค.
  • ๊ทธํ›„ ๋ฒˆ๋“ค๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ฒ˜๋ฆฌํ•  ์œ„์น˜๋ฅผ output์— ๊ธฐ๋กํ•œ๋‹ค.

3. Loader

  • ์›นํŒฉ์€ ์˜ค์ง JavaScript์™€ Json๋งŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋กœ๋”๋Š” ๋‹ค๋ฅธ Type์˜ ํŒŒ์ผ(img, font, stylesheet ๋“ฑ)์„ ์›นํŒฉ์ด ์ดํ•ดํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ ์‹œํ‚ค๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.

4. Plugin

  • ๋กœ๋”๊ฐ€ ํŒŒ์ผ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋ฒˆ๋“ค๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋กœ๋”๊ฐ€ ๋ณ€ํ™˜ํ•˜๋Š” ๋™์•ˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ (bundle optimization, asset management and injection of environment)๊ณผ ๊ฐ™์€ ์ผ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ˜„ ์ž ์ด์ œ webpack์˜ ๊ธฐ๋Šฅ์„ ์•Œ์•˜๊ธฐ ๋•Œ๋ฌธ์—, webpack์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณผ ๋•Œ๋งˆ๋‹ค, '์•„ ์ด๊ฒƒ์€ ๋ชจ๋“ˆ๋ฒˆ๋“ค๋Ÿฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ตฌ๋‚˜'๋ผ๋Š” ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•˜์‹  ๊ฒƒ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”!

๋ฐ˜์‘ํ˜•

'Front-end' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[VueJS] NuxtJS๋ฅผ ํ†ตํ•ด VueJS ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ (feat. Typecript)  (0) 2020.06.21