Node 환경의 패키지 관리툴인 npm을 사용하면 package.json과 package-lock.json 파일이 생성되게 됩니다. 아래는 package-lock.json 파일에 대하여 알아보려고 합니다.



# package-lock.json 무엇인가
먼저 언제 이 파일이 생성 될까요? npm install 등의 방법으로 package.json 또는 /node_modules/를 업데이트, 변경하게 되면 package-lock.json 파일이 생성 및 변경되게 됩니다.

생성된 package-lock.json은 package.json과는 비슷하지만 다른 정보를 가지고 있습니다. 내부를 확인해보면 모든 의존성(디펜던시) 정보를 가지고 있으며 이때의 디펜던시는 또 다른 하위 디펜던시 정보를 가지는 하이라키(계층) 구조로 되어있죠.

package-lock.json가 가지는 정보
// 생성 시점에 가지고 있던 디펜던시 정보를 가짐

- 파일 내부
- 이름
- 버전
- 디펜던시 현황
- 기타 등등

그럼 이렇게 생성된 package-lock.json는 언제 필요할까요?


!  package-lock.json이 존재하는 이유. 필요한 경우
다수의 개발자들이 패키지 모듈을 각자의 로컬에 생성하는 경우 설치된 모듈들은 그 시점에 따라 동일하지 않은 패키지 버전이 설치될 수 있습니다. 이 경우 일반적인 상황에서는 큰 필요가 없으나 만약 의존성을 가지는 패키지의 하위 디펜던시의 버전 차이로동작하지 않는 등의 문제가 발생할 수 있겠죠...

이 경우 동일한 버전의 의존성 환경을 구축 하기 위해서 package-lock.json을 사용한 개발환경 구축 등이 필요할 수 있습니다. 즉 package.json보다 pacakge-lock.json이 가진 정보가 실제 설치될 모듈 정보를 더 정확하게 가지고 있다는 뜻이며 더 안전하게 환경구축이 가능할 수 있다는 뜻이기도 합니다.

참고로 각자의 로컬에 생성된 모든 package-lock.json을 git 등을 사용해 동기화할 필요는 없을 것입니다. 이 경우 pacakge-lock.json 파일을 git에 올리지 않는 방법도 있고 아니면 npm install을 실행할 때 npm config의 package-lock 값을 false로 설정할 수도 있습니다.
> npm config set package-lock false
 
위와 같이 설정하게 되면 package-lock.json을 사용하지 않도록 해당 파일이 disabled 처리가 됩니다. 또 다른 방법으로 package-lock.json 파일을 삭제 후 모듈을 설치하는 것 역시 하나의 방법입니다.

다수의 개발자들이 package-lock.json을 사용하지 않도록 삭제하거나 비활성화하는 방법을 선택합니다. 하지만 여기서 중요한 점은 package-lock.json은 매우 중요한 역할을 수행하는 꼭 필요한 존재이며 일반적으로  package-lock.json 파일 역시 git 등의 레포지토리 함께 저장할 것이 권장된다는 점입니다.