곡뢀, 였λ₯˜

Babel을 μ‚¬μš©ν•˜μ—¬ js νŒŒμΌμ„ ES6 > ES5 λ°”κΏ”λ³΄μž

λ°˜μ‘ν˜•

πŸ“– Babel  κ°€μ΄λ“œ πŸš€

1. κΈ€μ˜ λͺ©μ  및 κ°œμš”

🧐 Babelμ΄λž€?

Babel은 μ΅œμ‹  JavaScript 문법을 이전 λ²„μ „μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ³€ν™˜ν•΄ μ£ΌλŠ” **트랜슀파일러(Transpiler)**λ‹€! πŸ’‘ μ΅œμ‹  ECMAScript(ES6 이상)의 κΈ°λŠ₯을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” λΈŒλΌμš°μ €μ—μ„œλ„ μ›ν™œν•˜κ²Œ 싀행될 수 μžˆλ„λ‘ μ½”λ“œλ₯Ό λ³€ν™˜ν•˜λŠ” 역할을 ν•œλ‹€. πŸ”„


πŸ€” μ™œ Babel이 ν•„μš”ν•œκ°€?

1️⃣ λΈŒλΌμš°μ € ν˜Έν™˜μ„± 문제 ν•΄κ²° 🌍 λΈŒλΌμš°μ €λ§ˆλ‹€ JavaScript 지원 λ²”μœ„κ°€ λ‹€λ₯΄λ‹€. μ΅œμ‹  JavaScript 문법(예: let, const, ν™”μ‚΄ν‘œ ν•¨μˆ˜, async/await λ“±)을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν™˜κ²½μ—μ„œλ„ μ›ν™œν•˜κ²Œ μ‹€ν–‰λ˜λ„λ‘ λ³€ν™˜ν•΄μ•Ό ν•œλ‹€.

2️⃣ μ΅œμ‹  JavaScript 문법 ν™œμš© ✨ κ°œλ°œμžλ“€μ€ μ΅œμ‹  문법을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ˜ 가독성을 높이고 μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•˜κ³  μ‹Άλ‹€! ν•˜μ§€λ§Œ λͺ¨λ“  λΈŒλΌμš°μ €κ°€ 이λ₯Ό μ§€μ›ν•˜λŠ” 것은 μ•„λ‹ˆλ―€λ‘œ Babel이 ν•„μš”ν•˜λ‹€. πŸ”§

3️⃣ μ½”λ“œ λ³€ν™˜(트랜슀파일링) πŸ”„ Babel은 μ΅œμ‹  문법을 이전 λ²„μ „μœΌλ‘œ λ³€ν™˜ν•˜μ—¬, μ½”λ“œκ°€ λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œλ„ 싀행될 수 μžˆλ„λ‘ 도와쀀닀. πŸ—οΈ


 

2. Babel의 핡심 κ°œλ…

πŸ” 트랜슀파일링(Transpiling)μ΄λž€?

Babel의 μ£Όμš” κΈ°λŠ₯은 **트랜슀파일링(Transpiling)**이닀. 즉, μ΅œμ‹  JavaScript 문법을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν™˜κ²½μ—μ„œλ„ μ‹€ν–‰ κ°€λŠ₯ν•˜λ„λ‘ μ½”λ“œλ₯Ό λ³€ν™˜ν•˜λŠ” 과정이닀.

예λ₯Ό λ“€μ–΄, λ‹€μŒ ES6 μ½”λ“œ ✨

const greet = (name) => `Hello, ${name}!`;

Babel을 μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 λ³€ν™˜λ  수 μžˆλ‹€. πŸ‘‡

var greet = function(name) {
  return "Hello, " + name + "!";
};

μ΄λ ‡κ²Œ νŠΈλžœμŠ€νŒŒμΌλ§μ„ 톡해 더 넓은 λ²”μœ„μ˜ ν™˜κ²½μ—μ„œ 싀행될 수 μžˆλ‹€. πŸš€


πŸ› οΈ ν”ŒλŸ¬κ·ΈμΈκ³Ό 프리셋

Babel은 ν”ŒλŸ¬κ·ΈμΈκ³Ό 프리셋을 μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.

πŸ”Ή ν”ŒλŸ¬κ·ΈμΈ(Plugin) → νŠΉμ •ν•œ JavaScript κΈ°λŠ₯을 λ³€ν™˜ν•˜λŠ” μ—­ν• 

  • 예: @babel/plugin-transform-arrow-functions → ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό 일반 ν•¨μˆ˜λ‘œ λ³€ν™˜ πŸ’‘

πŸ”Ή 프리셋(Preset) → μ—¬λŸ¬ 개의 ν”ŒλŸ¬κ·ΈμΈμ„ λ¬Άμ–΄ 놓은 μ„€μ • μ§‘ν•©

  • 예: @babel/preset-env → μ΅œμ‹  문법을 μžλ™μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κ°€μž₯ 일반적인 프리셋 🎯

 

3. Babel의 μ„€μ • 및 μ‚¬μš©λ²• βš™οΈ

πŸ—οΈ Babel μ„€μΉ˜

Babel을 μ‚¬μš©ν•˜λ €λ©΄ λ¨Όμ € μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€. Node.js ν™˜κ²½μ—μ„œ npm을 μ΄μš©ν•˜μ—¬ μ„€μΉ˜ν•  수 μžˆλ‹€. πŸ’»

npm install --save-dev @babel/core @babel/cli @babel/preset-env

 

πŸ“ Babel μ„€μ • 파일

Babel의 섀정은 .babelrc λ˜λŠ” babel.config.json νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ 관리할 수 μžˆλ‹€.

πŸ“Œ .babelrc 파일 예제

{
  "presets": ["@babel/preset-env"]
}

