logo

DowanKim

17. 폴리필

2026λ…„ 4μ›” 10일

μžλ°”μŠ€ν¬λ¦½νŠΈ

πŸ—οΈ 1. 바벨 (Babel): μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆμ—­κΈ°

바벨은 **트랜슀파일러(Transpiler)**μž…λ‹ˆλ‹€. μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ 문법(ES6+)을 κ΅¬ν˜• 엔진도 이해할 수 μžˆλŠ” ꡬ ν‘œμ€€(ES5) μ½”λ“œλ‘œ μž¬μž‘μ„±ν•΄ μ€λ‹ˆλ‹€.

  • μ—­ν• : λ¬Έλ²•μ˜ λ³€ν™˜ (Syntax Transformation)
  • μ˜ˆμ‹œ: ν™”μ‚΄ν‘œ ν•¨μˆ˜(=>)λ₯Ό 일반 ν•¨μˆ˜(function)둜 λ°”κΎΈκ±°λ‚˜, 클래슀(class)λ₯Ό ν”„λ‘œν† νƒ€μž… 기반의 ν•¨μˆ˜λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
  • μž‘μ—… μ‹œμ : κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό λ°°ν¬ν•˜κΈ° μ „, λΉŒλ“œ 단계(Webpack, Vite λ“±)μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

πŸ› οΈ 2. 폴리필 (Polyfill): λˆ„λ½λœ κΈ°λŠ₯ λ•œμ§ˆ

폴리필은 λˆ„λ½λœ μƒˆλ‘œμš΄ κΈ°λŠ₯을 κ΅¬ν˜„ν•΄ 놓은 μŠ€ν¬λ¦½νŠΈμž…λ‹ˆλ‹€. 바벨이 '문법'을 κ³ μΉœλ‹€λ©΄, 폴리필은 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 'ν•¨μˆ˜λ‚˜ λ©”μ„œλ“œ'λ₯Ό 직접 λ§Œλ“€μ–΄ λ„£μ–΄μ€λ‹ˆλ‹€.

  • μ—­ν• : API 보좩 (Feature Filling)
  • μ˜ˆμ‹œ: κ΅¬ν˜• λΈŒλΌμš°μ €μ— μ—†λŠ” Promise, Object.assign, Array.from, includes 같은 λ©”μ„œλ“œλ₯Ό 직접 μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.
  • μž‘μ—… μ‹œμ : λΈŒλΌμš°μ €μ—μ„œ μŠ€ν¬λ¦½νŠΈκ°€ λ‘œλ“œλ  λ•Œ μ‹€ν–‰λ©λ‹ˆλ‹€.

πŸ“Š 3. 바벨 vs 폴리필 ν•œλˆˆμ— 비ꡐ

ꡬ뢄바벨 (Babel)폴리필 (Polyfill)
μ„±κ²©νŠΈλžœμŠ€νŒŒμΌλŸ¬ (도ꡬ)슀크립트 (μ½”λ“œ)
처리 λŒ€μƒμƒˆλ‘œμš΄ 문법 (Syntax)μƒˆλ‘œμš΄ 객체/λ©”μ„œλ“œ (API)
λ³€ν™˜ μ˜ˆμ‹œconst β†’ var, () => β†’ functionPromise, Array.prototype.includes
μ‹€ν–‰ ν™˜κ²½κ°œλ°œ ν™˜κ²½ (Build Time)μ‚¬μš©μž λΈŒλΌμš°μ € (Runtime)

🌐 4. μ£Όμš” 폴리필 라이브러리

  1. core-js: κ°€μž₯ λŒ€μ€‘μ μΈ 폴리필 라이브러리둜, ν•„μš”ν•œ κΈ°λŠ₯만 κ³¨λΌμ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. polyfill.io: μ ‘μ†ν•œ μ‚¬μš©μžμ˜ λΈŒλΌμš°μ € 정보λ₯Ό 감지해, ν•΄λ‹Ή λΈŒλΌμš°μ €μ— λΆ€μ‘±ν•œ ν΄λ¦¬ν•„λ§Œ λ™μ μœΌλ‘œ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

πŸŽ™οΈ 기술 λ©΄μ ‘ λŒ€λΉ„ (Interview Questions)

Q1. λ°”λ²¨λ§Œ 있으면 μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ κΈ°λŠ₯을 λͺ¨λ‘ μ“Έ 수 μžˆλ‚˜μš”? (쀑급)

λ‹΅λ³€: μ•„λ‹ˆμš”, κ·Έλ ‡μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 바벨은 ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‚˜ 클래슀 같은 문법적 λ³€ν™˜μ€ μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ, Promiseλ‚˜ Symbol처럼 λŸ°νƒ€μž„μ— μ‘΄μž¬ν•˜λŠ” μƒˆλ‘œμš΄ κ°μ²΄λ‚˜ λ©”μ„œλ“œλŠ” λ³€ν™˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ΄λŸ¬ν•œ APIλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” κ΅¬ν˜• λΈŒλΌμš°μ €λ₯Ό μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ 폴리필을 ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Q2. λͺ¨λ“  폴리필을 λ‹€ λ„£μœΌλ©΄ μ„±λŠ₯에 λ¬Έμ œκ°€ μ—†μ„κΉŒμš”? (심화)

λ‹΅λ³€: λͺ¨λ“  폴리필을 λ¬΄λΆ„λ³„ν•˜κ²Œ ν¬ν•¨ν•˜λ©΄ λ²ˆλ“€ 파일의 크기가 컀져 초기 λ‘œλ”© 속도가 느렀질 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ browserslist 섀정을 톡해 지원할 λΈŒλΌμš°μ € λ²”μœ„λ₯Ό λͺ…μ‹œν•˜κ±°λ‚˜, core-js의 ν•„μš”ν•œ λͺ¨λ“ˆλ§Œ κ°€μ Έμ˜€λŠ” 방식, λ˜λŠ” polyfill.io 같은 μ„œλΉ„μŠ€λ₯Ό ν™œμš©ν•΄ μ‚¬μš©μž λ§žμΆ€ν˜• ν΄λ¦¬ν•„λ§Œ μ œκ³΅ν•˜λŠ” 것이 νš¨μœ¨μ μž…λ‹ˆλ‹€.


πŸ’‘ Tech Lead의 ν•œ 쀄 μΈμ‚¬μ΄νŠΈ

μ΅œκ·Όμ—λŠ” κ΅¬ν˜• λΈŒλΌμš°μ €(IE λ“±)의 지원이 μ€‘λ‹¨λ˜λŠ” 좔세라 ν΄λ¦¬ν•„μ˜ 비쀑이 쀄어듀고 μžˆμ§€λ§Œ, Viteλ‚˜ Webpack 같은 λΉŒλ“œ λ„κ΅¬μ—μ„œ target 섀정을 μ–΄λ–»κ²Œ ν•˜λŠλƒμ— 따라 μ„œλΉ„μŠ€μ˜ ν˜Έν™˜μ„±μ΄ κ²°μ •λ©λ‹ˆλ‹€. λ‚΄κ°€ νƒ€κ²ŸνŒ…ν•˜λŠ” μœ μ €μ˜ ν™˜κ²½μ„ λ¨Όμ € νŒŒμ•…ν•˜λŠ” 것이 μš°μ„ μž…λ‹ˆλ‹€.