[ETC] -lock.json or .lock 파일은 뭘까?

2023. 8. 4. 08:59ETC

npm install 또는 yarn install을 실행하면 각각 package-lock.json 파일 또는 yarn.lock 파일이 생성됩니다. 이 파일들은 프로젝트의 의존성에 대한 구체적인 정보를 제공합니다.

package-lock.json 또는 yarn.lock 파일에는 프로젝트의 모든 의존성에 대한 정확한 버전, 패키지의 해시 체크섬, 패키지의 의존성 등의 세부 정보가 포함되어 있습니다.

또한, 이러한 lock 파일은 의존성 트리(dependency tree)를 재현하기 위해 사용됩니다. 예를 들어, 패키지 A가 패키지 B를 필요로하고, 패키지 B가 패키지 C를 필요로하는 경우, 이러한 관계가 lock 파일에 기록됩니다. 따라서 다른 환경에서 동일한 의존성 트리를 생성할 수 있게 됩니다.

이를 통해, 패키지가 정확히 동일한 버전과 구성으로 다른 개발 환경, 빌드 서버, production 환경에서도 재현될 수 있게 해주며, 이는 안정성과 예측 가능성을 확보합니다.

따라서, lock 파일은 버전 관리 시스템(예: git)에 포함시켜야 합니다. 이렇게 하면 개발 팀의 모든 멤버나 배포 파이프라인에서 동일한 패키지를 사용할 수 있습니다.

동일한 package.json 을 가지고 install을 할 경우 lock 파일이 다르게 나올수가 있는지?

package.json 파일만으로는 패키지의 하위 의존성에 대한 정확한 정보를 가지고 있지 않습니다. package.json에는 각 패키지의 주요 버전만 기록되어 있습니다. 따라서 package.json만을 기준으로 설치를 진행하게 되면, 다른 시점의 설치에서는 하위 의존성의 버전이 달라질 수 있습니다. 이것이 npm install 또는 yarn install을 실행할 때마다 동일한 package.json 파일을 사용하더라도 .lock 파일이 다르게 생성될 수 있는 이유입니다.

이런 이유로 package-lock.json 또는 yarn.lock 파일을 사용하게 됩니다. 이러한 파일들은 프로젝트의 모든 의존성(하위 의존성 포함)에 대한 구체적인 버전 정보를 포함하므로, 동일한 의존성 트리를 보장합니다. 즉, 모든 환경에서 동일한 패키지를 설치하고자 할 때는 반드시 .lock 파일을 사용해야 합니다.

그러나 이러한 lock 파일도 항상 동일하게 유지되는 것은 아닙니다. 패키지를 추가하거나 업데이트할 때마다 lock 파일이 업데이트되어야 합니다. 이 파일을 통해 프로젝트의 의존성이 시간에 따라 어떻게 변화하는지 추적할 수 있습니다. 따라서 이러한 lock 파일은 항상 버전 관리 시스템에 포함되어야 합니다.