
패키지는 관련된 코드와 의존성 정보를 함께 포함하는 단위로, 코드 재사용, 의존성 관리, 버전 관리를 쉽게 해줍니다. 패키지 매니저는 이러한 패키지를 설치, 업데이트, 삭제 등을 관리하는 도구입니다. 패키지 매니저가 없을 때는 직접 소스 코드를 다운받아 사용하는 방식이었지만, 현재는 각 언어마다 패키지 매니저가 존재합니다.
| 언어 | 패키지 매니저 |
|---|---|
| Node | npm, yarn |
| Python | pip |
| Java | Maven, Gradle |
해당 글에서는 Node를 기준으로 매니저별 장단점을 정리합니다.
패키지 매니저가 라이브러리들을 관리한다는 것 하나만을 바라보았을 때 해당 서비스가 많을 필요가 있나? 라고 생각을 할 수 있습니다. 이러한 패키지 매니저들은 각각의 다른 관리 방법을 가지고 있으며 이를 통해 개발자가 손쉽게 패키지를 관리할 수 있도록 도와줍니다.

Node.js와 함께 기본 설치되는 대표적인 패키지 매니저입니다. CLI 기능이 강력하지만, 의존성 관리 문제로 인해 설치 속도가 느리고 저장 용량을 많이 차지할 수 있습니다.

npm의 의존성 관리 문제를 해결한 패키지 매니저로, 플랫 노드 모듈을 통해 중복 설치를 피하고 의존성 설치 속도를 향상시킵니다. 하지만 모든 패키지를 순회하면서 의존성을 검사해야 하므로, 일부 경우 느려질 수 있습니다.
npm의 문제를 해결하기 위해 개발된 패키지 매니저로, 패키지를 병렬로 설치하여 빠른 속도를 제공합니다. yarn.lock 파일을 통해 의존성 관리가 더 안정적이며, 캐시 기능으로 다운로드를 최적화합니다.
Yarn의 최신 버전으로, Zero-install과 Plug'n'Play(PnP)를 통해 의존성 설치 속도를 극대화하고 저장 공간을 절약합니다. PnP는 node_modules 폴더를 없애고 의존성을 Map 객체로 처리하여 더욱 빠르고 엄격하게 관리하며, Zero-install은 설치 과정을 생략할 수 있습니다. 하지만 저장소 용량이 증가하고 의존성 업데이트 시 관리가 필요하다는 단점도 있습니다.