npm 의존성 그래프와 잠금 파일은 설치 결과를 재현한다
package.json은 의도 범위를 적고 lockfile은 실제로 설치된 전체 트리와 정확한 버전을 고정한다.
| 파일 | 맡는 일 | 바뀌는 시점 | 검토 기준 |
|---|---|---|---|
| package.json | 직접 의존성과 버전 범위 기록 | 패키지 추가·삭제·범위 변경 | 필요한 패키지만 직접 의존성 |
| package-lock.json | 전체 의존성 트리와 정확한 버전 고정 | install/update 후 변경 | 의도하지 않은 대량 변경 확인 |
| node_modules | 실제 설치된 파일 | 로컬 설치 때 생성 | 커밋하지 않음 |
| semver range | 허용 가능한 업데이트 범위 | ^, ~, exact | 예상보다 큰 업데이트 방지 |
| npm ci | lockfile 기준 깨끗한 설치 | CI와 배포 환경 | lockfile과 package.json 불일치 실패 |
잠금 파일은 잡음이 아니라 팀과 CI가 같은 의존성 그래프를 설치하게 만드는 재현성 장치다.