
npm install 명령어를 실행하면 Node.js 프로젝트의 의존성 관리를 위해 package.json, package-lock.json, node_modules가 생성되거나 업데이트됩니다. 이 세 가지는 각기 다른 역할을 수행하며, 프로젝트를 이해하고 관리하는 데 매우 중요합니다.
package.jsonpackage.json은 프로젝트의 명세서(Manifest)입니다. 프로젝트의 이름, 버전, 설명 등 기본 정보와 함께, 어떤 라이브러리(패키지)가 필요한지를 정의합니다 (프로젝트 설정 및 의존성 관리).
name: 프로젝트의 이름version: 프로젝트의 버전description: 프로젝트에 대한 설명main: 프로젝트의 진입점(시작)이 되는 파일 (예: index.js)scripts: npm run <스크립트이름> 형태로 실행할 수 있는 커스텀 명령어 (예: npm run start, npm run test)dependencies: 프로덕션(실제 서비스) 환경에서 필요한 라이브러리 목록. npm install <패키지명>으로 설치 시 여기에 추가됩니다.devDependencies: 개발 환경에서만 필요한 라이브러리 목록 (예: 테스트 도구, 빌드 도구). npm install <패키지명> --save-dev 또는 -D 옵션으로 설치 시 여기에 추가됩니다.^ (Caret) 또는 ~ (Tilde)와 함께 범위로 지정되는 경우가 많습니다. (예: "react": "^18.2.0")^18.2.0: 18.2.0 이상, 19.0.0 미만 버전 중 가장 최신 버전을 설치합니다.node_modulesnode_modules는 프로젝트 의존성(라이브러리)들의 실제 코드가 저장되는 폴더(저장소)입니다.
package.json에 명시된 모든 라이브러리의 소스 코드package.json과 package-lock.json만 있으면 npm install 명령어로 언제든지 동일하게 재생성할 수 있습니다..gitignore 파일에 node_modules를 추가하여 추적을 방지해야 합니다.)package-lock.jsonpackage-lock.json은 현재 프로젝트에 설치된 모든 패키지의 정확한 버전 정보를 기록하는 잠금(Lock) 파일입니다. npm install이 실행될 때 node_modules 디렉터리와 함께 생성/업데이트됩니다.
package.json의 버전 범위(^, ~) 때문에 발생할 수 있는 "개발자마다 다른 버전이 설치되는 문제"를 방지합니다.npm install을 실행하든 항상 동일한 버전의 패키지들이 node_modules에 설치되는 것을 보장합니다. (재현성 보장)npm install 등 npm 명령어에 의해 자동으로 관리됩니다.| 구분 | package.json | package-lock.json | node_modules |
|---|---|---|---|
| 역할 | 프로젝트 명세서 | 설치된 의존성의 정확한 버전 기록 | 실제 라이브러리 코드가 저장되는 공간 |
| 주요 내용 | 필요한 라이브러리 목록 (버전 범위) | 모든 라이브러리의 고정된 버전, 출처, 해시 | 라이브러리 소스 코드 |
| 수정 주체 | 개발자 (직접 수정) | npm (자동 관리) | npm (자동 관리) |
| 버전 관리(.git) | 포함 (O) | 포함 (O) | 미포함 (X) (.gitignore에 추가) |
| 비유 | 쇼핑 리스트 ("계란 한 판, 우유 1L") | 영수증 ("XX농장 특란 30구, YY우유 1000ml") | 쇼핑한 물건들 |