[Node.js] npm 주요 파일: package.json, package-lock.json, node_modules

artp·2025년 9월 24일

node.js

목록 보기
9/9
post-thumbnail

npm 주요 파일: package.json, package-lock.json, node_modules

npm install 명령어를 실행하면 Node.js 프로젝트의 의존성 관리를 위해 package.json, package-lock.json, node_modules가 생성되거나 업데이트됩니다. 이 세 가지는 각기 다른 역할을 수행하며, 프로젝트를 이해하고 관리하는 데 매우 중요합니다.

1. package.json

역할

package.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 미만 버전 중 가장 최신 버전을 설치합니다.
  • Git과 같은 버전 관리 시스템에 반드시 포함되어야 합니다. 다른 개발자가 이 파일을 통해 동일한 의존성을 설치할 수 있습니다.

2. node_modules

역할

node_modules프로젝트 의존성(라이브러리)들의 실제 코드가 저장되는 폴더(저장소)입니다.

주요 내용

  • package.json에 명시된 모든 라이브러리의 소스 코드
  • 해당 라이브러리들이 의존하는 또 다른 라이브러리들의 소스 코드 (전체 의존성 트리)

특징 및 관리

  • 수많은 파일과 폴더로 구성되어 매우 큰 용량을 차지합니다.
  • package.jsonpackage-lock.json만 있으면 npm install 명령어로 언제든지 동일하게 재생성할 수 있습니다.
  • 따라서, Git과 같은 버전 관리 시스템에는 절대 포함하지 않습니다. (.gitignore 파일에 node_modules를 추가하여 추적을 방지해야 합니다.)

3. package-lock.json

역할

package-lock.json현재 프로젝트에 설치된 모든 패키지의 정확한 버전 정보를 기록하는 잠금(Lock) 파일입니다. npm install이 실행될 때 node_modules 디렉터리와 함께 생성/업데이트됩니다.

주요 내용

  • 프로젝트에 설치된 모든 패키지(하위 의존성 포함)의 정확한(고정된) 버전
  • 각 패키지를 다운로드한 위치(URL)
  • 패키지의 무결성을 검증하기 위한 해시(integrity) 값

특징 및 관리

  • package.json의 버전 범위(^, ~) 때문에 발생할 수 있는 "개발자마다 다른 버전이 설치되는 문제"를 방지합니다.
  • 이 파일이 있으면, 누가 언제 npm install을 실행하든 항상 동일한 버전의 패키지들이 node_modules에 설치되는 것을 보장합니다. (재현성 보장)
  • 사람이 직접 수정하는 파일이 아닙니다. npm install 등 npm 명령어에 의해 자동으로 관리됩니다.
  • 협업의 일관성과 배포 안정성을 위해 Git과 같은 버전 관리 시스템에 반드시 포함되어야 합니다.

요약

구분package.jsonpackage-lock.jsonnode_modules
역할프로젝트 명세서설치된 의존성의 정확한 버전 기록실제 라이브러리 코드가 저장되는 공간
주요 내용필요한 라이브러리 목록 (버전 범위)모든 라이브러리의 고정된 버전, 출처, 해시라이브러리 소스 코드
수정 주체개발자 (직접 수정)npm (자동 관리)npm (자동 관리)
버전 관리(.git)포함 (O)포함 (O)미포함 (X) (.gitignore에 추가)
비유쇼핑 리스트 ("계란 한 판, 우유 1L")영수증 ("XX농장 특란 30구, YY우유 1000ml")쇼핑한 물건들
profile
donggyun_ee

0개의 댓글