npm과 Yarn은 모두 자바스크립트 패키지 매니저로, 프로젝트의 종속성(패키지)을 설치하고 관리하는 데 사용됩니다.
- Npm (Node Package Manager): Node.js와 함께 기본적으로 제공되는 패키지 매니저입니다. Node.js 패키지의 설치, 업데이트, 삭제 등을 관리할 수 있습니다.
- Yarn: Facebook에서 2016년에 npm의 단점을 보완하기 위해 만든 패키지 매니저입니다. 초기에는 성능과 안정성 면에서 npm보다 우수했지만, 현재는 npm도 많이 개선되었습니다.
npm
npm install 명령어를 통해 패키지를 설치합니다.
설치된 패키지를 디스크에 캐시하긴 하지만, 캐시 활용이 비교적 제한적이었습니다. 그러나 이후 버전에서 package-lock.json을 통해 설치 속도가 많이 개선되었습니다.
npm install
명령어로 패키지를 설치합니다.
yarn
설치된 패키지를 더 적극적으로 캐시하여, 동일한 패키지 설치 시 속도가 훨씬 빠릅니다.
병렬 설치를 기본적으로 지원하여, 여러 패키지를 동시에 설치해 설치 시간을 단축합니다.
yarn install
명령어로 패키지를 설치합니다.
npm (package-lock.json)
package-lock.json 파일은 프로젝트에 설치된 정확한 패키지 버전과 종속성 구조를 기록합니다. 이를 통해 다른 개발자가 동일한 종속성을 설치할 수 있도록 보장합니다.
모든 설치된 패키지의 해시와 URL도 포함되어 있어, 패키지의 무결성을 검증할 수 있습니다.
yarn(yarn.lock)
yarn.lock 파일은 package-lock.json과 유사하게 모든 종속성과 정확한 버전을 기록하여 일관된 설치를 보장합니다.
초기 버전의 Yarn은 npm보다 잠금 파일 처리와 성능에서 더 우수했지만, npm의 개선으로 차이가 많이 줄어들었습니다.
패키지 설치: npm install <package>
패키지 제거: npm uninstall <package>
특정 버전 설치: npm install <package>@<version>
개발 의존성 설치: npm install <package> --save-dev
패키지 설치: yarn add <package>
패키지 제거: yarn remove <package>
특정 버전 설치: yarn add <package>@<version>
개발 의존성 설치: yarn add <package> --dev
npm
초기 버전의 npm은 병렬 설치를 지원하지 않아, 설치 속도가 느렸습니다. 그러나 이후 버전에서는 병렬 설치가 지원됩니다.
오프라인 설치는 기본적으로 제공되지 않습니다. 캐시된 파일이 있다면 활용할 수 있지만, yarn만큼 완전한 오프라인 설치 지원은 아닙니다.
yarn
기본적으로 병렬 설치를 통해 속도가 빠릅니다.
캐시된 패키지 정보를 이용해 오프라인 모드에서도 설치가 가능합니다(yarn install --offline).
npm
npm 7부터 Workspaces 기능을 제공하며, 모노레포(Monorepo) 설정을 위한 지원이 강화되었습니다.
여러 패키지의 종속성을 한 번에 설치하거나 공통 종속성을 공유할 수 있습니다.
yarn
Workspaces 기능을 오래전부터 제공하며, 모노레포 구조의 프로젝트를 쉽게 관리할 수 있습니다.
여러 패키지의 종속성을 중앙에서 통합 관리할 수 있어, 모노레포에서 매우 유리합니다.
Workspaces는 하나의 프로젝트에서 여러 개의 패키지를 함께 관리할 수 있도록 도와주는 기능입니다. 주로 모노레포(Monorepo) 환경에서 사용됩니다. 모노레포는 여러 패키지를 하나의 코드베이스에 통합하여 관리하는 방식입니다.