๊ฐœ๋ฐœ Code/์›น๊ฐœ๋ฐœ WebDev

[WebDev][Babel] Babel ์†Œ๊ฐœ: ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ธฐ

5hr1rnp 2025. 2. 16. 15:56
๋ฐ˜์‘ํ˜•

babel

1. Babel์ด๋ž€?


Babel์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ(JavaScript Compiler) ๋กœ, ์ตœ์‹  ECMAScript(ES6+) ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋‹ค.


2. Babel์ด ํ•„์š”ํ•œ ์ด์œ 


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊พธ์ค€ํžˆ ๋ฐœ์ „ํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•(์˜ˆ: let, const, async/await, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋“ฑ)์ด ์ถ”๊ฐ€๋จ. ํ•˜์ง€๋งŒ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๋Š” ์ตœ์‹  ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Babel์ด ํ•„์š”ํ•จ.

Babel์˜ ์ฃผ์š” ์—ญํ• :

โœ… ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋™์ž‘ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€ํ™˜
โœ… JSX(React์—์„œ ์‚ฌ์šฉ) ๋ฐ TypeScript ์ฝ”๋“œ๋„ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ
โœ… ์ฝ”๋“œ ์ตœ์ ํ™” ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™•์žฅ์„ ํ†ตํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ฐœ์„ 


3. Babel์˜ ํ•ต์‹ฌ ๊ฐœ๋…


(1) ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง(Transpiling)

Babel์€ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ๊ตฌ๋ฌธ์ ์œผ๋กœ ๋ณ€ํ™˜(transpile) ํ•จ. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ์ด์ „ ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•จ.

๐Ÿ’ก ์˜ˆ์ œ: ES6 ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋ณ€ํ™˜
Before (ES6 ์ฝ”๋“œ)

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

After (Babel ๋ณ€ํ™˜ ํ›„ ์ฝ”๋“œ)

"use strict";

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

์ด์ฒ˜๋Ÿผ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•จ.

(2) Babel Presets (ํ”„๋ฆฌ์…‹)

Babel์€ ํŠน์ • ๋ฌธ๋ฒ•์„ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ฆฌ์…‹(preset) ์„ ์‚ฌ์šฉํ•จ.

  • @babel/preset-env: ์ตœ์‹  ES6+ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ง€์› ๋ฒ”์œ„์— ๋งž์ถฐ ๋ณ€ํ™˜
  • @babel/preset-react: JSX ๋ฌธ๋ฒ•์„ ๋ณ€ํ™˜
  • @babel/preset-typescript: TypeScript ๋ฌธ๋ฒ•์„ ๋ณ€ํ™˜

728x90
๋ฐ˜์‘ํ˜•

4. Babel ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•


(1) Babel ์„ค์น˜

Babel์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด @babel/core, @babel/cli, @babel/preset-env ๋“ฑ์„ ์„ค์น˜ํ•ด์•ผ ํ•จ.

npm init -y  # package.json ์ƒ์„ฑ
npm install --save-dev @babel/core @babel/cli @babel/preset-env

(2) Babel ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— .babelrc ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•จ.

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

์œ„ ์„ค์ •์€ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ๋ณ€ํ™˜ํ•˜๋„๋ก Babel์— ์ง€์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•จ.

(3) Babel ์‹คํ–‰

๋ณ€ํ™˜ํ•  ํŒŒ์ผ(script.js)์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋จ.

npx babel script.js --out-file script-compiled.js
 

์ด์ œ script-compiled.js ํŒŒ์ผ์ด ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋กœ ์ €์žฅ๋จ.


5. Babel + Webpack ์—ฐ๋™


Webpack๊ณผ ํ•จ๊ป˜ Babel์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ž๋™์œผ๋กœ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ.

(1) Babel ๊ด€๋ จ ํŒจํ‚ค์ง€ ์ถ”๊ฐ€

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

(2) webpack.config.js ์„ค์ •

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
          },
        },
      },
    ],
  },
  mode: 'development',
};
 

์ด์ œ Webpack์ด .js ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋งํ•  ๋•Œ Babel์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•จ.


6. Babel๊ณผ TypeScript


Babel์€ TypeScript ์ฝ”๋“œ๋„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ.

npm install --save-dev @babel/preset-typescript
 

.babelrc ์„ค์ •์— TypeScript ํ”„๋ฆฌ์…‹ ์ถ”๊ฐ€

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

์ด์ œ Babel์„ ์‚ฌ์šฉํ•ด TypeScript ์ฝ”๋“œ๋„ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•จ.


7. Babel์˜ ํ•œ๊ณ„์™€ ๋Œ€์•ˆ


ํ•œ๊ณ„

  • Babel์€ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ๋‚ด์žฅ ๊ฐ์ฒด(์˜ˆ: Promise, Set)๋Š” ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Œ → Polyfill ํ•„์š”
  • ์ผ๋ถ€ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ

๋Œ€์•ˆ

  • SWC: Babel๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฝ”๋“œ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ
  • esbuild: ๋ฒˆ๋“ค๋ง๊ณผ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์„ ๋™์‹œ์— ์ˆ˜ํ–‰

8. ๊ฒฐ๋ก 


Babel์€ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์ž„. ํŠนํžˆ Webpack๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์‹  ์›น ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•จ.

๋ฐ˜์‘ํ˜•