package.json vs package-lock.json

    
`package.json`과 `package-lock.json` 두 파일 모두 npm을 사용하여 프로젝트의 의존성을 관리할 때 생성되고 사용되는 파일들입니다. 그러나 두 파일의 목적과 내용은 다르기 때문에 차이점을 이해하는 것이 중요합니다.



1. **package.json**:

   - **프로젝트 메타데이터**: 프로젝트의 이름, 버전, 설명, 스크립트, 라이센스 등의 기본 정보가 포함됩니다.

   - **의존성 목록**: 프로젝트에서 사용하는 외부 패키지들의 목록과 해당 패키지들의 "버전 범위"가 명시됩니다. 이 버전 범위는 `^`, `~`와 같은 특수 문자를 사용하여 표시되며, 이를 통해 특정 패키지의 어느 버전까지 허용할 것인지 결정합니다.

   - `npm install` 명령어를 사용하면 `package.json`에 명시된 의존성 버전 범위에 따라 패키지를 설치합니다.



2. **package-lock.json**:

   - **의존성 트리의 정확한 스냅샷**: 프로젝트의 모든 의존성과 해당 의존성의 **정확한 버전**, 그리고 그 의존성들이 의존하는 다른 패키지들에 대한 정보까지 포함합니다.

   - `package-lock.json`은 프로젝트의 의존성 트리를 "잠금"하여 동일한 의존성 구조가 항상 복원될 수 있도록 보장합니다. 이는 다양한 환경에서 일관된 설치를 보장하기 위한 목적으로 사용됩니다.

   - `npm install` 명령어가 실행될 때 `package-lock.json`이 있으면 이 파일에 기술된 정확한 버전의 패키지가 설치됩니다. 만약 이 파일이 없다면, `package.json`의 버전 범위에 따라 패키지가 설치되며, 이 과정에서 새로운 `package-lock.json`이 생성될 수 있습니다.



**요약**:

- `package.json`은 프로젝트의 의존성을 **선언**하는 파일입니다.

- `package-lock.json`은 프로젝트의 의존성 트리의 정확한 스냅샷을 **기록**하는 파일입니다.



두 파일 모두 소스 관리 시스템에 포함되어야 합니다. 이렇게 함으로써 다른 개발자나 다른 환경에서도 동일한 의존성 구조를 가진 프로젝트를 설정할 수 있습니다.





+++





`integrity` 필드 내의 `sha512` 값은 암호화된 것이 아니라 암호 해시입니다. 이 해시는 해당 패키지의 내용을 확인하기 위해 사용됩니다. 즉, `npm`이 패키지를 설치할 때 해당 패키지의 내용이 예상대로, 그리고 중간에 변조되지 않았음을 확인하기 위해 사용하는 체크섬입니다.

`integrity` 값을 공유하는 것은 안전하며, `package-lock.json` 파일은 일반적으로 소스 코드와 함께 공유됩니다. 이 값은 패키지의 내용에 대한 정보를 제공하지 않으므로 민감한 데이터나 비밀 정보를 포함하고 있지 않습니다.

간단하게 말씀드리면 `integrity` 필드에 있는 `sha512` 값은 패키지의 내용이 제대로 다운로드되었는지 확인하는 용도로 사용되는 체크코드입니다. 이 코드는 민감한 정보가 아니기 때문에 공유해도 문제가 없습니다. 그냥 패키지가 올바르게 설치되었는지 확인하는 데 사용되는 코드라고 생각하시면 됩니다.

                                      

댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet