ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์™€ ํด๋ฆฌํ•„

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

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์™€ ํด๋ฆฌํ•„์˜ ํ•„์š”์„ฑ

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

3. ํด๋ฆฌํ•„ (Polyfill)

4. ์‚ฌ์‹ค ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ „๋ถ€ ์ง€์›ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Œ


1. ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์™€ ํด๋ฆฌํ•„์˜ ํ•„์š”์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ •๊ธฐ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์ œ์•ˆ(proposal)์ด ๋“ฑ๋ก๋˜๊ณ , ๋ถ„์„๋˜๊ณ , ์ถ”๊ฐ€๋œ๋‹ค.

์ถ”๊ฐ€๋œ ์ œ์•ˆ์€ ๋ช…์„ธ์„œ์— ๋“ฑ๋ก๋˜๋ฉฐ, JS์—”์ง„์„ ๋งŒ๋“œ๋Š” ๊ฐ ์กฐ์ง์ด ๊ตฌํ˜„ํ•œ๋‹ค.

 

๋ถ€๋ถ„๋ณ„๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ์—…๋ฐ์ดํŠธ๋˜๋‹ค๋ณด๋‹ˆ, ๋ช…์„ธ์„œ์— ๋“ฑ๋ก๋œ ์ง€ ์–ผ๋งˆ ์•ˆ ๋œ ๊ธฐ๋Šฅ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด

์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํŠน์ • ์—”์ง„์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์™€ ํด๋ฆฌํ•„์ด๋‹ค.

๋ช…์„ธ์„œ์— ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•์ด๋‚˜ ๊ธฐ์กด์— ์—†๋˜ ์ƒˆ๋กœ์šด ๋‚ด์žฅ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ์ถ”๊ฐ€๋˜๋Š”๋ฐ

 

์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์„ ๋•Œ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๊ฐ€,

์ƒˆ๋กœ์šด ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ํด๋ฆฌํ•„์„ ์ž‘์„ฑํ•˜์—ฌ 

 

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์—”์ง„ ์ง€์›์ด ๋˜์ง€ ์•Š๋”๋ผ๋„ ๊ตฌ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋™์ž‘์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


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๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Babel playground

 

target์„ defaults๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ํ›จ์”ฌ ์ ์€ 25๊ฐœ์˜ ํด๋ฆฌํ•„์ด ํฌํ•จ๋œ๋‹ค.

 

2. User-agent

Babel์„ ์„ค์ •ํ•ด๋„ ๋ถˆํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š” ๊ฒƒ์€ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

User-agent์— ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ํด๋ฆฌํ•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Fastly Polyfill๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๋™์  ํด๋ฆฌํ•„์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 


4. ์‚ฌ์‹ค ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ „๋ถ€ ์ง€์›ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Œ 

transpiler์™€ polyfill์ด ๋ญ”์ง€ ์—ด์‹ฌํžˆ ๋ดค์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์˜ˆ์ธกํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.

๊ทธ๋ž˜์„œ ๋งŽ์€ ์„œ๋น„์Šค๋“ค์ด ์ตœ์†Œ ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „์„ ์ •ํ•ด๋‘๊ณ , ๊ทธ ์•ˆ์—์„œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŽธ์ด๋‹ค.

 

 

 

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•