ES6 모듈 vs CommonJS: 차이점과 선택 가이드

KUKJIN LEE's profile picture

KUKJIN LEE3개월 전 작성

ES6 모듈과 CommonJS는 가장 널리 사용되는 두 가지 모듈 시스템입니다.

 

결론부터 얘기하자면..

브라우저와 서버를 모두 지원하는 ES6 모듈을 사용하는 것이 좋습니다. Node.js, Express.js 환경에서는 CommonJS가 기본이지만 프로젝트 요구 사항에 맞는 모듈 시스템을 선택하여 효율적인 개발을 하는 것이 좋습니다. (하지만 Legacy 코드 이외에서 ES6가 아닌 모듈을 본적이 없습니다.)

 

  1. ES6 모듈 (ECMAScript 2015+) ES6 모듈은 최신 자바스크립트 표준의 일부로, 정적인 모듈 로딩 방식을 사용합니다. importexport 키워드를 통해 모듈 간의 의존성을 명확하게 정의할 수 있습니다.

 

// module1.js
export const greet = () => console.log("Hello, ES6 Modules!");

// main.js
import { greet } from './module1.js';
greet();

 

특징:

  • 정적 로딩: 컴파일 타임에 모듈의 구조를 파악합니다.

  • 엄격 모드: 자동으로 엄격 모드('use strict')가 적용됩니다.

  • 트리 셰이킹: 사용되지 않는 코드를 제거하여 최적화할 수 있습니다.

  • 브라우저 지원: 최신 브라우저와 트랜스파일러(Babel 등)를 통해 쉽게 사용할 수 있습니다.

 

2. CommonJS CommonJS는 주로 Node.js 환경에서 사용되며, 동적인 모듈 로딩 방식을 사용합니다. requiremodule.exports를 통해 모듈을 정의하고 로드합니다.

 

// module1.js
const greet = () => console.log("Hello, CommonJS!");
module.exports = greet;

// main.js
const greet = require('./module1');
greet();

 

특징:

  • 동적 로딩: 런타임에 모듈을 로드합니다.

  • 유연성: Node.js 환경에서 비동기적 I/O와 잘 맞습니다.

  • 단일 객체 내보내기: module.exports를 통해 모듈 전체를 내보낼 수 있습니다.

  • 서버사이드 중심: 주로 서버사이드 자바스크립트에서 사용됩니다.

 
 

특징

 

ES6 모듈

 

CommonJS

 

로딩 방식

정적 로딩 (컴파일 타임)

동적 로딩 (런타임)

문법

import, export

require, module.exports

모듈 범위

파일 단위

파일 단위

트리 셰이킹

지원 (최적화 가능)

지원하지 않음

사용 환경

브라우저, 서버 (트랜스파일러)

주로 서버 (Node.js)

엄격 모드

자동 적용

선택적 적용

 

 

New Tech Posts