[Node.js] npm(Node Package Manager)이란?

artp·2025년 4월 19일
0

node.js

목록 보기
3/9
post-thumbnail

npm이란?

npm(Node package Manager)은 Node.js에서 사용하는 패키지 관리자입니다.

  • 다른 개발자가 만들어둔 패키지(라이브러리, 도구)를 설치해서 사용할 수 있게 해줍니다.
  • 쉽게 말해, "Node.js의 앱스토어" 같은 역할을 합니다.
  • npm은 Node.js를 설치하면 함께 설치됩니다.
node -v	// Node.js 버전 확인 
npm -v	// npm 버전 확인

여기서 말하는 패키지란, 자바스크립트 코드로 만들어진 기능 단위의 모음입니다.
예를 들어, express는 웹 서버를 쉽게 만들 수 있도록 도와주는 코드 묶음입니다. npm은 이런 코드들을 검색, 다운로드, 버전 관리, 삭제까지 전부 해주는 도구입니다.

npm의 필요성

모든 기능을 직접 개발한다면 개발 시간과 유지보수 비용이 매우 많이 들게 됩니다.
하지만 npm 덕분에 개발자는 이미 검증된 코드(패키지)를 재사용할 수 있습니다.

  • 웹 서버를 만들고 싶을 때는 express
  • HTTP 요청을 보내고 싶을 때는 axios

이러한 모든 기능들을 직접 구현하는 대신, npm install 한 줄로 가져다 쓸 수 있습니다. 이처럼 npm은 개발 속도를 높이고, 코드의 일관성과 안정성을 확보하는 데 꼭 필요한 도구입니다.

npm 기본 구조

npm이 관리하는 프로젝트는 보통 두 가지를 중심으로 작동합니다.

node_modules

  • 개발자가 설치한 패키지들이 실제로 저장되는 폴더입니다.
  • 용량이 매우 크고, 복잡한 구조를 갖고 있어서 Git에 올리지 않습니다.

package.json

  • 프로젝트의 핵심 설정 파일입니다.
  • 어떤 패키지를 사용하고 있는지, 프로젝트 이름, 버전, 실행 명령어 등 다양한 정보가 담겨 있습니다.

package.json은 이 프로젝트가 어떤 패키지를 사용하는지, 어떤 명령어로 실행되는지를 담고 있는 설정서이자 명세서입니다.

npm init          # package.json 생성 (설정 질문 응답)
npm init -y       # 기본 설정으로 바로 생성
  • package.json 파일이 있다면 이 프로젝트는 "npm으로 관리되는 프로젝트"라고 할 수 있습니다.

npm 주요 명령어

명령어설명
npm initpackage.json 생성
npm install 또는 npm ipackage.json에 있는 패키지 전부 설치
npm install 패키지명특정 패키지 설치
npm uninstall 패키지명패키지 삭제
npm update설치된 패키지 최신 버전으로 업데이트
npm list설치된 패키지 목록 확인

설치 옵션 차이점 정리

npm으로 패키지를 설치할 때는 옵션을 함께 붙여서 용도에 맞게 설치해야 합니다.

명령어의미
npm install현재 프로젝트(local)에 설치
npm install -g시스템 전체(Global)에 설치
npm install --save-dev개발 시에만 사용하는 패키지로 설치 (빌드, 테스트 등)
  • -g 옵션은 명령어를 전역에서 실행해야 할 때 사용합니다. (예: nodemon, eslint 등)

요약: npm install의 흐름

  1. package.json에서 설치 목록을 확인
  2. 필요한 패키지를 인터넷(npm 레지스트리)에서 다운로드
  3. node_modules 폴더에 실제로 설치
  4. package-lock.json으로 버전 고정

로컬 설치 vs 글로벌 설치

패키지를 이 프로젝트에만 설치할지, 전체 컴퓨터에 설치할지를 선택할 수 있습니다.

로컬 설치

  • 현재 프로젝트에서만 사용하는 경우
  • 일반적으로는 로컬 설치를 기본으로 합니다.
  • node_modules/에 저장되고, package.json에 기록됩니다.
