반응형
import
와 require
는 모두 Node.js 환경에서 모듈을 가져오는 데 사용되는 방법이지만, 몇 가지 중요한 차이점이 있습니다. 이 둘의 차이는 주로 사용 시점과 지원하는 모듈 시스템에서 발생합니다.
1. 모듈 시스템 차이
require
: CommonJS 모듈 시스템require
는 Node.js에서 기본적으로 사용되는 CommonJS 모듈 시스템의 일부입니다.- CommonJS는 Node.js의 초기 모듈 시스템이며, 대부분의 기존 Node.js 코드베이스에서 사용됩니다.
import
: ES Module (ECMAScript Module) 시스템import
는 ECMAScript Module(ESM) 표준에 기반한 모듈 시스템입니다.- 이 모듈 시스템은 JavaScript의 최신 표준에 맞춰 도입되었으며, 브라우저 환경에서도 사용됩니다.
2. 문법 차이
require
문법 (CommonJS)
const module = require('module-name');
require
는 함수 형태로 모듈을 불러옵니다.- 모듈을 동적으로 호출할 수 있습니다.
import
문법 (ES Module)
import module from 'module-name';
import
는 선언적이고 정적인 방법으로 모듈을 가져옵니다.- 반드시 파일의 최상단에서 사용해야 하며, 동적으로 모듈을 가져올 수 없습니다. (단,
import()
함수를 사용하면 동적 import도 가능해짐.)
- 반드시 파일의 최상단에서 사용해야 하며, 동적으로 모듈을 가져올 수 없습니다. (단,
3. 동작 방식
require
: 런타임 로딩require
는 런타임에 모듈을 불러옵니다. 즉, 코드가 실행되는 시점에 모듈이 로드됩니다.- 예를 들어, 함수 안에서 조건적으로 모듈을 불러오는 것이 가능합니다.
if (condition) {
const module = require('module-name');
}
import
: 정적 로딩import
는 컴파일 타임에 모듈을 가져옵니다. 코드가 실행되기 전에 모듈이 분석되어야 하며, 파일의 최상단에서만 사용할 수 있습니다.- 이러한 정적 특성 덕분에
import
는 트리 셰이킹(tree-shaking) 등 최적화에 유리합니다.
import module from 'module-name'; // 파일의 최상단에서만 사용
4. 동적 import
- 동적
require
require
는 함수이므로, 동적으로 모듈을 불러오는 것이 가능합니다.
if (someCondition) {
const myModule = require('./myModule');
}
- 동적
import()
import
도 최신 문법에서는 동적으로 사용할 수 있지만, 이는 일반적인import
문법과는 다릅니다. 동적 import는 Promise를 반환합니다.
import('./myModule').then((module) => {
console.log(module);
});
5. 호환성
require
: Node.js 기본 지원require
는 Node.js의 모든 버전에서 기본적으로 지원되며, 모든 기존 Node.js 프로젝트에서 사용할 수 있습니다.
import
: Node.js 12+에서 실험적 지원, 13+에서 안정화import
는 ES 모듈을 지원하는 Node.js 버전(12 이상)에서 사용할 수 있습니다.import
를 사용하려면 파일 확장자를.mjs
로 설정하거나,package.json
에서"type": "module"
을 명시해야 합니다.
6. 모듈 내보내기 방식
module.exports
및exports
(CommonJS)require
와 함께 모듈을 내보내기 위해서는module.exports
나exports
객체를 사용합니다.
// 모듈 내보내기 (CommonJS)
module.exports = function() { ... };
export
및export default
(ESM)import
와 함께 모듈을 내보내기 위해서는export
키워드를 사용합니다.
// 모듈 내보내기 (ESM)
export default function() { ... };
export const myFunction = () => { ... };
7. 요약
특징 | require (CommonJS) | import (ES Module) |
모듈 시스템 | CommonJS | ES Module |
문법 | const module = require('module-name'); | import module from "module-name'; |
모듈 로딩 시점 | 런타임 (동적 가능) | 컴파일 타임 (정적) |
동적 모듈 로딩 | 가능 | import() 함수로 가능 |
트리 셰이킹 | 지원되지 않음 | 지원 (정적 분석 가능) |
Node.js 기본 지원 버전 | 모든 버전 | Node.js 12+에서 실험적, 13+에서 안정적 |
파일 확장자 | .js | .mjs (또는 package.json 설정 필요) |
8. 결론
- CommonJS (
require
)는 여전히 많은 Node.js 프로젝트에서 사용되며, 기존 코드베이스에서 안정적으로 동작합니다. - ESM (
import
)은 표준화된 방식이며, 최신 Node.js와 브라우저 환경에서 모듈을 로드하는 최적화된 방법입니다.
반응형
'언어 > Node.js' 카테고리의 다른 글
[ Node.js ] file 확장자 제외하고 이름만 가져오기 (0) | 2024.09.05 |
---|---|
[ Node.js ] unzipper로 압축 파일 풀기 (1) | 2024.09.05 |
[ Node.js ] CommonJS vs ESM(ECMAScript Module) 비교 (0) | 2024.09.04 |
[ Node.js ] Node.js 버전 역사. (0) | 2024.09.04 |
[ Node.js ] 간단한 웹 스파이더 작성하기 (0) | 2024.06.16 |