npm
과 yarn
은 둘 다 자바스크립트 패키지매니저다.
즉, 둘 다 여러 자바스크립트 의존성들을 손쉽게 관리해줄 수 있는 도구라고 할 수 있다.(마치 맥 유저들이 homebrew를 통해 손 쉽게 패키지를 관리할 수 있는 것처럼..)
npm
은 노드 패키지 매니저
의 약자로 런ㄴ타임 동안 노드 환경에서 쓰이는 다양한 패키지들을 관리한다. npm은 npm registry라고 불리는 공개적인 패키지들로 구성된 db를 가지고 있다.(마치 자바의 메이븐 저장소처럼)
yarn
은 npm의 부족한 점을 개선하기 위해 페이스북에서 개발되었다. 그럼 어떤 점을 개선했을까?
1) 속도 및 성능
npm
은 일반적으로 동기적인 방식으로 패키지를 다운로드한다. 즉, 하나 하나 순차적으로 다운로드를 한다. 반면에 yarn
은 병렬적으로 패키지를 다운로드 하기에 훨씬 속도도 빠르고 성능도 좋다.
2) 보안성
이 특징은 편리한 기능이지만 안정성을 위협할 수 있다고 한다. 하지만 npm
은 패키지를 다운로드 받을때 의존성이 있는 다른 패키지들도 같이 다운받는다.yarn
은 yarn.lock 파일이나 package.json 에 설정되있는 패키지들만 다운로드 받는다. 그로 인해 여러 디바이스에도 동일한 패키지를 설치할 수 있도록 보장해준다.
(2022-04-13 추가)그럼 yarn은 패키지를 다운 받을때 관련된 의존성을 다 다운받는 것일까?
결론부터 말하면 아니라 할 수 있다. 아래 커맨드 명령어로 antd
패키지를 설치해보자.
1
yarn add -D antd
그러면 다음과 같이 antd
과 의존하는 디펜던시들을 lock 파일에서 찾을 수 있고, 실제 node_modules
에 의존하는 디펜던시들이 함께 설치된 것을 확인할 수 있다.
그러므로 yarn
도 의존하는 패키지들을 함꼐 설치한다고 볼 수 있다.