[Node.js – 기초 강좌] 2. nodejs 모듈(module)의 이해와 패키지 관리 (with npm)

Node.js는 서버 사이드에서 JavaScript를 실행할 수 있게 해주는 런타임 환경으로, 비동기 I/O를 지원하고 높은 성능과 확장성을 제공합니다. 이러한 Node.js의 강력한 기능 중 하나는 모듈(Module) 시스템과 패키지 관리 도구인 npm(Node Package Manager)입니다. 이번 포스팅에서는 Node.js 모듈과 npm을 통해 코드를 모듈화하고 패키지를 관리하는 방법에 대해 자세히 알아보겠습니다.

Nodejs 모듈(Module) 소개

모듈이란?

모듈은 특정 기능을 수행하는 코드 묶음입니다.

소프트웨어 개발에서 모듈화를 통해 코드를 더 관리하기 쉽게 만들고, 재사용성을 높일 수 있습니다.

Node.js에서는 파일 단위로 모듈을 관리하며, 이를 통해 코드의 의존성을 명확히 하고 협업 시 충돌을 최소화할 수 있습니다.

nodejs-module

Node.js 모듈 이해

Node.js는 일반적으로 CommonJS 모듈 시스템을 사용합니다. 허나, package.jsontypemodule로 설정하면 ECMAScript 2015(ES6)를 사용할 수 있습니다.

각 파일은 독립된 모듈로 간주되며, 필요한 모듈을 불러와서 사용할 수 있습니다. Node.js에서 모듈을 불러오고 내보내는 기본적인 방법을 알아보겠습니다.

CommonJS 모듈 시스템

CommonJS는 Node.js의 기본 모듈 시스템입니다. 각 파일은 독립된 모듈로 간주되며, requiremodule.exports를 사용하여 모듈을 불러오고 내보냅니다.

모듈 내보내기 (module.exports)

CommonJS의 Node.js 모듈 시스템에서 모듈을 내보내기 위해 module.exports 객체를 사용합니다.

이 객체를 통해 함수, 객체, 변수를 외부로 공개할 수 있습니다.

// 02_01_commonjs_module/module_math.js
// math.js
function add(a, b) {
  return a + b;
}

module.exports = add;
모듈 불러오기 (require)

내보낸 모듈을 다른 파일에서 사용하려면 require 함수를 사용합니다.

// 02_01_commonjs_module/app.js
const add = require("./module_math");

const result = add(2, 3);
console.log(result); // 5

ES6 모듈 시스템

ES6 모듈 시스템은 ECMAScript 2015(ES6) 표준에 따라 정의된 모듈 시스템입니다.

Node.js는 ES6 모듈을 부분적으로 지원하며, ES6 모듈을 사용하려면 파일 확장자를 .mjs로 하거나 package.json 파일에 typemodule로 설정해야 합니다.

모듈 내보내기 (export)

ES6 모듈 시스템에서는 export 키워드를 사용하여 모듈을 내보냅니다.

// math.mjs
export function add(a, b) {
  return a + b;
}
모듈 불러오기 (import)

ES6 모듈 시스템에서는 import 키워드를 사용하여 모듈을 불러옵니다.

// app.mjs
import { add } from "./module_math.mjs";

const result = add(2, 3);
console.log(result); // 출력: 5


Node.js 모듈의 이해와 패키지 관리 (with npm)

Node.js는 서버 사이드에서 JavaScript를 실행할 수 있게 해주는 런타임 환경으로, 비동기 I/O를 지원하고 높은 성능과 확장성을 제공합니다. 이러한 Node.js의 강력한 기능 중 하나는 모듈 시스템과 패키지 관리 도구인 npm(Node Package Manager)입니다. 이번 포스팅에서는 Node.js 모듈과 npm을 통해 코드를 모듈화하고 패키지를 관리하는 방법에 대해 자세히 알아보겠습니다.

모듈이란?

