Node.js

[Node.js] module

이경찬 :) 2023. 12. 30. 11:42

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를 사용할 때 모듈 경로를 확인하기 위해 특정 알고리즘을 따릅니다. 다음 위치에서 모듈을 찾습니다.

  1. 핵심 모듈(예: fs, http).
  2. 'node_modules' 디렉터리(로컬 또는 글로벌)에 설치된 모듈.
  3. 상대 또는 절대 경로로 지정된 사용자 정의 모듈

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에서 모듈이 작동하는 방식을 이해하는 것은 유지 관리 및 확장 가능한 모듈식 애플리케이션을 구축하는 데 중요합니다. 이를 통해 코드베이스를 효율적으로 구성하고 애플리케이션의 여러 부분에서 코드 재사용을 촉진할 수 있습니다.