yarn vs npm 뭐가 더 좋을까?
문득 javascript로 개발하면서 yarn을 쓸때도 있고 npm을 쓸때도 있는데 둘 다 똑같은 것 같은데 왜 2개가 있을까 라는 생각을 했습니다. 그래서 yarn과 npm의 성능 비교와 차이점을 써볼까 합니다.

출처: https://medium.com/@expertappdevs/yarn-vs-npm-which-one-is-better-6cea66f39175
0. 차이점
0-1. 설치
Yarn: npm으로 yarn을 따로 설치해야합니다.
npm install yarn --global
npm: nodejs를 설치하면 바로 사용할 수 있습니다.
0-2 lock파일
Yarn:
- yarn.lock 파일을 생성합니다.
- yarn.lock 파일은 쉬운 병합에 도움이 됩니다.
npm:
- package-lock.json 파일을 생성합니다.
- package-lock.json 파일은 결정성과 단순성 사이의 균형 때문에 조금 더 복잡합니다.
0-3 log 출력 방식
Yarn:
- yarn 로그는 깨끗하고 시각적으로 구별 가능하며 간단합니다.
- 이해를 돕기 위해 트리 형식으로 정렬됩니다.
npm:
- npm은 npm 명령의 방대한 출력 로그를 생성합니다.
- 본질적으로 npm 이 하는 일에 대한 스택 추적의 뭉치입니다.
1. 설치 속도
Yarn:
- 빠른 속도: Yarn은 병렬 설치를 지원합니다. 즉, 여러 패키지를 동시에 설치할 수 있어 NPM보다 더 빠르게 설치가 됩니다.
- 캐싱: 이미 설치한 패키지는 캐시를 통해 다시 다운로드하지 않기 때문에, 동일한 패키지를 여러 번 설치할 때 매우 빠릅니다.
npm:
- 느린 속도: NPM은 기본적으로 한 번에 하나씩만 패키지를 설치하는 방식이라 Yarn에 비해 속도가 느릴 수 있습니다. NPM 5 이상에서는 일부 개선이 되었지만, Yarn의 속도에는 미치지 못하는 경우가 많습니다.
2. 안정성
Yarn:
- 버전 고정: Yarn은 yarn.lock 파일을 사용하여 의존성 버전을 고정합니다. 이는 프로젝트에서 동일한 버전의 패키지가 설치되도록 보장하여, 개발자 간에 환경 차이를 줄여줍니다.
- 일관성: yarn.lock 파일 덕분에 팀 프로젝트에서 패키지 설치가 일관되게 이루어집니다.
npm:
- 자동 버전 업데이트: npm은 package-lock.json 파일을 사용하지만, Yarn의 yarn.lock처럼 강력한 고정성을 제공하지는 않습니다. 그러나 NPM 5 이후로 package-lock.json을 도입하여 설치된 패키지 버전의 일관성을 유지할 수 있습니다.
- 환경 차이: 같은 package.json을 사용해도, NPM은 다른 개발자 환경에서 버전이 달라질 수 있는 문제가 발생할 수 있습니다.
결론: 두 시스템 모두 lock 파일을 제공하지만, Yarn이 더 강력한 버전 관리와 안정성을 제공합니다.
3. 사용자 경험
Yarn:
- 명령어의 직관성: yarn add, yarn remove 등 간단하고 명확한 명령어를 제공하여, NPM보다 사용하기 더 직관적일 수 있습니다.
- 출력 메시지: Yarn은 설치 진행 상황을 시각적으로 보여주는 progress bar를 제공하여, 설치 상태를 쉽게 파악할 수 있습니다.
NPM:
- 명령어와 메시지: NPM의 명령어는 비슷하지만, 일부 명령어 사용법이나 출력 메시지가 덜 직관적일 수 있습니다. 예를 들어, npm install 와 npm add 의 차이가 명확하지 않거나 혼동될 수 있습니다.
결론: Yarn은 UX와 직관성에서 더 나은 사용자 경험을 제공함.
4. 커뮤니티 및 지원
Yarn:
- Facebook: Yarn은 Facebook이 만든 패키지 관리자로, JavaScript 생태계에서 매우 인기가 많습니다. Facebook, Airbnb 등 큰 기업에서도 사용하고 있습니다.
- npm과 호환성: Yarn은 NPM과 호환되기 때문에, 대부분의 패키지를 사용할 수 있습니다.
npm:
- 더 큰 생태계: npm은 Node.js의 기본 패키지 관리자로, 수많은 패키지들이 등록되어 있습니다. 사실상 가장 큰 JavaScript 패키지 저장소입니다.
- 넓은 사용자 기반: NPM은 수년간 JavaScript 개발에서 가장 널리 사용되어 온 패키지 관리자이기 때문에, 커뮤니티와 지원이 매우 강력합니다.
결론: NPM은 더 큰 생태계와 지원을 자랑하며, Yarn은 Facebook과 주요 기업들이 지원하는 안정성 있는 대안입니다.
5. 기능 비교
Yarn:
- Workspaces: 여러 개의 패키지를 하나의 레포지토리에서 관리할 수 있는 기능을 제공하여, 모노레포 프로젝트에서 유리합니다.
- Offline mode: 한 번 설치한 패키지를 오프라인에서도 사용할 수 있어, 인터넷 연결이 없을 때도 패키지를 설치할 수 있습니다.
npm:
- NPM Scripts: NPM은 npm run 명령어를 통해 다양한 스크립트를 실행할 수 있습니다. Yarn에서도 지원되지만, npm은 이 기능에 더 집중하고 있습니다.
- 기본적인 기능: npm은 Yarn과 비슷한 기능을 제공하지만, 일부 고급 기능은 Yarn에 비해 부족할 수 있습니다.
결론: Yarn은 모노레포와 오프라인 기능을 제공하는 등 추가적인 기능에서 우위를 점하고 있습니다.
결론
속도와 안정성에서는 Yarn이 우수하며, 특히 대규모 프로젝트나 팀 협업에서 Yarn이 더욱 유리합니다. npm은 기본적인 생태계와 지원이 강력하며, 최근에는 많은 개선이 이루어졌습니다.
개인 프로젝트나 소규모 프로젝트에서는 두 패키지 관리자 모두 유용할 수 있으며, 사용자의 취향에 맞는 패키지 관리자를 선택하는 것이 중요합니다.
개인적인 생각
개인적으로 yarn을 많이 쓰기도 하고 yarn이 더 편하다고 생각하지만 프로젝트 팀의 따라서 팀원들의 선호에 따라서 바뀐다고 생각합니다. 그리고 찾아보았는데 npm 7은 yarn과 기능적으로 차이가 없다고 합니다. 그래서 저는 상황에 따라서 알맞게 사용하는게 좋다고 생각합니다.