๐ŸŒ• F-lab ๋ฉ˜ํ† ๋ง ๊ธฐ๋ก

๋ฉ˜ํ† ๋ง ์ดํ›„ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก

ํด๋ฆฌํ•„(polyfill)์ด๋ž€?

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

ํด๋ฆฌํ•„์—์„œ core-js๋ž€?

๊ธฐ์กด ํด๋ฆฌํ•„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค

  • @babel/polyfill

    • ์ „์—ญ๊ณต๊ฐ„์— ํด๋ฆฌํ•„์„ ์ฑ„์›Œ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ๊ณต๊ฐ„์˜ ์˜ค์—ผ์œผ๋กœ ํด๋ฆฌํ•„ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด๋ฏธ ๊ตฌํ˜„๋œ ํด๋ฆฌํ•„๊นŒ์ง€ ์ „๋ถ€ ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์–ด์žˆ์–ด ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋Š” ๋‹จ์ 
    • ๋ฒˆ๋“ค ํฌ๊ธฐ๋Š” ์ปค์ง€์ง€๋งŒ ์‹คํ–‰ ์‹œ์—๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฏธ๊ตฌํ˜„๋œ ๋ฌธ๋ฒ•๋งŒ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ 
    • ๋ฐ”๋ฒจ 7.4๋ฒ„์ „๋ถ€ํ„ฐ depeciated๋จ
  • @babel/plugin-transform-runtime

    • ๋ฐ”๋ฒจ์ด ES6+์˜ ๋ฌธ๋ฒ•๋“ค์„ ์ž์ฒด ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง
    • ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, Array.prototype.includes()์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋Š” ์ œ๋Œ€๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ ์กด์žฌ

๊ฐœ์„ ๋œ ํด๋ฆฌํ•„

  • core-js@3
    • ์œ„์—์„œ์˜ 2๊ฐ€์ง€ ๋ฌธ์ œ(์ „์—ญ๊ณต๊ฐ„ ์˜ค์—ผ๋ฌธ์ œ, ๋ฉ”์„œ๋“œ ๋ฌธ์ œ) ๋ชจ๋‘ ํ•ด๊ฒฐ
    • ์•„๋ž˜์™€ ๊ฐ™์ด ์›นํŒฉ์„ ํ†ตํ•œ ๋ฐ”๋ฒจ๋กœ๋”-preset-env์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.
loader: 'babel-loader',
          options: {
            presets: [
              [
                '@babel/preset-env',
                {
                  targets: '> 2%, not dead',
                  corejs: 3,
                  useBuiltIns: 'entry',
                  modules: false,
                  shippedProposals: true,
                },
              ],
            ],
          },
        },

npm์ด๋ž€

Node Packaged Manager์˜ ์•ฝ์ž๋กœ, Node.js๋กœ ๋งŒ๋“ค์–ด์ง„ ํŒจํ‚ค์ง€(๋ชจ๋“ˆ)์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํˆด์ด๋‹ค.

package.json์—์„œ dependency๋ž€

๋ง ๊ทธ๋Œ€๋กœ ์˜์กด์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, npm์„ ํ†ตํ•ด ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ dependencies ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋œ๋‹ค.

  • dependencies: ์‹ค์ œ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์šด์šฉ์— ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. โ€”save ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • devdependencies: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. โ€”save-dev ํ˜น์€ -D ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์™œ ๋‚˜๋ˆŒ๊นŒ?

  • ๊ฐ€๋…์„ฑ์˜ ์ฐจ์ด
  • ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ, devdependencies์˜ ๋ชจ๋“ˆ๋“ค์€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
(์ถ”๊ฐ€) peer dependencies

