소프트웨어 개발에서 사용되는 라이브러리, 프레임워크, 도구 들을 관리하고 설치, 업데이트, 제거하는 도구나 시스템을 말한다. 패키지 매니저의 주요 목적을 살펴보자.
의존성 관리: 소프트웨어 프로젝트는 종종 다른 소프트웨어 컴포넌트에 의존하므로, 패키지 매니저는 이러한 의존성을 관리하고 필요한 패키지를 자동으로 설치하거나 업데이트하여 개발자의 작업을 단순화한다.
설치 및 관리의 용이성: 패키지 매니저를 사용하면 명령어 한 줄로 소프트웨어 패키지를 설치하거나 업데이트할 수 있고, 패키지의 버전 관리와 업데이트도 쉽게 수행할 수 있다.
패키지 검색 및 검증: 패키지 매니저는 다양한 패키지들을 검색하고 악성코드나 보안 취약성 검사를 진행해, 그들의 버전과 품질을 평가하여 안정성과 신뢰성을 보장한다.
환경 일관성: 프로젝트의 다른 개발자나 서버 간에 소프트웨어 환경을 일관성 있게 유지할 수 있다. 모든 개발자가 동일한 버전의 패키지를 사용하므로 코드와 환경 간의 차이를 줄여준다.
(package-lock.json & yarn.lock)
npm
은 Node.js에서 기본적으로 제공되는 패키지 매니저로 많은 커뮤니티와 생태계를 갖고있다. 사람들이 노드 패키지를 만들어서 업로드하면, 사용자들은 npm과 명령줄 인터페이스를 통해 패키지의 설치가 가능하게 되었다. npm v5 이전에는 의존성 해결에 문제가 있을 수 있지만 이후로는 pakage-lock.json이 도입되어 의존성 해결이 정확해졌다고 한다.
yarn
은 npm의 단점을 보완하고 성능을 개선하는 것을 주요 목표로 출시되었다. npm의 의존성 해결 중 중복 다운로드와 일련의 요청이 발생해 속도가 저하되는 경우가 있어 yarn의 병렬 다운로드와 캐싱을 통해 의존성 문제와 패키지 설치를 빠르게 개선시켰다. 또 npm v4까지는 package.json파일로부터 여러번 설치를 수행하면 최신 버전이 설치되는 등 다른 버전의 의존성이 설치되는 문제가 있었는데, 이를 yarn.lock을 통해 이를 해결했다.
현재는 둘 다 의존성간의 의존이 없으면 여러 패키지를 병렬로 다운로드 받아 패키지 설치 속도가 빠르고, pakage-lock.json, yarn.lock을 통해 다른 환경에서도 일관된 개발 환경을 유지할 수 있어 의존성 충돌을 방지해주고 있다. npm이 자동으로 패키지에 포함된 다른 패키지 코드를 실행하는 면이 있어서 yarn이 보안면에서 더 훌륭하다는 점이 있었지만. 현재는 둘다 보안도 성능도 좋아져서 무엇을 사용해도 상관이 없다고 한다.