모듈은 특정 기능을 수행하는 코드 묶음입니다. 소프트웨어 개발에서 모듈화를 통해 코드를 더 관리하기 쉽게 만들고, 재사용성을 높일 수 있습니다. Node.js에서는 파일 단위로 모듈을 관리하며, 이를 통해 코드의 의존성을 명확히 하고 협업 시 충돌을 최소화할 수 있습니다.

Node.js 모듈 이해

Node.js에는 두 가지 주요 모듈 시스템이 있습니다: CommonJS와 ES6 모듈 시스템. 각 시스템의 사용법과 장단점을 이해하는 것이 중요합니다.

CommonJS 모듈 시스템

CommonJS는 Node.js의 기본 모듈 시스템입니다. 각 파일은 독립된 모듈로 간주되며, requiremodule.exports를 사용하여 모듈을 불러오고 내보냅니다.

모듈 내보내기 (module.exports)

Node.js 모듈 시스템에서 모듈을 내보내기 위해 module.exports 객체를 사용합니다. 이 객체를 통해 함수, 객체, 변수를 외부로 공개할 수 있습니다.

javascriptCopy code// math.js
function add(a, b) {
  return a + b;
}

module.exports = add;

모듈 불러오기 (require)

내보낸 모듈을 다른 파일에서 사용하려면 require 함수를 사용합니다.

javascriptCopy code// app.js
const add = require('./math');

const result = add(2, 3);
console.log(result);  // 출력: 5

ES6 모듈 시스템

ES6 모듈 시스템은 ECMAScript 2015(ES6) 표준에 따라 정의된 모듈 시스템입니다. Node.js는 ES6 모듈을 부분적으로 지원하며, ES6 모듈을 사용하려면 파일 확장자를 .mjs로 하거나 package.json 파일에 typemodule로 설정해야 합니다.

모듈 내보내기 (export)

ES6 모듈 시스템에서는 export 키워드를 사용하여 모듈을 내보냅니다.

javascriptCopy code// math.mjs
export function add(a, b) {
  return a + b;
}

모듈 불러오기 (import)

ES6 모듈 시스템에서는 import 키워드를 사용하여 모듈을 불러옵니다.

javascriptCopy code// app.mjs
import { add } from './math.mjs';

const result = add(2, 3);
console.log(result);  // 출력: 5

npm을 이용한 패키지 관리

npm은 Node.js의 기본 패키지 관리자입니다.

npm을 통해 수많은 오픈 소스 패키지를 설치하고, 업데이트하며, 관리할 수 있습니다. 다음은 npm을 사용하는 기본적인 방법들입니다.

npm logo

npm 소개

npm(Node Package Manager)은 JavaScript 패키지 관리자입니다.

npm은 다음과 같은 기능을 제공합니다:

  • 패키지 설치: 필요한 패키지를 프로젝트에 설치할 수 있습니다.
  • 의존성 관리: 프로젝트에서 사용하는 모든 패키지와 그 버전을 관리할 수 있습니다.
  • 스크립트 실행: 프로젝트에서 자주 사용하는 명령어를 스크립트로 정의하고 실행할 수 있습니다.

package.json이란?

package.json 파일은 프로젝트의 메타데이터를 포함하고 있으며, 프로젝트의 의존성, 스크립트, 버전, 저자 정보 등을 관리합니다.

Node.js 프로젝트에서 package.json 파일은 필수적이며, npm을 통해 패키지를 설치할 때 자동으로 생성됩니다.

다음 명령어를 통해 package.json 파일을 생성할 수 있습니다.

$ npm init

여러 질문에 답변하며, package.json파일을 설정할 수 있고, 빠르게 기본 설정을 하려면 -y 옵션을 사용하면 됩니다.

package.json 파일 구성

