npm(Node package Manager)은 Node.js에서 사용하는 패키지 관리자입니다.
node -v // Node.js 버전 확인
npm -v // npm 버전 확인
여기서 말하는 패키지란, 자바스크립트 코드로 만들어진 기능 단위의 모음입니다.
예를 들어, express는 웹 서버를 쉽게 만들 수 있도록 도와주는 코드 묶음입니다. npm은 이런 코드들을 검색, 다운로드, 버전 관리, 삭제까지 전부 해주는 도구입니다.
모든 기능을 직접 개발한다면 개발 시간과 유지보수 비용이 매우 많이 들게 됩니다.
하지만 npm 덕분에 개발자는 이미 검증된 코드(패키지)를 재사용할 수 있습니다.
expressaxios이러한 모든 기능들을 직접 구현하는 대신, npm install 한 줄로 가져다 쓸 수 있습니다. 이처럼 npm은 개발 속도를 높이고, 코드의 일관성과 안정성을 확보하는 데 꼭 필요한 도구입니다.
npm이 관리하는 프로젝트는 보통 두 가지를 중심으로 작동합니다.
package.json은 이 프로젝트가 어떤 패키지를 사용하는지, 어떤 명령어로 실행되는지를 담고 있는 설정서이자 명세서입니다.
npm init # package.json 생성 (설정 질문 응답)
npm init -y # 기본 설정으로 바로 생성
package.json 파일이 있다면 이 프로젝트는 "npm으로 관리되는 프로젝트"라고 할 수 있습니다.| 명령어 | 설명 |
|---|---|
npm init | package.json 생성 |
npm install 또는 npm i | package.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의 흐름패키지를 이 프로젝트에만 설치할지, 전체 컴퓨터에 설치할지를 선택할 수 있습니다.
node_modules/에 저장되고, package.json에 기록됩니다.npm install express
npm install -g nodemon
npm은 패키지를 설치할 때 '운영에 필요한가, 개발에만 필요한가'로 나눠서 관리합니다.
npm은 설치된 패키지를 크게 두 종류로 구분합니다.
{
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.0"
}
}
--save-dev 옵션을 쓰면 devDependencies에 기록됩니다.프로젝트에 자주 쓰는 명령어가 있다면, package.json의 "script" 항목에 등록해두면 편리하게 실행할 수 있습니다.
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"build": "vite build"
}
npm run dev # nodemon으로 실행
npm start # start는 run 생략 가능
node_modules/는 Git에 올리지 말 것node_modules/는 npm install 시 자동 생성되는 폴더로, 설치한 모든 패키지와 그 하위 의존성이 포함됩니다.
.gitignore에 다음과 같이 등록합니다.# .gitignore
node_modules/
package-lock.json은 반드시 커밋할 것package-lock.json은 설치된 패키지의 정확한 버전, 의존성 트리, 다운로드 위치 등을 기록한 파일입니다.
npm install 결과가 다를 수 있습니다.
package.json과package-lock.json을 함께 커밋하여, 모든 팀원이 동일한 환경에서 작업하도록 합니다.
| 파일명 | 역할 | 버전 형식 | 용도 |
|---|---|---|---|
| package.json | 내가 어떤 패키지를 사용하는지 선언 | 대략적인 범위 (^, ~) | 개발자가 직접 작성·수정 (의존성 관리의 기준점) |
| package-lock.json | 실제 설치된 패키지의 정확한 버전과 경로를 기록 | 정확한 버전 (2.8.5 등) | npm이 자동 생성 및 관리 (동일한 환경 재현 보장) |
package.json은 사람이 읽고 관리하는 의존성 목록입니다.package-lock.json은 npm이 실제 설치한 버전 목록을 기록한 상세 내역서입니다.| 항목 | 요약 |
|---|---|
| npm 역할 | Node.js 패키지 설치 및 관리 도구 |
| 핵심 파일 | package.json, node_modules |
| 설치 구분 | 로컬 vs 글로벌, dependencies vs devDependencies |
| 실행 방식 | npm install, npm run, npx 실행 등 |
| 주의점 | node_moudles는 Git에 올리지 말고, package-lock.json은 반드시 포함 |