โ€˜๋™๋ฃŒโ€™์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ peer ์˜์กด์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, A ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ B ํŒจํ‚ค์ง€์˜ 17.0.0 ๋ฒ„์ „์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•  ๋•Œ, A ํŒจํ‚ค์ง€๋Š” B ํŒจํ‚ค์ง€์˜ 17.0.0์— ์˜์กดํ•œ๋‹ค๋ผ๊ณ  ํ•œ๋‹ค.
์ฆ‰, AํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ํ”„๋กœ์ ํŠธ์— BํŒจํ‚ค์ง€๋Š” 17.0.0์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”!๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ
npm 7๋ฒ„์ „๋ถ€ํ„ฐ๋Š” peer dependency์˜ ๋ฒ„์ „์ด ๋งž์ง€ ์•Š์œผ๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐ”๋ฒจ์˜ ๋™์ž‘์›๋ฆฌ

  1. (1) ํŒŒ์‹ฑ(Parsing)
  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ถ”์ƒ์ ์ธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • AST(Abstract Systax Tree; ์ถ”์ƒ๊ตฌ๋ฌธํŠธ๋ฆฌ)๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • babel-parser(bablyon์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.)๊ฐ€ ์ด ๊ณผ์ •์„ ๋‹ด๋‹นํ•œ๋‹ค.
  1. (2) ๋ณ€ํ™˜(Transformation)
  • ์ถ”์ƒ๊ตฌ๋ฌธํŠธ๋ฆฌ๋ฅผ ๋ฐ›์•„์™€ ๊ฐ ๋ธŒ๋ผ์šฐ์ €์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋‚ด์šฉ๋ฌผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…
  • babel preset/plugin์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๋Š” ๊ณผ์ •
  • ๊ฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฝ”๋“œ ๊ตฌ๋ฌธ์ด ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์–ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ์ˆ 
  1. (3) ์ฝ”๋“œ ์ƒ์„ฑ(Code Generation)
  • 2๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด ์ถ”์ƒ๊ตฌ๋ฌธํŠธ๋ฆฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์— ๋งž๋Š” ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • babel-generator์— ์˜ํ•ด ์ด๋ค„์ง€๋Š” ๊ณผ์ •

es6 ๋ชจ๋“ˆ ๋“ฑ์žฅ ์ „

html์—์„œ script ํƒœ๊ทธ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋ถ™์—ฌ์„œ ์‚ฌ์šฉ
ํŒŒ์ผ์€ ๋‹ฌ๋ผ๋„ ํ•˜๋‚˜์˜ ์ „์—ญ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

webpack์˜ ๋Œ€์ฒด์ œ, ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ๋“ค?

rollup, vite ๋“ฑ์ด ์กด์žฌํ•˜๋ฉฐ ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์ด๊ณณ์„ ์ฐธ๊ณ !!
์‹ค์ œ ํ˜„์—…์—์„œ๋Š” webpack์ด ์•„๋‹Œ vite์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋ฒˆ๋“ค๋ง ์†๋„์—์„œ ๊ฐ–๋Š” ์ด์ ์ด ํฐ๊ฐ€๋ณด๋‹ค!

webpack์˜ code splitting์ด๋ž€?

์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ๋“ค์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋ง๋œ๋‹ค. ๋ฒˆ๋“ค๋ง์€ ํ›Œ๋ฅญํ•œ ๊ธฐ๋ฒ•์ด์ง€๋งŒ, ์•ฑ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค์ด ๋˜๋ ค ๊ธด ๋กœ๋“œ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋„ ํ•œ๋‹ค. ์ด ๋•Œ, code splitting์„ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์‹œ ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๋ฒˆ๋“ค๋กœ ์ชผ๊ฐœ๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์•ฑ ์ „์ฒด ์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ ๋กœ๋“œ๋ฅผ ํ”ผํ•˜์—ฌ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„์–ด์ง„ ๋ฒˆ๋“ค ํŒŒ์ผ๋“ค์„ chunk๋ผ๊ณ  ํ•œ๋‹ค.

Promise.all๊ณผ Promise.allSettled

  • Promise.all: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. and์˜ ๊ฐœ๋…์ฒ˜๋Ÿผ ๋ชจ๋“  promise๊ฐ€ fulfilled๋˜์–ด์•ผ ์ „์ฒด๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.(ํ•˜๋‚˜๋ผ๋„ rejected๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.)
  • Promise.allSettled: all์—์„œ ํ•˜๋‚˜์˜ promise๋ผ๋„ rejected๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ES2020์— ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ํ•˜๋‚˜๊ฐ€ rejected๋˜์–ด๋„ rejected๋œ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋˜์–ด ์ „์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ์ดํ›„ ๊ฐ’๋“ค์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๋ฐ˜๋“œ์‹œ allSettled๊ฐ€ ์ƒ์œ„ํ˜ธํ™˜์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค! ์ผ๋‹จ ๋น„๊ต์  ์ตœ์‹  ๋ฌธ๋ฒ•์ด๊ธฐ์— ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜๋„ ๋”ฐ์ ธ์•ผํ•˜๊ณ  ๋ชจ๋“  ๋กœ์ง์ด ์™„๋ฃŒ๋˜์–ด์•ผ๋งŒ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋กœ์ง์˜ ๊ฒฝ์šฐ์—” all์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค.

async/await์˜ ๋‚ด๋ถ€ ๋กœ์ง

  • ๐Ÿพ Promise์— ๋Œ€ํ•ด ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•œ ํ›„ ๋‹ค์‹œ ์ž‘์„ฑ

๋ชจ๋‹ฌ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์‚ฌ์šฉ / Promise ํŒจํ„ด ์‚ฌ์šฉ์˜ ์žฅ๋‹จ์  ๋ฐ ์ฐจ์ด

  • ing