지극히 개인적인 공부 노트/자바스크립트(JS) & 타입스크립트(TS)

[JavaScript] "npm" vs "yarn"

AS J 2022. 9. 5. 15:24

1. npm이란?

npm(Node Package Manager)은 자바스크립트 프로그래밍 언어를 위한 패키지 관리자이며, 자바스크립트 런타임 환경 Node.js의 기본 패키지 관리자를 의미한다. Node.js로 만들어진 모듈을 웹에서 다운 받은 후, 쉽게 설치하고 관리해주는 프로그램으로써, 개발자 입장에서는 단 몇 줄의 명령으로 기존 공개된 모듈을 설치하여 사용할 수 있다. 이 npm은 "명령 줄 클라이언트(npm)", 공개 패키지와 지불 방식의 개인 패키지의 "온라인 데이터베이스(npm 레지스트리)"로 이루어져 있다. 여기서 레지스트리는 클라이언트를 통해 접근되며, 사용 가능한 패키지들은 npm 웹사이트를 통해 검색할 수 있다고 한다.

이런 npm이 없었을 때에는 필요한 기능을 추가하기 위해 직접 코드를 작성하거나 깃허브를 통해 별도로 다운로드하여 사용해야 했다고 한다. 그리고 이런 불편을 해소하기 위해 나타난 것이 npm이며, npm은 Node.js에 내장되어 있기 때문에 Node.js를 설치하면 npm 명령어를 통해 기능을 추가하고 관리할 수 있다.

 

 

2. yarn이란?

yarn 또한 자바스크립트 패키지 관리자이며, 프로젝트 패키지 의존성을 관리하는 툴이다. 주요 기능으로는 npm과 마찬가지로 패키지의 저장소를 제공하고 시스템에서 의존 패키지를 설치, 업데이트 할 수 있도록 도와준다. package.json 파일을 통해 해당 프로젝트가 의존하고 있는 모든 패키지를 구분하고, package.json에 있는 dependencies 필드를 기반으로 패키지를 설치한다. 덕분에 실제 패키지들이 저장되어 있는 node_modules 디렉터리 대신 package.json 파일만을 공유하여 데이터 낭비를 줄일 수 있는 것이다. 이는 npm도 마찬가지이다.

그렇다면 왜 npm이 있는데, yarn이 개발된 것일까? 간단하게 말하면 npm의 단점을 개선하고 향상시키기 위해 개발되었는데, 여기서 말하는 npm의 단점으로는 속도(performance), 안정성(stability), 보안성(security) 등이 있다.

 

 

3. "npm" vs "yarn"

 

1) 속도(performance)

yarn은 다운 받은 패키지 데이터를 캐시(cache)에 저장하여 중복 다운로드를 방지하고, 패키지 설치 또한 병렬로 처리하기 때문에 속도 측면에서 순차적으로 처리하는 npm보다 빠르다고 평가된다.

 

2) 안정성(stability) 및 보안성(security)

npm은 패키지 설치 시 자동으로 코드와 의존성을 실행할 수 있도록 허용되어 있다. 이는 보장된 정책 없이 등록한 패키지를 설치할 경우에 위험도가 높다는 점이 있다. 반면 yarn은 yarn.lock과 package.json으로부터 설치만 하고, yarn.lock은 모든 디바이스에 같은 패키지 설치를 보장하며 버전 차이로 인한 버그를 방지할 수 있다.

 

3) 정리

애초에 yarn 자체가 npm의 단점을 개선하고 향상시키기 위한 목적으로 개발되었기 때문에 여러 부분에서 npm보다 상대적으로 나은 점들이 많다. 그럼에도 npm은 상대적으로 많은 사용자 수와 쉬운 접근성이라는 장점이 존재하고, yarn은 brew나 npm을 통해 추가로 설치가 진행되어야 한다는 약간의 불편함 등이 있다. 그리고 npm을 사용해봄으로써 yarn이 어떤 점에서 이점이 있는지 직접 느낄 수 있기 때문에 두 가지를 모두 경험해보는 것이 좋을 것이고, 개인적으로도 그런 편이 좋다고 생각한다.

 

 

4. 출처

1) https://ko.wikipedia.org/wiki/Npm_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4) 

 

npm (소프트웨어) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

2) https://velog.io/@kysung95/%EA%B0%9C%EB%B0%9C%EC%83%81%EC%8B%9D-npm%EA%B3%BC-yarn

 

[개발상식] npm과 yarn

패키지 관리 툴로는 대표적으로 npm과 yarn이 있습니다.여러분들은 평소 어떠한 패키지 설치 모듈을 사용하나요?

velog.io