우선 개발에 있어서 npm과 yarn, 이 둘의 차이는 크게 없다라고 보면 된다.
yarn이 npm보다 더 나은 점은 다음과 같이 요약할 수 있다.
1. 속도가 더 빠르다. (performance)
2. 보안성이 좋다. (security)
자바스크립트 패키지 매니저 (Javascript Package Manager)
npm과 yarn은 자바스크립트 패키지 매니저이다.
여기서 패키지란 npm에 업로드된 노드 모듈을 말한다. 다양한 자바스크립트 프로그램이 패키지라는 이름으로 npm에 등록되어 있고, 패키지가 다른 패키지를 사용할 경우 의존 관계를 가지기도 한다. 이러한 패키지들을 사용하기 위해서는 다운로드, 설치, 업데이트, 의존성 관리, 제거 등 복잡한 상황들이 많이 생기는데 패키지 매니저는 이러한 과정들을 자동화하여 편리하고 안전하게 수행할 수 있도록 해준다. 그렇다면 npm과 yarn 각각이 가지고 있는 특징들로는 어떤 것들이 있을까?
* npm (node package manager)
npm(node package manager) 런타임 동안 노드 환경에서 쓰이는 다양한 패키지들을 관리한다.
npm은 npm registry라고 불리는 공개적인 패키지들로 구성된 데이터베이스를 가지고 있다.
* Yarn
yarn은 npm의 부족한 부분들을 개선하기 위해 Facebook에서 개발되었다. Yarn은 npm이 사용하는 동일한 npm 구조에 의존한다. 따라서 패키지의 레지스트리에 대한 것은 바뀌지 않았고, 설치 절차가 바뀌었다고 생각하면 된다.
npm vs Yarn
그렇다면, 이 두 패키지 매니저의 차이점들로는 어떤 것들이 있을까?
* Speed (Performance)
npm은 필수 단계를 순차적으로 수행하는 경향이 있어서 다음 패키지로 넘어가기 전에 각 패키지를 완전히 설치해야 한다고 한다.
하지만 Yarn은 동시에 여러 패키지들을 설치할 수 있기 때문에 속도 면에서 크게 향상된다는 것이다.
그런데 이 속도의 문제도 npm 5.0 아래의 버전으로 놓고 봤을 때의 문제이다. npm 5.0 버전은 그 아래 버전들보다 5배는 더 빠르다고 npm 개발자들이 언급하였다고 한다.
그리고 그 이후 npm V6.10.1과 yarn V1.17.3으로 install 속도 실험을 하였는데, yarn이 승리하였지만 그 차이는 아주 근소한 차이라고 한다. 이제는 거의 차이가 없어졌다고 볼 수 있는 문제인 것 같다.
* Security
npm은 의존 관계를 가지는 다른 패키지들이 즉시 포함되도록 한다. 이런 부분이 더 편리하긴 한데 보안 문제에 있어 여러 취약점들을 불러올 수 있다고 한다. 이게 커지면 나중에는 더 큰 문제로 발전할 수도 있다는 것.
반면에 Yarn은 yarn.lock이나 package.json 파일에 있는 것들만 설치를 한다. 이런 방식은 모든 디바이스에 같은 패키지들을 설치하는 것을 보장하기 때문에 디바이스마다 다른 버전을 설치해서 발생할 수 있는 버그들을 많이 줄였다는 것이다.
이 보안성 문제가 npm과 yarn을 비교할 때 아주 중요한 측면이라고 할 수 있고, 이 부분은 계속 강화되고 있다고 하니 보안성을 따질 때는 yarn이 더 좋다고 말할 수 있다.
* 패키지 잠금 파일
npm은 package-lock.json
yarn은 yarn.lock 파일을 패키지 잠금 파일로 사용한다.
이 외에도 다양한 차이점들이 있다. 명령어에도 조금씩 차이가 있는데, 패키지를 추가하고 싶을 때
npm은 npm install <package>
yarn은 yarn add <package> 명령어를 사용한다.
패키지 제거에 있어서도
npm에서는 npm uninstall/rm <pacakge>를 사용하지만,
yarn은 yarn remove <package> 명령을 통해 수행한다.
'Study > Node.js' 카테고리의 다른 글
[Node.js_study] 서버에서 HTML 파일전송(GET요청) (0) | 2022.04.15 |
---|---|
[Node.js_study] 서버에 GET 요청 처리 해보기 (0) | 2022.04.15 |
[Node.js_study] Node.js와 Express 라이브러리 설치하기 (0) | 2022.04.15 |
[Node.js_study] Node.js에 대해서 (Non-blocking I/O) (0) | 2022.04.15 |
[Node.js_study] 소스코드 수정시 자동으로 재시작 해주는 PM2, Nodemon (0) | 2021.12.22 |