npm 과 yarn 은 뭐가 다를까 ?

·

3 min read

개요

이전 시간에 npm 과 npx 에 대해 비교해봤다. 이번에는 npm과 yarn 에 대해 비교해본다. 평소에 JS 프로젝트를 진행하면서 npm 으로 패키지를 관리하는데, 뭔가 무겁다 정도의 느낌을 받을 정도로 개발을 해왔던, 조금이라도 그런 느낌을 받았다면 이 포스팅이 조금은 도움이 되리라.

본론

📍 npm

이전 시간에 "정의"에 대해서는 정리를 하였으니 간략하게.

  • Node Package Manager(Javascript Node)
  • Node.js 로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 프로그램
  • 온라인 데이터베이스(Registry)와 클라이언트(Node CLI)를 통해 접근 가능

장점 🔍

  • 유용한 패키지들을 받아서 쉽게 사용가능
  • 세계 최대 규모의 패키지들을 보유하고 있고 Node 생태계를 견고하게 해준다.
  • 즉, 관련 커뮤니티도 이미 많이 활성화되어있어 접근성이 좋다.

단점 🔍

  • 저장소의 취약한 보안이슈, 의존 패키지의 버저닝 이슈
  • 패키지가 많아짐에 따라 빌드 성능이 떨어짐

📍 yarn

yarn페이스북 에서 만든 역시, Javascript Package Manager 이다. 즉, npm 과 같은 기능을 수행한다. 그럼에도 yarn 이라는 것이 별도로 왜 탄생하였냐 ? yarn 은 기본적으로 npm 의 단점을 느꼈기 때문에 이를 향상시키기 위해 만들어진 매니징 툴이다. 여기서 말하는 npm의 단점으로는 크게 속도(performance), 안정성(stability), 보안성(security) 등이 있다.

속도(performance)

  • yarn 은 다운받은 패키지 데이터를 캐시(cache)에 저장하여, 중복된 데이터는 다운로드 하지않고, 캐시에 저장된 파일을 활용함으로써, npm 에 비해 패키지 설치속도가 매우 빠르다.
  • 여러개의 패키지를 설치할 때 병렬로 처리하기 때문에 performance 와 speed가 증가된다. (npm 은 순차적)

React 설치를 예로 보자면

안정성(stability)/보안성(security)

  • npm 은 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용했다.
  • 이 특징은 편리하면서도 안정성을 위협할 수 있다.
  • 특히, 보장된 정책없이 등록한 패키지가 존재할 수 있다는 점에서 더욱 위험도가 높다.
  • 반면, yarn은 yarn.lock 이나 package.json으로 부터 설치만 하면, yarn.lock모든 디바이스에서 같은 패키지를 설치하는 것을 보장하기 때문에 버전의 차이로 인한 버그를 방지할 수 있다.

📍 npm VS yarn

  • npm : Node를 설치하면 자동으로 설치된다.
  • yarn : npm 을 설치하고 yarn을 설치해야한다.
npm install yarn --global

The Lock file

npm

  • package-lock.json 파일을 생성한다.
  • 이 파일은 결정성과 단순성 사이의 균형 때문에 조금 더 복잡하다.
  • 이러한 복잡성 때문에 package-lock.json 파일은 다른 npm 버전에 대해 동일한 node_modules 폴더를 생성한다.
  • 모든 종속성(dependency)은 package-lock.json 파일에 연관된 정확한 버전 번호를 갖고 있다.

yarn

  • yarn은 yarn.lock 파일을 생성한다.
  • yarn.lock 파일은 쉬운 병합에 도움이 된다.
  • 이 파일의 디자인 때문에 병합도 예측이 가능하다.

Output log

npm

  • npm은 npm 명령의 방대한 출력 로그를 생성한다.
  • 본질적으로 npm 이 하는 일에 대한 스택 추적의 뭉치이다.

yarn

  • yarn 로그는 깨끗하고 시각적으로 구별 가능하며 간단하다.
  • 이해를 돕기 위해 트리 형식으로 정렬된다.

Installing global dependencies

npm

npm install -g package_name@version_number

yarn

yarn global add package_name@version_number

Fetching packages

npm

  • npm은 모든 npm install 명렁을 통해 npm 레지스트리에서 종속성을 가져온다.

yarn

  • yarn은 종속성을 로컬에 저장하고 yarn add 명령을 통해 디스크에서 가져온다.
  • 종속성이 로컬에 있다고 가정한다.

npmyarn 명령어 차이 & 공통

결론

npm, yarn 모두 Node 패키지 관리자 인 것은 알았다.

그럼, 무엇을 사용해야할까 ?

결론은, 상황에 맞게, 각자에게 편한 것을 사용하느 것이 가장 바름직하다.

  • yarn 이 가시적으로 npm 보다 속도나 안정성이 뛰어났었다.(엄청난 차이는 아니었다.)
  • 하지만, npm 또한 몇년간에 발전을 거듭하며 단점을 보완했기 때문에 현재 npm/yarn의 performance와 stability 차이는 그리 크지 않다고 봐도 무방하다.(yarn 이 조금은 우세)
  • 하지만, 여전히 yarn병렬적 패키지 설치로 인한 가벼움, 또한 yarn.lock 의 버전의 차이로 인한 버그 방지 등의 기능은 yarn이 npm 보다 더 좋은 툴이라고 설명하기 충분한 점이다.
  • 반대로, npm은 거대한 커뮤니티, 접근성 으로 인한 편리성과 확장성이라는 큰 장점을 가지고 있다.

둘의 장단점이 뚜렷하고 실질적인 성능에서는 yarn이 근소하게 앞서지만 만약 처음 Node 개발을 하는 사람이라면 npm 을 먼저 사용하는 것이 좋다고 본다. 이유는

  • 먼저, npm 에 커뮤니티와 접근성의 소중함을 알고
  • 이후에, 그럼에도 npm무거움의 느낌이 무엇인지 알게 되는 순간
  • yarn 을 한번 사용해보면 좋을 것 같다는 생각을 한다.

참고