본문 바로가기
Category/Note

Babel(바벨) 이란?

by Corinee 2024. 11. 7.
728x90
반응형

Babel은 JavaScript 코드를 변환(transpile)하여 다양한 환경(예: 구형 브라우저나 구형 Node.js)에서 최신 JavaScript 문법을 사용할 수 있게 해주는 도구입니다. JavaScript 개발을 할 때, Babel을 사용하면 최신 언어 기능을 자유롭게 사용할 수 있다는 장점이 있습니다.

Babel이 필요한 이유

JavaScript는 계속해서 새로운 기능이 추가되는 언어입니다. 매년 ECMAScript(ECMA-262)라는 표준을 통해 JavaScript의 새로운 버전이 발표되는데, 최신 기능이나 문법이 발표되더라도 모든 브라우저나 환경이 이를 곧바로 지원하지 않습니다.

예를 들어, 다음과 같은 최신 기능들이 있습니다:

  • let과 const 키워드 (변수 선언)
  • 화살표 함수 (() => {})
  • async/await (비동기 프로그래밍)
  • Optional chaining (obj?.prop)
  • nullish coalescing (??)

이러한 최신 기능들은 새로운 브라우저나 최신 Node.js에서는 사용할 수 있지만, 구형 브라우저나 구형 Node.js 버전에서는 에러가 발생할 수 있습니다. Babel을 사용하면 이러한 최신 JavaScript 기능을 구형 환경에서도 사용할 수 있도록 코드가 자동 변환됩니다.

Babel의 주요 기능

  1. 코드 변환 (Transpiling)
    • Babel은 최신 JavaScript 문법을 구형 문법으로 변환해 줍니다.
    • 예를 들어, const 키워드를 var로 변환하거나, 화살표 함수(() => {})를 일반 함수 표현식으로 변환하여 구형 브라우저에서도 문제가 없도록 합니다.
    • 변환을 통해 개발자가 최신 문법을 자유롭게 사용할 수 있도록 지원합니다.
  2. 프리셋 (Presets)
    • Babel은 "프리셋"이라는 설정 모음을 제공하여, 개발자가 손쉽게 최신 문법을 변환할 수 있도록 도와줍니다.
    • 예를 들어, @babel/preset-env는 최신 JavaScript 기능을 자동으로 구형 환경에 맞춰 변환해 주는 기본적인 프리셋입니다.
    • 특정 환경(예: Node.js 버전 10, 모든 브라우저의 최신 2 버전)에 맞게 변환하도록 설정할 수도 있습니다.
  3. 폴리필 (Polyfills)
    • 최신 문법 외에도, 최신 JavaScript 기능 중에서는 구형 환경에 아예 존재하지 않는 기능들도 있습니다. 이를 위해 폴리필을 제공합니다.
    • 예를 들어, Array.includes()와 같은 메서드는 구형 브라우저에는 없는 기능입니다. Babel은 이러한 기능을 구현한 폴리필을 추가하여, 구형 환경에서도 동일한 기능을 사용할 수 있게 해줍니다.
    • Babel은 필요에 따라 폴리필을 자동으로 삽입할 수 있습니다(특히 @babel/preset-env를 사용할 때 많이 쓰입니다).
  4. 플러그인 (Plugins)
    • Babel에는 특정 기능을 변환하는 플러그인들이 있습니다. 프리셋이 여러 플러그인을 모아둔 설정이라면, 플러그인은 개별 기능에 대한 변환을 제공합니다.
    • 예를 들어, @babel/plugin-transform-arrow-functions 플러그인은 화살표 함수(() => {})를 일반 함수로 변환해 줍니다.
    • 프리셋을 사용하면 여러 플러그인을 한꺼번에 적용할 수 있지만, 특정 플러그인만 필요한 경우 개별적으로 추가할 수도 있습니다.

Babel의 설정 파일

Babel을 사용할 때는 설정 파일을 통해 필요한 프리셋과 플러그인을 지정합니다. 보통 두 가지 설정 파일이 많이 사용됩니다:

  • .babelrc: 특정 디렉토리와 그 하위 디렉토리에 적용되는 설정 파일입니다.
  • babel.config.json: 프로젝트 전체에 적용되는 설정 파일입니다. 여러 패키지로 구성된 프로젝트(모노레포)에서 사용하기에 좋습니다.

Babel의 동작 예시

예를 들어, 다음과 같은 최신 JavaScript 코드를 작성했다고 가정해 보겠습니다:

const greet = () => {
    console.log("Hello, world!");
};

Babel을 설정하면, 위 코드는 다음과 같이 변환됩니다:

var greet = function() {
    console.log("Hello, world!");
};

이제 이 코드는 화살표 함수를 지원하지 않는 구형 환경에서도 문제없이 실행됩니다.

Babel의 전체 흐름 요약

  1. 개발자는 최신 JavaScript 문법을 사용하여 코드를 작성합니다.
  2. Babel이 이 코드를 변환하여 구형 환경에서도 동작하도록 만듭니다.
  3. 필요한 경우, 특정 기능이 없는 구형 환경을 위해 폴리필을 추가합니다.

결과적으로, Babel을 사용하면 최신 JavaScript 기능과 문법을 모든 환경에서 호환 가능하게 만들어줍니다. 이를 통해 코드의 가독성과 유지 보수성을 높일 수 있으며, 다양한 환경에서 일관되게 동작하는 애플리케이션을 개발할 수 있습니다.