[Node.js] module
Node.js에서 모듈은 모듈식이며 재사용 가능한 방식으로 코드를 구성하고 구조화하는 데 도움이 되는 기본 개념입니다. 모듈을 사용하면 기능을 별도의 파일로 캡슐화하여 애플리케이션을 더 쉽게 유지 관리, 테스트 및 확장할 수 있습니다. Node.js는 모듈을 정의하고, 가져오고, 내보내는 방법을 정의하는 CommonJS 모듈 시스템을 따릅니다.
모듈 생성:
Node.js의 모듈은 기본적으로 JavaScript 파일입니다. 파일에 코드를 정의하고 애플리케이션의 다른 부분에서 사용할 수 있도록 하려는 기능을 내보내 모듈을 만듭니다.
예제 모듈(math.js):
// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
module.exports = {
add,
subtract,
};
이 예에서 math.js 모듈은 두 가지 함수(add 및 subtract)를 내보냅니다.
모듈 가져오기:
다른 파일에 있는 모듈의 기능을 사용하려면 'require' 함수를 사용하여 모듈을 가져옵니다. 가져온 모듈은 객체가 되며 해당 객체를 통해 내보낸 기능에 액세스할 수 있습니다.
예(app.js):
// app.js
const mathModule = require('./math');
const resultAdd = mathModule.add(5, 3);
const resultSubtract = mathModule.subtract(8, 2);
console.log(resultAdd); // 8
console.log(resultSubtract); // 6
핵심 모듈:
Node.js는 추가 패키지를 설치하지 않고도 사용할 수 있는 여러 내장 모듈 또는 핵심 모듈을 제공합니다. 동일한 require 구문을 사용하여 핵심 모듈을 가져옵니다.
예(coreModuleExample.js):
// Using a core module (fs - File System)
const fs = require('fs');
// Reading a file asynchronously
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
모듈 패턴:
명명된 내보내기:
명명된 내보내기를 사용하여 모듈에서 여러 함수나 변수를 내보낼 수 있습니다.
// math.js
exports.add = (a, b) => a + b;
exports.subtract = (a, b) => a - b;
기본 내보내기:
모듈에 대한 기본 내보내기를 사용하면 임의의 변수 이름을 사용하여 모듈을 가져올 수 있습니다.
// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
export default {
add,
subtract,
};
기본 내보내기로 모듈 가져오기:
// app.js
import mathModule from './math';
const resultAdd = mathModule.add(5, 3);
const resultSubtract = mathModule.subtract(8, 2);
Node.js 모듈 해결:
Node.js는 require를 사용할 때 모듈 경로를 확인하기 위해 특정 알고리즘을 따릅니다. 다음 위치에서 모듈을 찾습니다.
- 핵심 모듈(예: fs, http).
- 'node_modules' 디렉터리(로컬 또는 글로벌)에 설치된 모듈.
- 상대 또는 절대 경로로 지정된 사용자 정의 모듈
Package.json 및 "main" 필드:
디렉터리에 package.json 파일이 포함된 경우 Node.js는 모듈의 진입점을 결정하기 위해 "main" 필드를 찾습니다. 이는 여러 파일이 포함된 대규모 프로젝트를 구성하는 데 유용합니다.
예(package.json):
{
"main": "app.js",
"dependencies": {
"express": "^4.17.1"
}
}
이 예에서 "main": "app.js"가 포함된 package.json 파일이 있는 경우 require('./')를 사용하여 기본 모듈을 가져올 수 있습니다.
순환 종속성:
Node.js는 순환 종속성을 허용하지만 작동 방식을 이해하는 것이 중요합니다. 순환 종속성은 두 개 이상의 모듈이 서로 종속될 때 발생합니다. Node.js는 모듈을 부분적으로 해결하여 점진적으로 로드할 수 있도록 하여 이를 처리합니다.
예(moduleA.js 및 moduleB.js):
// moduleA.js
const moduleB = require('./moduleB');
console.log('Module A:', moduleB);
// moduleB.js
const moduleA = require('./moduleA');
console.log('Module B:', moduleA);
이 예에서는 moduleA와 moduleB가 서로 의존하더라도 Node.js는 무한 루프를 일으키지 않습니다. 로그에는 해결 프로세스 중에 각 모듈이 부분적으로 로드되었음을 표시합니다.
요약:
- Node.js의 모듈은 코드를 구성하고 구조화하는 방법을 제공합니다.
- 모듈은 기능을 캡슐화하며 별도의 JavaScript 파일을 사용하여 생성될 수 있습니다.
- 모듈은 require 및 module.exports(또는 exports) 구문을 사용하여 가져오고 내보낼 수 있습니다.
- 핵심 모듈은 Node.js에서 제공하는 내장 모듈입니다.
- 모듈 패턴에는 명명된 내보내기, 기본 내보내기 및 순환 종속성이 포함됩니다.
- Node.js는 모듈 경로를 해결하기 위해 특정 알고리즘을 따릅니다.
- package.json 파일과 "main" 필드는 모듈의 진입점을 지정할 수 있습니다.
- 순환 종속성은 허용되지만 주의해서 사용해야 합니다.
Node.js에서 모듈이 작동하는 방식을 이해하는 것은 유지 관리 및 확장 가능한 모듈식 애플리케이션을 구축하는 데 중요합니다. 이를 통해 코드베이스를 효율적으로 구성하고 애플리케이션의 여러 부분에서 코드 재사용을 촉진할 수 있습니다.