Node.js 마스터 클래스 Ep 2. 모듈 시스템 정복: CommonJS vs ESM
Ep 2. 모듈 시스템 정복: CommonJS vs ESM
지난 시간에 우리는 `hello.js` 파일 하나를 만들어 실행했습니다. 하지만 실제 서비스는 수백, 수천 개의 파일로 이루어져 있죠. 이 파일들을 효율적으로 관리하고 연결하는 방법, 바로 "모듈 시스템"을 배워보겠습니다.
---
1. 모듈(Module)이란?
쉽게 말해 "코드 조각"입니다. 거대한 레고 성을 만들 때, 블록 하나하나가 모듈이라고 보면 됩니다. Node.js에서는 하나의 자바스크립트 파일(`*.js`)이 곧 하나의 모듈입니다.
모듈을 사용하면 다음과 같은 장점이 있습니다.
1. 재사용성: 한 번 만든 기능을 여러 곳에서 쓸 수 있습니다.
2. 유지보수: 코드가 분리되어 있어 수정이 쉽습니다.
3. 네임스페이스 보호: 변수 이름이 겹치는 것을 막아줍니다.
2. 두 가지 스타일: CommonJS vs ESM
Node.js 역사에는 두 가지 큰 흐름이 있습니다.
(1) CommonJS (CJS)
- 특징: Node.js가 처음 생길 때부터 사용하던 전통적인 방식입니다.
- 키워드: `require` (가져오기), `module.exports` (내보내기)
- 동작: 동기적(Synchronous)으로 로드됩니다.
// math.js (내보내기)
const add = (a, b) => a + b;
module.exports = add;
// index.js (가져오기)
const add = require('./math');
console.log(add(2, 3)); // 5
(2) ECMAScript Modules (ESM)
- 특징: 자바스크립트 언어 표준(ES6) 방식입니다. 최신 Node.js와 브라우저 모두에서 지원합니다.
- 키워드: `import` (가져오기), `export` (내보내기)
- 설정: `package.json`에 `"type": "module"`을 추가해야 합니다.
// math.js
export const add = (a, b) => a + b;
// index.js
import { add } from './math.js'; // 확장자 .js 필수!
console.log(add(2, 3));
💡 무엇을 써야 하나요?
최근 트렌드는 ESM으로 넘어가고 있습니다. 하지만 기존에 만들어진 수많은 라이브러리가 아직 CommonJS를 쓰기 때문에, 두 방식 모두 읽을 줄 알아야 합니다.
3. Node.js 내장 모듈 (Built-in Modules)
Node.js를 설치하면 기본적으로 제공되는 강력한 도구들이 있습니다. 따로 설치(`npm install`)할 필요가 없죠.
- fs (File System): 파일을 읽고 쓰고 지울 수 있습니다.
- path: 파일 경로를 운영체제(Windows/Mac/Linux)에 맞게 다룹니다.
- os: 운영체제 정보를 가져옵니다.
---
🛠️ 오늘의 미션: 파일 시스템 다루기
직접 파일을 생성하고 내용을 읽어보는 코드를 작성해 봅시다. (CommonJS 방식으로 진행합니다)
1. `file-test.js` 파일을 만듭니다.
2. 아래 코드를 작성합니다.
const fs = require('fs');
// 1. 파일 쓰기
fs.writeFileSync('note.txt', 'Node.js는 정말 재미있습니다!');
console.log('파일이 생성되었습니다.');
// 2. 파일 읽기
const data = fs.readFileSync('note.txt', 'utf-8');
console.log('파일 내용:', data);
3. `node file-test.js`를 실행하고, 같은 폴더에 `note.txt`가 생겼는지 확인해보세요!
---
🔗 다음 예고
이제 내 컴퓨터에서만 도는 코드가 아니라, 웹 브라우저가 접속할 수 있는 서버를 만들어야겠죠? 가장 인기 있는 웹 프레임워크, "Express.js로 REST API 만들기"로 찾아오겠습니다.