npm install express

글로벌 설치

  • CLI 도구처럼 전역에서 명령어로 실행해야 할 때 사용
npm install -g nodemon
  • 글로벌 설치는 운영체제마다 경로가 달라지므로, 협업 시에는 주의가 필요합니다.

dependencies vs devDependencies

npm은 패키지를 설치할 때 '운영에 필요한가, 개발에만 필요한가'로 나눠서 관리합니다.
npm은 설치된 패키지를 크게 두 종류로 구분합니다.

dependencies

  • 실제 서비스에서 사용하는 패키지입니다.
  • 배포 시에도 함께 포함되어야 합니다.

devDependencies

  • 개발 중에만 사용하는 패키지입니다.
  • 테스트, 빌드, 개발 도우미 도구 등 (예: nodemon, eslint)
{
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "nodemon": "^3.0.0"
  }
}
  • --save-dev 옵션을 쓰면 devDependencies에 기록됩니다.

npm 스크립트 사용

프로젝트에 자주 쓰는 명령어가 있다면, package.json"script" 항목에 등록해두면 편리하게 실행할 수 있습니다.

package.json

"scripts": {
  "start": "node index.js",
  "dev": "nodemon index.js",
  "build": "vite build"
}

실행 스크립트


npm run dev       # nodemon으로 실행
npm start         # start는 run 생략 가능

주의사항

1. node_modules/는 Git에 올리지 말 것

node_modules/npm install 시 자동 생성되는 폴더로, 설치한 모든 패키지와 그 하위 의존성이 포함됩니다.

  • 용량이 매우 크고, 구조가 복잡하여 Git에 올리면 저장소가 무거워지고 충돌 가능성도 높아집니다.
  • 언제든 다시 생성할 수 있기 때문에, Git에 굳이 포함할 필요가 없습니다.

.gitignore에 다음과 같이 등록합니다.

# .gitignore
node_modules/

2. package-lock.json은 반드시 커밋할 것

package-lock.json은 설치된 패키지의 정확한 버전, 의존성 트리, 다운로드 위치 등을 기록한 파일입니다.

  • 만약 이 파일 없이 팀원들과 협업하면, 각자의 npm install 결과가 다를 수 있습니다.
  • 예: "^4.0.0"처럼 범위를 지정해놓은 경우, 누군가는 4.0.1, 누군가는 4.1.0을 설치할 수도 있습니다.
  • 이로 인해 동일한 코드인데 실행 결과가 달라지는 문제가 생깁니다.

package.jsonpackage-lock.json을 함께 커밋하여, 모든 팀원이 동일한 환경에서 작업하도록 합니다.

표: package.json과 package-lock.json 비교

파일명역할버전 형식용도
package.json내가 어떤 패키지를 사용하는지 선언대략적인 범위 (^, ~)개발자가 직접 작성·수정 (의존성 관리의 기준점)
package-lock.json실제 설치된 패키지의 정확한 버전과 경로를 기록정확한 버전 (2.8.5 등)npm이 자동 생성 및 관리 (동일한 환경 재현 보장)

추가 설명

  • package.json사람이 읽고 관리하는 의존성 목록입니다.
    → “내 프로젝트에는 express가 필요하고, 버전은 4.0 이상이면 괜찮습니다.”
  • package-lock.jsonnpm이 실제 설치한 버전 목록을 기록한 상세 내역서입니다.
    → “이 프로젝트에 설치된 express는 정확히 4.18.2이고, 그 안에서 필요한 다른 패키지들도 각각 이런 버전입니다.”

정리

항목요약
npm 역할Node.js 패키지 설치 및 관리 도구
핵심 파일package.json, node_modules
설치 구분로컬 vs 글로벌, dependencies vs devDependencies
실행 방식npm install, npm run, npx 실행
주의점node_moudles는 Git에 올리지 말고, package-lock.json은 반드시 포함
profile
donggyun_ee

0개의 댓글