๋ฉํ ๋ง 6๋ฒ์งธ
๐ 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) ํ์ฑ(Parsing)
- ์์ค์ฝ๋๋ฅผ ํตํด ์ถ์์ ์ธ ํํ์ ์ฝ๋๋ก ๋ณํํ๋ ๊ณผ์
- AST(Abstract Systax Tree; ์ถ์๊ตฌ๋ฌธํธ๋ฆฌ)๋ก ์ฝ๋๋ฅผ ๋ณํํ๋ค.
- babel-parser(bablyon์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.)๊ฐ ์ด ๊ณผ์ ์ ๋ด๋นํ๋ค.
- (2) ๋ณํ(Transformation)
- ์ถ์๊ตฌ๋ฌธํธ๋ฆฌ๋ฅผ ๋ฐ์์ ๊ฐ ๋ธ๋ผ์ฐ์ ์ ํ๊ฒฝ์ ๋ง๋ ๋ด์ฉ๋ฌผ๋ก ๋ณํํ๋ ์์
- babel preset/plugin์ ์ํด ์ฒ๋ฆฌ๋๋ ๊ณผ์
- ๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋ ๊ตฌ๋ฌธ์ด ์ด๋ป๊ฒ ๋ฐ๋์ด์ผํ๋์ง์ ๋ํ ๋ด์ฉ์ ๊ธฐ์
- (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