이 섀정은 μ΅œμ‹  JavaScript 문법을 λΈŒλΌμš°μ €κ°€ μ§€μ›ν•˜λŠ” λ²„μ „μœΌλ‘œ λ³€ν™˜ν•΄ μ€€λ‹€. πŸ”„

 

πŸƒ Babel CLIλ₯Ό μ΄μš©ν•œ 트랜슀파일링

섀정이 μ™„λ£Œλ˜λ©΄ Babel CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ JavaScript μ½”λ“œλ₯Ό λ³€ν™˜ν•  수 μžˆλ‹€.

npx babel src --out-dir dist

μœ„ λͺ…λ Ήμ–΄λŠ” src ν΄λ”μ˜ JavaScript νŒŒμΌμ„ λ³€ν™˜ν•˜μ—¬ dist 폴더에 μ €μž₯ν•œλ‹€. πŸ—‚οΈ


 

4. Babelκ³Ό Webpack 연동 🀝

Babel은 Webpackκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈ λ‚΄ λͺ¨λ“  JavaScript νŒŒμΌμ„ λ³€ν™˜ν•  수 μžˆλ‹€.

πŸ› οΈ Webpack μ„€μ •ν•˜κΈ°

npm install --save-dev babel-loader

πŸ“ webpack.config.js 예제

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  }
};

이제 Webpack을 μ‹€ν–‰ν•˜λ©΄ μžλ™μœΌλ‘œ Babel을 톡해 μ΅œμ‹  JavaScript μ½”λ“œκ°€ λ³€ν™˜λœλ‹€. πŸš€


 

5. Babelκ³Ό κ΄€λ ¨λœ 문제 ν•΄κ²° κ²½ν—˜ πŸ”

⚠️ import/export λ³€ν™˜ 문제

Babel은 기본적으둜 import와 export 문법을 ES5둜 λ³€ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€. 이λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ @babel/preset-env μ„€μ •μ—μ„œ modules μ˜΅μ…˜μ„ μ„€μ •ν•΄μ•Ό ν•œλ‹€.

{
  "presets": [
    ["@babel/preset-env", { "modules": "commonjs" }]
  ]
}

⚠️ async/await λ³€ν™˜ 문제

Babel은 async/await을 λ³€ν™˜ν•  수 μžˆμ§€λ§Œ, regenerator-runtime이 ν•„μš”ν•  수 μžˆλ‹€. ν•΄κ²°ν•˜λ €λ©΄ λ‹€μŒμ„ μ„€μΉ˜ν•œλ‹€.

npm install --save @babel/polyfill

그리고 μ½”λ“œμ˜ μ΅œμƒλ‹¨μ— λ‹€μŒμ„ μΆ”κ°€ν•œλ‹€.

import "@babel/polyfill";

 

6. Babel의 μ΅œμ‹  동ν–₯ 및 ν•œκ³„ 🧐

πŸ”₯ μ΅œμ‹  Babel κΈ°λŠ₯

βœ… μ΅œμ‹  ECMAScript 버전을 μ§€μ›ν•˜λŠ” 프리셋 μ—…λ°μ΄νŠΈ

βœ… μ„±λŠ₯ μ΅œμ ν™” 및 λΉŒλ“œ 속도 κ°œμ„ 

 

❌ Babel의 ν•œκ³„

🚧 Babel은 문법을 λ³€ν™˜ν•˜μ§€λ§Œ, 일뢀 κΈ°λŠ₯(Promise, fetch)은 λ³€ν™˜ν•˜μ§€ λͺ»ν•˜λ―€λ‘œ 폴리필이 ν•„μš”ν•  수 μžˆλ‹€. 🚧 Webpack, Vite λ“±κ³Ό ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό 효율적으둜 λ™μž‘ν•œλ‹€.


 

7. 결둠 및 마무리 🎯

πŸ“Œ Babel의 ν™œμš©λ²• 정리

βœ… μ΅œμ‹  JavaScript 문법을 μ‚¬μš©ν•˜λ©΄μ„œλ„ ν˜Έν™˜μ„±μ„ μœ μ§€ν•  수 μžˆλ‹€.

βœ… λ‹€μ–‘ν•œ λΈŒλΌμš°μ €μ—μ„œ λ™μΌν•œ μ½”λ“œκ°€ 싀행될 수 μžˆλ„λ‘ λ³€ν™˜ν•΄ μ€€λ‹€.

βœ… Webpackκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ ν”„λ‘œμ νŠΈ μ „λ°˜μ—μ„œ Babel을 μ μš©ν•  수 μžˆλ‹€.

 

πŸ€” μ–Έμ œ Babel이 ν•„μš”ν•œκ°€?

πŸš€ μ΅œμ‹  JavaScript 문법을 μ‚¬μš©ν•˜κ³  μ‹Άμ§€λ§Œ, λͺ¨λ“  λΈŒλΌμš°μ €μ—μ„œ λ™μž‘ν•΄μ•Ό ν•  λ•Œ πŸ› οΈ λ ˆκ±°μ‹œ μ½”λ“œμ™€ μ΅œμ‹  μ½”λ“œμ˜ ν˜Έν™˜μ„±μ„ μœ μ§€ν•΄μ•Ό ν•  λ•Œ πŸ“¦ Webpack, React, Vue λ“± μ΅œμ‹  ν”„λ ˆμž„μ›Œν¬μ™€ ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ

Babel을 적절히 ν™œμš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λ©΄μ„œλ„ λΈŒλΌμš°μ € ν˜Έν™˜μ„±μ„ 확보할 수 μžˆλ‹€. πŸŽ‰πŸ”₯

λ°˜μ‘ν˜•
μ†Œκ°œ | κ°œμΈμ •λ³΄μ²˜λ¦¬λ°©μΉ¨ | 문의

Categories