기본 필드
  • name: 패키지의 이름입니다. 고유해야 하며 소문자와 하이픈을 사용할 수 있습니다.
  • version: 패키지의 버전입니다. 주로 Semantic Versioning을 따릅니다.
    • 파일의 의존성 버전 앞에 ^~ 기호를 사용하여 특정 범위 내에서 버전을 고정할 수 있습니다:
      • ^ (캐럿): 주 버전이 같은 범위 내에서 업데이트 (예: ^4.17.1 -> 4.x.x)
      • ~ (틸드): 마이너 버전이 같은 범위 내에서 업데이트 (예: ~4.17.1 -> 4.17.x)
  • description: 패키지에 대한 설명입니다.
  • main: 패키지의 엔트리 포인트 파일입니다. 기본값은 index.js입니다.
  • scripts: 프로젝트에서 사용할 수 있는 명령어 스크립트입니다. 예를 들어, npm start를 실행하면 scriptsstart 스크립트가 실행됩니다.
  • author: 패키지의 저자 정보입니다.
  • license: 패키지의 라이선스 정보입니다.
의존성 필드
  • dependencies: 프로젝트가 동작하는 데 필요한 패키지 목록입니다. 여기에는 패키지 이름과 버전이 포함됩니다.
  • devDependencies: 개발 중에만 필요한 패키지 목록입니다. 예를 들어, 테스트 프레임워크나 빌드 도구 등이 포함됩니다.
  • peerDependencies: 호환성을 위해 특정 버전의 다른 패키지를 요구하는 경우 사용합니다.
  • optionalDependencies: 선택적인 의존성으로, 설치 실패 시 프로젝트 실행에 영향을 주지 않습니다.
기타 필드
  • repository: 프로젝트의 원격 저장소 정보입니다.
  • keywords: 프로젝트와 관련된 키워드 목록입니다. npm 레지스트리에서 검색될 때 유용합니다.
  • bugs: 프로젝트의 버그 추적기 URL입니다.
  • homepage: 프로젝트의 홈페이지 URL입니다.

package.json 예

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "This is a sample project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Your Name",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.7"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/yourname/yourrepo.git"
  },
  "keywords": [
    "node",
    "npm",
    "package.json"
  ],
  "bugs": {
    "url": "https://github.com/yourname/yourrepo/issues"
  },
  "homepage": "https://github.com/yourname/yourrepo#readme"
}

패키지 탐색

npm 공식 페이지를 통해 package를 탐색하여 원하는 패키지를 찾고 정보를 얻을 수 있습니다.

search package in npm

패키지 설치

특정 패키지를 설치하려면 npm install 명령어를 사용합니다.

예를 들어, Express 패키지를 설치하려면 다음과 같이 입력합니다.

$ npm install express

위 명령어를 실행하면 express 패키지가 설치되고, package.json 파일의 dependencies 섹션에 다음과 같이 추가됩니다:

{
  "dependencies": {
    "express": "^4.17.1"
  }
}

혹은 package.json에 포함된 패키지를 모두 설치하려면 패키지 이름을 빼고 npm install 명령어를 실행합니다.

$ npm install

개발 의존성 설치

개발 중에만 필요한 패키지는 --save-dev 옵션을 사용하여 설치할 수 있습니다.

이러한 패키지는 devDependencies 섹션에 기록됩니다.

예를 들어 nodemon 패키지는 개발 중에 코드 변경을 자동으로 감지하고 서버를 재시작 해주는 도구 인데, 개발중에만 필요하므로 다음과 같이 개발중에만 사용할 수 있게 설치합니다.

$ npm install --save-dev nodemon

위 명령어를 실행하면 nodemon 패키지가 설치되고, package.json 파일의 devDependencies 섹션에 다음과 같이 추가됩니다:

{
  "devDependencies": {
    "nodemon": "^2.0.7"
  }
}

의존성 제거

패키지를 제거할 때는 다음과 같이 npm uninstall 명령어를 사용합니다.

예) express 패키지 제거

$ npm uninstall express

의존성 업데이트

패키지를 업데이트할 때는 npm update 명령어를 사용합니다.

특정 패키지를 업데이트하려면 다음과 같이 명령어를 실행합니다:

$ npm update express

참고 링크

Leave a Comment