2025. 8. 19. 08:16ใFront-end/JavaScript

๋ชฉ์ฐจ
1. ํธ๋์คํ์ผ๋ฌ์ ํด๋ฆฌํ์ ํ์์ฑ
2. ํธ๋์คํ์ผ๋ฌ (Transpiler)
3. ํด๋ฆฌํ (Polyfill)
4. ์ฌ์ค ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ๋ถ ์ง์ํ์ง ๋ชปํ ์๋ ์์
1. ํธ๋์คํ์ผ๋ฌ์ ํด๋ฆฌํ์ ํ์์ฑ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ๊ธฐ์ ์ผ๋ก ์๋ก์ด ์ ์(proposal)์ด ๋ฑ๋ก๋๊ณ , ๋ถ์๋๊ณ , ์ถ๊ฐ๋๋ค.
์ถ๊ฐ๋ ์ ์์ ๋ช ์ธ์์ ๋ฑ๋ก๋๋ฉฐ, JS์์ง์ ๋ง๋๋ ๊ฐ ์กฐ์ง์ด ๊ตฌํํ๋ค.
- ์ถ๊ฐ๋ ์ ์ : https://tc39.es/ecma262/
- ๋ช ์ธ์ : https://ecma-international.org/publications-and-standards/standards/ecma-262/
- ์์ง๋ณ ์ง์ ๊ธฐ๋ฅ : https://compat-table.github.io/compat-table/es6/
๋ถ๋ถ๋ณ๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฐ์ดํธ๋๋ค๋ณด๋, ๋ช ์ธ์์ ๋ฑ๋ก๋ ์ง ์ผ๋ง ์ ๋ ๊ธฐ๋ฅ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด
์์ฑํ ์ฝ๋๋ฅผ ํน์ ์์ง์์ ์ง์ํ์ง ์๋ ์ํฉ์ด ์๊ธธ ์๋ ์๋ค.
์ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ํธ๋์คํ์ผ๋ฌ์ ํด๋ฆฌํ์ด๋ค.
๋ช ์ธ์์ ์๋ก์ด ๋ฌธ๋ฒ์ด๋ ๊ธฐ์กด์ ์๋ ์๋ก์ด ๋ด์ฅ ํจ์์ ๋ํ ์ ์๊ฐ ์ถ๊ฐ๋๋๋ฐ
์๋ก์ด ๋ฌธ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ ๋๋ ํธ๋์คํ์ผ๋ฌ๊ฐ,
์๋ก์ด ๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉํ์ ๋๋ ํด๋ฆฌํ์ ์์ฑํ์ฌ
์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ ์์ง ์ง์์ด ๋์ง ์๋๋ผ๋ ๊ตฌ๋ฒ์ ์ผ๋ก ๋ณํํ์ฌ ๋์์ํฌ ์ ์๋ค.
2. ํธ๋์คํ์ผ๋ฌ (Transpiler)
์ฝ๋ ๋ฌธ๋ฒ์ ๋ณํํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ต์ JS ๋ฌธ๋ฒ์ ๊ตฌ๋ฒ์ JS ๋ฌธ๋ฒ์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ์ ์ธ ํธ๋์คํ์ผ๋ฌ ๋๊ตฌ๋ก ๋ฐ๋ฒจ(Babel)์ด ์๋ค.
๋ฐ๋ฒจ(Babel)
์ต์ JS ๋ฌธ๋ฒ์ ๊ตฌ๋ฒ์ JS ๋ฌธ๋ฒ์ผ๋ก ์ฌ์์ฑํด์ฃผ๋ ํธ๋์คํ์ผ๋ฌ ํ๋ก๊ทธ๋จ์ด๋ค.
๋ฐ๋ฒจ์ ๊ฐ๋ฐ์์ ์ปดํจํฐ์์ ๋์๊ฐ๋ฉฐ, ๋ฐ๋ฒจ์ ์คํํ๋ฉด ๊ธฐ์กด ์ฝ๋๊ฐ ๊ตฌ ํ์ค์ ์ค์ํ๋ ์ฝ๋๋ก ๋ณ๊ฒฝ๋๋ค.
์นํฉ(webpack)๊ฐ์ ๋ชจ๋ ํ๋ก์ ํธ ๋น๋ ์์คํ ์ ์ฝ๋๊ฐ ์์ ๋ ๋๋ง๋ค ์๋์ผ๋ก ํธ๋์คํ์ผ๋ฌ๋ฅผ ๋์์์ผ์ค๋ค.
2. ํด๋ฆฌํ (Polyfill)
ํธ๋์คํ์ผ๋ฌ๋ก ํด๊ฒฐ ๋ชปํ๋ ๊ธฐ๋ฅ(API/๋ฉ์๋์ ๋ถ์ฌ)์ ์ง์ ๊ตฌํํด์ ๋ฉ๊ฟ์ฃผ๋ ๋ณด์กฐ ์คํฌ๋ฆฝํธ์ด๋ค.
์ค๋๋ ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋, ํ์ค์ ์๋กญ๊ฒ ์ถ๊ฐ๋ ํจ์๋ ๋ช ์ธ์ ์ ์๋ฅผ ์ฝ๊ณ ๊ฐ๋ฐ์๊ฐ ์ง์ ํจ์๋ฅผ ๊ตฌํํด์ผํ๋ค.
๋ณ๊ฒฝ๋ ํ์ค์ ์ค์ํ ์ ์๋๋ก ๊ธฐ์กด ํจ์๋ฅผ ์์ ํ๊ฑฐ๋ ์๋ก ๊ตฌํํ ํจ์ ์คํฌ๋ฆฝํธ๋ฅผ ํด๋ฆฌํ์ด๋ผ๊ณ ํ๋ค.
ํด๋ฆฌํ ๋ชจ์์ด ๋ช ๊ฐ ์๋ค.
- core js : ํ์ค์ ์ผ๋ก ์ฌ์ฉ๋๋ Polyfill๋ค์ด ๋ชจ์ฌ์์ (import 'core-js/acture';)
polyfill.io : ์ ๋ช ํ๋๋ฐ 2024๋ ์ ์ค๊ตญ ๊ธฐ์ ์ด ์ธ์ํ ๋ค ๊ณต๊ฒฉ์ด ๋ฐ์ํด์ ์ด์ ๋ชป ์ด๋ค- Fastly Polyfill
- cdnjs
ํด๋ฆฌํ์ ์ฌ์ฉํ๋ฉด ํญ๋์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๋ถ๋ฌ์์ผ ํ๋ JS ์ฝ๋๊ฐ ๋ง์์ง๋ค๋ ๋จ์ ์ด ์๋ค.
์คํํด์ผํ๋ Polyfill ์คํฌ๋ฆฝํธ๊ฐ ๋ง์์ง์๋ก ์น ์๋น์ค ์ฑ๋ฅ์ด ๋๋น ์ง๋ค๋ ๊ฒ์ด๋ค.
ํ์ํ ํด๋ฆฌํ ์คํฌ๋ฆฝํธ๋ง ์ ํ์ ์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์๋ ๋ฐฉ๋ฒ๋ค์ด ์๋ค.
- @babel/preset-env ์ฌ์ฉํ๊ธฐ
- User-agent์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์คํฌ๋ฆฝํธ ์์ฑํ๊ธฐ
1. @babel/preset-env
preset์ด ๋ธ๋ผ์ฐ์ ๋ชฉ๋ก์ ๋ฐ๋ผ ์๋์ผ๋ก ํ์์๋ ํด๋ฆฌํ์ ์ ๊ฑฐํด์ค๋ค.
module.exports = {
presets: [
['@babel/preset-env', { targets: { ie: 11 }],
],
/* ๊ธฐํ ์ค์ */
};
์น ํ์ด์ง๊ฐ Internet Explorer 11์ ์ง์ํ๋ค๋ฉด ์์๊ฐ์ด babel.config.js๋ฅผ ์ค์ ํ ์ ์๋ค.
target์ defaults๋ก ๋ณ๊ฒฝํ๋ฉด ํจ์ฌ ์ ์ 25๊ฐ์ ํด๋ฆฌํ์ด ํฌํจ๋๋ค.
2. User-agent
Babel์ ์ค์ ํด๋ ๋ถํ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ด๋ ค๋ฐ๋ ๊ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ค.
User-agent์ ๋ฐ๋ผ์ ๋์ ์ผ๋ก ํด๋ฆฌํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๋ค.
Fastly Polyfill๊ณผ ๊ฐ์ ์๋น์ค๋ฅผ ํตํด ๋์ ํด๋ฆฌํ์ ์ ์ฉํ ์ ์๋ค.
4. ์ฌ์ค ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ๋ถ ์ง์ํ์ง ๋ชปํ ์๋ ์์
transpiler์ polyfill์ด ๋ญ์ง ์ด์ฌํ ๋ดค์ง๋ง, ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ธกํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๋ ์ด๋ ต๋ค.
๊ทธ๋์ ๋ง์ ์๋น์ค๋ค์ด ์ต์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ ํด๋๊ณ , ๊ทธ ์์์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํธ์ด๋ค.
์ฐธ๊ณ
https://ko.javascript.info/polyfills
ํด๋ฆฌํ
ko.javascript.info
https://toss.tech/article/smart-polyfills
๋๋ํ๊ฒ ๋ธ๋ผ์ฐ์ Polyfill ๊ด๋ฆฌํ๊ธฐ
ํ๋์ ์ธ JavaScript๋ฅผ ์ฐ๋ฉด์๋ ๋์ ๋ฒ์์ ๊ธฐ๊ธฐ๋ฅผ ์ง์ํ๊ธฐ ์ํ Polyfill์ ์ด๋ป๊ฒ ๋๋ํ๊ฒ ์ค์ ํ ์ ์๋์ง ์๊ฐํฉ๋๋ค.
toss.tech
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| B13 : ์ ๊ทผ์ ํ๋กํผํฐ (Accessor Property) (0) | 2025.08.19 |
|---|---|
| B12 : ๊ฐ์ฒด (0) | 2025.08.19 |
| B11 : ํจ์ ๋ด์ฅ ๋ฉ์๋ (1) | 2025.08.17 |
| B10 : ํจ์์ this ํค์๋ (8) | 2025.08.16 |
| B9 : ํจ์์ ํจ์์ ์ ์ธ (6) | 2025.08.15 |
GitHub