그 동안 npm만 활용하여 패키지 관리를 하였는데, 최근 yarn을 활용해보면서
둘의 차이점이 궁금하여 찾아본 내용을 정리해봅니다.
npm과 yarn 모두 자바스크립트 런타임 환경인 노드(node.js)의 패키지 관리자 입니다.
npm 온라인 데이터베이스에 개발자들이 자바스크립트로 만든 여러 패키지를 올리면 이런 패키지 관리자를 통해 패키지를 설치하거나 삭제, 버전 관리와 의존성 관리 등을 편리하게 할 수 있습니다.
npm
npm(Node Package Manager)은 노드를 설치할 때 제공되는 기본 패키지 관리자입니다.
전 세계적으로 가장 많이 사용하는 패키지 관리 도구로써 공개된 모듈을 손쉽게 설치하고 활용할 수 있게 도와줍니다.
npm은 commend-line client와 online database인 npm registry로 이루어져있으며, npm registry에 공개된 패키지들을 CLI 명령어를 통해 프로젝트에 해당 패키지를 쉽게 적용할 수 있습니다.
yarn
yarn은 2016년에 facebook에서 npm의 부족한 부분을 개선하기 위해 개발했습니다.
그래서 npm보다 속도와 안정성, 보안성 측면에서 향상된 모습을 보여줍니다.
npm을 통해 설치할 수 있습니다.
npm install -g yarn
속도(perfomance)
yarn은 설치한 패키지를 캐시(cache)에 저장하며 종속성을 검사하며 중복 데이터를 확인합니다.
또한, npm이 패키지를 순차적으로 처리하는 반면, yarn은 병렬로 처리하여 패키지를 동시에 설치합니다.
그렇기 때문에 yarn이 처음 나왔을 당시에는 npm에 비해 월등히 빠른 속도를 자랑했지만,
현재는 npm 버전이 업데이트 되면서 비슷한 수준이라고 합니다. (그래도 yarn이 빠른가봄)
안정성(stability)과 보안성(security)
npm은 의존 관계를 가지는 다른 패키지들이 즉시 포함되게 되어있어 편리하지만 보안 문제에는 취약합니다. 반면 yarn은 yarn.lock, package.json에 존재하는 패키지만 설치합니다. 따라서 모든 디바이스에서 같은 패키지를 설치하는 것을 보장받을 수 있어 충돌 문제를 예방할 수 있습니다.
이 부분도 현재는 npm 5버전 이후부터 업데이트를 통해 package-lock.json
이 생기면서 어느정도 따라왔다고 합니다.
Yarn 2 (Yarn Berry)
yarn을 개선하여 다양한 기능을 제공합니다. 특히 Plug'n'Play(PnP)라는 고유한 패키지 설치 방법을 기본으로 합니다.
이 방식은 node_module 폴더 대신 종속성을 매핑하는 단일 파일(.pnp.cjs
)을 생성하여 종속성 트리를 간소화 시켜 프로젝트 시작 및 패키지 설치가 빨라집니다.
또한 모든 의존성이 하나의 파일에서 관리되기 때문에 외부 환경에 영향 받지 않습니다.
또한 Zero-Install 방식으로 의존성을 버전 관리에 포함합니다. 따라서 새로 저장소를 복제하거나, 브랜치를 이동했을 경우에도 yarn (yarn install) 과 같은 명령어를 통해 의존성 설치를 진행할 필요가 없습니다.
결론
yarn을 사용한다면 하드 디스크 용량을 더 잡아먹지만 성능과 보안은 좋을 수 있다.
그래도 npm이 업데이트를 통해 비슷한 수준이라니 둘 다 써보고 편한 것으로 사용하면 될 듯 싶습니다.
명령어 비교
Reference
'개발일기 > Web' 카테고리의 다른 글
[React] React Hooks 이해하기 (0) | 2023.06.23 |
---|---|
[React] 리액트 클래스형 컴포넌트의 생명 주기 메서드(Life Cycle) (0) | 2023.06.20 |
[Babel] 바벨? (0) | 2023.05.25 |
[webpack] 웹팩이란? (0) | 2023.05.18 |
[React] 로그인 후 이전 페이지로 이동 구현 (0) | 2022.10.11 |