npm이나 yarn을 사용하면 package-lock.json
, yarn.lock
파일이 생성되는 것을 확인할 수 있다.
왜 그럴까?
자세한 내용은 여기에서 확인할 수 있는데 간략하게 정리해보자면 다음과 같다.
- 잠금 파일(lock)이 생긴 이유는 설치할때마다 동일한 패키지 버전을 보장하기 위해서이다.
- 왜냐하면, 시맨틱 버저닝 규칙에 따른
~
,^
때문이다. - 예를 들어,
"react": "^16.8.2"
이렇게 리액트 버전을 지정할 경우16.8.2
이상17.0.0
미만의 범위로 버전이 지정된다. - 잠금 파일이 없을 경우에, 오늘 설치하는 경우엔
16.8.2
가 다운받겠지만 6개월 뒤에 새로운 신입이 들어와서 다운을 받을 경우엔 그 당시의 최신 버전인16.9.0
이 다운 받아진다.(위 예시는 임의로 지어낸 예시이다.) - 이는 다양한 문제를 야기한다. 버전 이슈로 인해 개발 서버에서는 오류가 발생하나, 로컬 PC에서는 정상적으로 동작할 수 있게 되고 같이 협업하는 개발자들끼리도 혼선이 오게된다. (16.9.0버전에서는 a라는 기능이 사용 가능하지만, 16.8.2에서는 안되는 경우)
- 이러한 문제들로 인해 잠금 파일(
package-lock.json
,yarn.lock
)이 만들어지게 되었고, 이를 통해 최초 패키지가 설치될때의 버전을 기록하게 되어, 6개월 뒤에 새로운 신입이 들어온다 했을때, 잠금파일에 명시된 패키지 버전에 따라 다운 받게 되어 모두 동일한 환경을 가질 수 있게 되는 것이다.