본문 바로가기
Web

자바스크립트 패키지 매니저 / npm 과 yarn 비교

by @__100.s 2024. 1. 28.
반응형

 

 

 

Node.js로 프로젝트를 진행할 때, 패키지 관리를 위해 주로 npmyarn을 선택한다. 프로젝트는 일관된 패키지 매니저를 사용하는 것이 중요하며 npm과 yarn은 패키지 관리 방식이 다르기 때문에 충돌이 날 수 있으므로 혼용하지 않는 것이 좋다. 따라서 프로젝트를 넘겨 받았을 때, yarn.lock 파일이 있다면 yarn을 사용하고, package-lock.json 파일이 있다면 npm을 사용하는 등 프로젝트 팀 간에 일관성을 유지하는 것이 중요하다. 만약 프로젝트에서 yarn.lock package-lock.json이 동시에 존재한다면 프로젝트 개발환경을 정리하고 앞으로의 프로젝트에서는 선택된 패키지 매니저를 사용하여 일관성 있게 개발을 진행하는 것이 미래에 발생할 수 있는 의존성 충돌을 방지할 수 있다.


 

 

 

NPM (Node Package Manager)

  • NPM(Node Package Manager)은 자바스크립트 언어를 위한 패키지 관리자로, Node.js의 기본 패키지 관리자이다. Node.js로 만들어진 모듈을 웹에서 받아서 쉽게 설치하고 관리해주는 프로그램으로 개발자 입장에서는 단 몇 줄의 command로 기존 공개된 모듈들을 설치하고 활용할 수 있다. npm은 command CLInpm registry 로 구성되어있다.
    npm이 없었을 때에는 필요로 하는 기능을 추가하기 위해서 직접 작성하거나 github를 통해 다운로드하여 사용해야 했다. 이러한 불편을 해소하기 위해 나타났으며, Node.js를 설치하기만 하면(기본적으로 npm은 Node.js 내에 내장되어 있습니다) 명령어 한 줄로 기능의 추가가 가능하다.

 

Yarn

  • Yarn은 페이스북에서 만든 자바스크립트 패키지 매니저로 리액트(React)와 같은 프로젝트를 진행하며 npm의 단점을 느껴 개발되었다. npm과 같은 기능을 수행하나, npm 레지스트리와 호환하면서 속도나 안정성 측면에서 npm보다 향상되었다.

 

Command-line client : 커맨드 라인 인터페이스(CLI)를 사용하여 서버 또는 서비스와 상호 작용하는 프로그램. NPM의 경우, npm 패키지 매니저의 명령어를 실행하는 도구로 "npm”, Yarn의 경우 Yarn 패키지 매니저의 명령어를 실행하는 도구로 "yarn"이라는 명령어를 사용하여 패키지를 설치하거나 관리할 수 있습니다.

npm init //package.json 생성
npm install //프로젝트의 의존성 패키지 설치
npm install package_name@version //특정 패키지를 지정된 버전으로 설치
npm install url // URL을 통해 패키지를 설치
npm install package_name -g // 특정 패키지 전역 설치
npm uninstall // 프로젝트에서 패키지를 제거
npm update // 패키지를 최신 버전으로 업데이트
npm dedupe // 중복된 패키지 정리

 

yarn init //package.json 생성
yarn install //프로젝트의 의존성 패키지 설치
yarn add package_name@version //특정 패키지를 지정된 버전으로 설치
yarn add url // URL을 통해 패키지를 설치
yarn global add package_name // 특정 패키지 전역 설치
yarn remove // 프로젝트에서 패키지를 제거
yarn upgrade // 패키지를 최신 버전으로 업데이트
yarn dedupe // 중복된 패키지 정리

 

 

npm Registry : Node.js 패키지들의 중앙 저장소로, 이곳에서 패키지들을 찾고 다운로드할 수 있다.

  • npm 공식 웹사이트에서 패키지 검색 및 정보 확인 가능.
  • npm install 이나 yarn add 명령을 통해 패키지를 다운로드할 때, npm registry에서 해당 패키지를 가져옴.
    • npm registry에서 패키지 정보를 가져오는 동작은 npm과 Yarn에서 공통적으로 이루어지는 프로세스이다. yarn 또한 npm registry에서 해당 패키지를 찾아 다운로드하고, yarn.lock 파일을 업데이트하여 패키지의 정확한 버전 및 의존성 정보를 기록한다.

 

 

NPM vs Yarn : 성능과 보안 비교

  • 속도(perfomance) : npm < yarn
    npm은 패키지를 한번에 하나씩 순차적으로 설치한다. 반면에 yarn은 여러 개의 패키지를 병렬로 처리하여 설치하기 때문에 패키지 처리 속도에서 우세하다. 특히 대규모 프로젝트에서 많은 의존성을 가진 패키지들을 빠르게 설치할 수 있는 장점이 있다.
  • 보안과 안정성 (Security / Stability) : npm < yarn
    npm은 패키지가 설치될 떄, 자동으로 패키지에 포함된 다른 패키지 코드를 실행할 수 있도록 허용하였다. 이는 편리하지만 동시에 안전성을 위협할 수 있다. 특히나 보장된 정책 없이 등록한 패키지가 존재할 수 있다는 점에서 더욱 위험도가 높다. 반면 yarn은 패키지를 설치할 때 yarn.lock이나 package.json 내의 파일들만을 설치하는 것을 보장한다. 이로써 외부에서의 코드 실행을 최소화하여 패키지 설치의 보안성을 강화한다.


마무리

yarn이 처음에는 npm의 보안 이슈를 보완하고 속도와 안정성 면에서 우수하게 나왔지만, npm도 지속적으로 업데이트를 통해 단점을 보완해왔다. 그 결과, 현재는 npm과 yarn 간의 성능 및 안정성 차이가 크지 않다.

다만 언급한 것처럼 yarn은 병렬적인 패키지 설치로 인한 가벼움과 버전 간 차이로 인한 버그 방지 등의 기능에서 뛰어나다는 특징이 있다. 그러나 npm은 여전히 가장 많은 사용자를 보유하고 있다. 아마도 이는 npm의 편리한 접근성 때문일 것으로 생각된다. (yarn의 경우는 brew나 npm을 통해 한번 더 설치를 해줘야하는 불편함이 존재)

따라서 선택은 개발자의 선호도와 프로젝트의 특정 요구사항에 따라 다를 수 있다고 생각한다.


참고

 

반응형