ES6 모듈 vs CommonJS: 차이점과 선택 가이드
KUKJIN LEE • 5개월 전 작성
ES6 모듈과 CommonJS는 가장 널리 사용되는 두 가지 모듈 시스템입니다.
결론부터 얘기하자면..
브라우저와 서버를 모두 지원하는 ES6 모듈을 사용하는 것이 좋습니다. Node.js, Express.js 환경에서는 CommonJS가 기본이지만 프로젝트 요구 사항에 맞는 모듈 시스템을 선택하여 효율적인 개발을 하는 것이 좋습니다. (하지만 Legacy 코드 이외에서 ES6가 아닌 모듈을 본적이 없습니다.)
- ES6 모듈 (ECMAScript 2015+) ES6 모듈은 최신 자바스크립트 표준의 일부로, 정적인 모듈 로딩 방식을 사용합니다.
import
와export
키워드를 통해 모듈 간의 의존성을 명확하게 정의할 수 있습니다.
// 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 환경에서 사용되며, 동적인 모듈 로딩 방식을 사용합니다. require
와 module.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 |
---|---|---|
로딩 방식 |
정적 로딩 (컴파일 타임) |
동적 로딩 (런타임) |
문법 |
|
|
모듈 범위 |
파일 단위 |
파일 단위 |
트리 셰이킹 |
지원 (최적화 가능) |
지원하지 않음 |
사용 환경 |
브라우저, 서버 (트랜스파일러) |
주로 서버 (Node.js) |
엄격 모드 |
자동 적용 |
선택적 적용 |