Skip to content

Latest commit

ย 

History

History
83 lines (58 loc) ยท 5.7 KB

webpack-babel.md

File metadata and controls

83 lines (58 loc) ยท 5.7 KB

Webpack๊ณผ Babel

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ (Module Bundler)

ํ˜„๋Œ€์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์€ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ํŒŒ์ผ์„ ์—ฎ์–ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ๋ชจ๋“ˆ์€ ์„œ๋กœ ์˜์กด์„ฑ์„ ๋„๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ์ ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ์ƒ๊ธด๋‹ค.

  • ์ˆ˜๋งŽ์€ ๋ชจ๋“ˆ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?
  • ๋ชจ๋“ˆ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก HTTP ์š”์ฒญ์ด ๋งŽ์•„์งˆํ…๋ฐ, ์ด๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๊ฐ€?
  • ES6+ ์ŠคํŽ™์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?

์œ„ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋กœ ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋งŒ๋“ฆ๊ณผ ๋™์‹œ์— ES6+ ์ŠคํŽ™์„ ES5๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. ์ด๋ฏธ์ง€ ์••์ถ•, ์ตœ์†Œํ™” ๋“ฑ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค๋„ ์ œ๊ณตํ•˜๋ฉฐ ์œ ๋ช…ํ•œ ๋ฒˆ๋“ค๋Ÿฌ๋กœ๋Š” Webpack, Parcel, Rollup ๋“ฑ์ด ์žˆ๋‹ค.


ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ (Transpiler)

ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์ด๋ž€ ํŠน์ • ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋น„์Šทํ•œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํ–‰์œ„๋ฅผ ๋งํ•˜๋ฉฐ ์ด๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์ด๋‹ค. ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ES6+์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ES5 ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์‚ฌ์‹ค ES6+์˜ ๊ธฐ๋Šฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฆฌ์•กํŠธ์˜ JSX๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค๊ฑฐ๋‚˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๋“ฑ์˜ ์—ญํ• ๋„ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ES6+๋‚˜ JSX๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋กœ๋Š” ๋ฐ”๋ฒจ(Babel) ์ด ์žˆ์œผ๋ฉฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๋„๊ตฌ๋กœ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ๋‹ค. ๋ณดํ†ต ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœํ•  ๋•Œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์— ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.


Webpack

์›นํŒฉ์ด๋ž€ ์ตœ์‹  ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ด๋‹ค.

Webpack์—์„œ์˜ ๋ชจ๋“ˆ

์›นํŒฉ์—์„œ ์ง€์นญํ•˜๋Š” ๋ชจ๋“ˆ์ด๋ผ๋Š” ๊ฐœ๋…์€ ์œ„์™€ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ์ž์›์„ ์˜๋ฏธํ•œ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•˜๋ ค๋ฉด HTML, CSS, JavaScript, Images, Font ๋“ฑ ๋งŽ์€ ํŒŒ์ผ๋“ค์ด ํ•„์š”ํ•œ๋ฐ, ์ด ํŒŒ์ผ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋ชจ๋‘ ๋ชจ๋“ˆ์ด๋‹ค.

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

webpack

๐Ÿ’ก ๋นŒ๋“œ, ๋ฒˆ๋“ค๋ง, ๋ณ€ํ™˜ ๋ชจ๋‘ ๊ฐ™์€ ์˜๋ฏธ์˜ ๋‹จ์–ด์ด๋‹ค.

Webpack์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

โœ” ํŒŒ์ผ ๋‹จ์œ„์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ๊ด€๋ฆฌ

๋ณ€์ˆ˜ ์œ ํšจ ๋ฒ”์œ„์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ” ์›น ๊ฐœ๋ฐœ ์ž‘์—… ์ž๋™ํ™”

์›น ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ž‘์—…๋“ค์„ ํ•ด์•ผ ํ–ˆ๋‹ค.

  • HTML, CSS, JS ์••์ถ•
  • ์ด๋ฏธ์ง€, ํฐํŠธ ํŒŒ์ผ ์••์ถ•
  • CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ๋ณ€ํ™˜

์ด๋Ÿฌํ•œ ์ผ๋“ค์„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ์›นํŒฉ์ด๋‹ค.

โœ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น ๋ฅธ ๋กœ๋”ฉ ์†๋„์™€ ๋†’์€ ์„ฑ๋Šฅ

์„œ๋ฒ„๋กœ ์š”์ฒญํ•˜๋Š” ํŒŒ์ผ์˜ ์ˆซ์ž๋ฅผ ์ค„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ์›นํŒฉ์„ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ณ„ HTTP ์š”์ฒญ ์ˆซ์ž์˜ ์ œ์•ฝ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.


Babel๊ณผ Polyfill

๋ฐ”๋ฒจ

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

๋ฐ”๋ฒจ์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ, ES6 ์ด์ƒ์—์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ Promise, Map, Set ๊ฐ™์€ ์ „์—ญ ๊ฐ์ฒด๋“ค์ด๋‚˜ String.padStart ๋“ฑ ์ „์—ญ ๊ฐ์ฒด์— ์ถ”๊ฐ€๋œ ๋ฉ”์„œ๋“œ ๋“ฑ์€ ์ปดํŒŒ์ผ ํƒ€์ž„์˜ ์ฝ”๋“œ ๋ณ€ํ™˜์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ํด๋ฆฌํ•„์ด ํ•„์š”ํ•˜๋‹ค. ์ฆ‰, ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”๋ฒจ์„ ์ด์šฉํ–ˆ์ง€๋งŒ, ์ผ๋ถ€ ๊ธฐ๋Šฅ๋“ค์€ ํด๋ฆฌํ•„๋กœ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

ํด๋ฆฌํ•„

ํด๋ฆฌํ•„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด๋‹ค. ํด๋ฆฌํ•„์€ ๋ง ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„์ด ๋ˆ„๋ฝ๋œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋งค๊ฟ”์ฃผ๋Š”(fill in) ์—ญํ• ์„ ํ•œ๋‹ค.

ํด๋ฆฌํ•„์€ ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ฃผ์ž…ํ•œ๋‹ค.

ํด๋ฆฌํ•„ ์‚ฌ์šฉํ•˜๊ธฐ

@babel/preset-env ์‚ฌ์šฉํ•˜๊ธฐ

์ง€์›ํ•  ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด์™€ ์ผ๋ถ€ ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ฃผ์ž…ํ•ด์ค€๋‹ค.

// .babelrc
{
    "presets": [
        ["@babel/preset-env",{
            "targets": ">= 0.25%, not dead" // ์‹œ์žฅ์ ์œ ์œจ์ด 0.25%์ด์ƒ, ์—…๋ฐ์ดํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋Œ€์ƒ
        }]
    ]
}

์ฐธ๊ณ