반응형

1️⃣ CommonJS (CJS)
특징
- require() / module.exports 방식
- Node.js 역사상 기본 모듈 시스템
- 모든 Node.js 버전에서 호환됨
장점
- 기존 레거시 패키지와 호환성 좋음
- 익숙한 문법, 빠른 개발 가능
- __dirname, __filename 사용 용이
단점
- 브라우저 환경과 호환 어려움
- 트리쉐이킹(tree-shaking) 불가능 → 번들 최적화 어려움
- 점점 ESM 중심으로 패키지들이 업데이트됨
2️⃣ ES Modules (ESM)
특징
- import / export 방식
- 최신 Node.js(12+ 이상)에서 정식 지원
- 브라우저 JS와 동일한 모듈 시스템
장점
- 브라우저 코드와 동일 문법 → isomorphic JS 개발 가능
- 트리쉐이킹 지원 → 번들 최적화, Tree-shaking 가능
- 최신 라이브러리 대부분 ESM 지원
단점
- 기존 CJS 패키지 import 시 createRequire 필요
- __dirname, __filename 사용 시 별도 처리 필요
- 초기 설정(package.json에 "type": "module") 필요
3️⃣ 요즘 추천 방식
기준추천
| 신규 프로젝트 | ESM |
| 레거시 프로젝트 유지보수 | CJS |
| 브라우저와 공유/번들 예정 | ESM |
| 라이브러리 사용 호환성 | 혼합 가능 (ESM + CJS) |
현실적 결론:
- Node.js 최신 프로젝트 → ESM 기준으로 시작하는 게 장기적으로 유리
- 단, 패키지 호환성, 레거시 코드 존재 시 CJS 고려
- 혼합 가능 → ESM 프로젝트 안에서 CJS 패키지 import {createRequire} from 'module' 사용 가능
💡 추가 팁
- package.json → "type": "module" 설정 시 .js 파일은 ESM으로 인식
- 파일별로 ESM/CJS 혼합 가능 → 점진적 마이그레이션 가능
- ES2022 이후 Node.js 기준 → 거의 모든 기능 지원
반응형
'개발 · IT > 백엔드' 카테고리의 다른 글
| DB 인덱스 개념과 성능 비교 — 쉽게 이해하는 실전 가이드 (0) | 2025.11.16 |
|---|---|
| 실무에서 자주 쓰는 SQL 튜닝 기법 성능 최적화 가이드 (0) | 2025.11.14 |
| 백엔드에서 성능 최적화를 위한 10가지 팁 (0) | 2024.10.14 |
| Rust 언어가 각광받는 이유: 메모리 안전성과 성능 (2) | 2024.10.13 |
| Next.js의 폴더 구조 살펴보기 (0) | 2024.09.19 |
댓글