Node.js는 서버 사이드에서 JavaScript를 실행할 수 있게 해주는 런타임 환경입니다. Node.js의 가장 큰 장점 중 하나는 모듈 시스템을 통해 코드를 모듈화하고 재사용할 수 있다는 점입니다. 이 글에서는 Node.js의 모듈 시스템에 대해 알아보고, 모듈을 활용하는 방법을 소개하겠습니다.
Node.js 모듈이란?
Node.js에서 모듈(Module)은 독립적인 코드 블록으로, 특정 기능을 캡슐화하여 재사용할 수 있도록 하는 파일 단위의 코드입니다. 모듈을 사용하면 코드를 분리하고, 각 기능을 별도로 관리할 수 있습니다. 이를 통해 프로젝트 구조가 더 깔끔해지고, 유지보수가 쉬워집니다.
Node.js는 자체적으로 여러 내장 모듈을 제공하며, 사용자 정의 모듈을 만들고 외부 패키지를 설치하여 사용할 수 있습니다. 모든 Node.js 파일은 하나의 모듈로 간주됩니다.
Node.js 모듈 종류
Node.js 모듈은 크게 세 가지 종류로 나눌 수 있습니다:
- 내장 모듈: Node.js에 기본으로 포함된 모듈
- 사용자 정의 모듈: 개발자가 직접 작성한 모듈
- 외부 모듈: npm(Node Package Manager)을 통해 설치한 모듈
1. 내장 모듈 (Built-in Modules)
Node.js는 다양한 기능을 제공하는 내장 모듈을 포함하고 있습니다. 이 모듈들은 Node.js에서 기본적으로 제공되며, 별도의 설치 없이 바로 사용할 수 있습니다. 자주 사용되는 내장 모듈로는 fs
, http
, path
등이 있습니다.
// 파일 시스템(fs) 모듈을 불러오기
const fs = require('fs');
// 파일 읽기
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
위 코드에서는 fs
모듈을 사용해 파일을 읽고 내용을 출력하는 예시를 보여줍니다. require()
함수를 사용해 내장 모듈을 불러올 수 있습니다.
2. 사용자 정의 모듈 (Custom Modules)
개발자가 직접 작성한 모듈을 사용자 정의 모듈이라고 합니다. 이러한 모듈은 특정 기능을 캡슐화하여 다른 파일에서 재사용할 수 있습니다. 모듈을 만들려면 함수나 객체를 module.exports
를 사용해 내보내고, 다른 파일에서 require()
로 불러올 수 있습니다.
모듈 내보내기 (Export)
// math.js 파일
// 두 숫자를 더하는 함수
function add(a, b) {
return a + b;
}
// 두 숫자를 곱하는 함수
function multiply(a, b) {
return a * b;
}
// 모듈 내보내기
module.exports = {
add,
multiply
};
모듈 불러오기 (Import)
// app.js 파일
// math.js 모듈 불러오기
const math = require('./math');
console.log(math.add(5, 10)); // 결과: 15
console.log(math.multiply(5, 10)); // 결과: 50
위 예제에서는 math.js
라는 사용자 정의 모듈을 만들고, add
와 multiply
함수를 module.exports
로 내보냈습니다. app.js
파일에서는 require()
함수를 사용하여 math.js
모듈을 불러와 그 안의 함수를 사용할 수 있습니다.
3. 외부 모듈 (External Modules)
Node.js 생태계에서 가장 큰 장점 중 하나는 npm(Node Package Manager)을 통해 수많은 외부 모듈을 설치하고 사용할 수 있다는 점입니다. npm은 JavaScript 패키지 관리 도구로, 다양한 기능을 제공하는 패키지들을 쉽게 설치하고 관리할 수 있게 해줍니다.
npm을 사용한 모듈 설치
// npm을 사용하여 lodash 모듈 설치
$ npm install lodash
설치한 모듈 사용
// lodash 모듈 불러오기
const _ = require('lodash');
let arr = [1, 2, 3, 4, 5];
let shuffledArr = _.shuffle(arr); // 배열을 무작위로 섞음
console.log(shuffledArr); // 예: [3, 1, 5, 4, 2]
위 코드에서는 lodash
라는 외부 모듈을 npm을 통해 설치하고, 이를 사용하여 배열을 무작위로 섞는 기능을 구현했습니다.
모듈 가져오기 방식: require()
와 import
Node.js에서는 모듈을 가져올 때 require()
함수가 전통적으로 사용됩니다. 그러나 ECMAScript 모듈(ESM) 방식이 도입되면서, import
문법도 지원됩니다. import
는 ES6의 모듈 시스템으로, 점점 더 많이 사용되고 있습니다.
require()
방식
const fs = require('fs');
import
방식
import fs from 'fs';
import
문법을 사용하려면 package.json
파일에 "type": "module"
을 추가해야 하며, 최신 Node.js 버전에서 지원됩니다.
모듈 캐싱 (Module Caching)
Node.js에서 모듈은 처음 require()
로 불러왔을 때 메모리에 캐싱됩니다. 즉, 같은 모듈을 여러 번 불러와도 한 번만 로드되며, 이후에는 캐시된 모듈이 사용됩니다. 이로 인해 성능이 향상되지만, 동적으로 모듈을 다시 로드하는 것은 어렵습니다.
모듈 활용 시 주의사항
- 상대 경로와 절대 경로: 모듈을 불러올 때 상대 경로(예:
./module
) 또는 절대 경로를 사용할 수 있습니다. 상대 경로는 현재 파일의 위치를 기준으로 경로를 지정합니다. - 모듈 캐싱: 모듈이 캐싱되므로, 모듈을 다시 불러올 때 변경사항이 반영되지 않을 수 있습니다. 캐싱 동작을 이해하고 사용하는 것이 중요합니다.
- 모듈 버전 관리: npm으로 설치한 외부 모듈은 버전에 따라 기능이 달라질 수 있으므로,
package.json
에서 버전을 명시적으로 관리하는 것이 좋습니다.
결론
Node.js 모듈 시스템은 코드를 구조화하고 재사용성을 높이는 데 중요한 역할을 합니다. 내장 모듈, 사용자 정의 모듈, 외부 모듈을 적절히 활용하면 프로젝트의 복잡도를 줄이고 유지보수성을 높일 수 있습니다. 또한, npm을 통해 수많은 외부 패키지를 손쉽게 사용할 수 있으므로, 모듈 시스템을 잘 이해하고 활용해보세요!
댓글 쓰기