[javascript 자바스크립트] NPM, 그리고 YARN

resilient

·

2021. 11. 12. 02:17

728x90
반응형

 

웹 개발을 할 때, 현재 프런트는 React, Next를 사용하고 백앤드는 express와 Nest를 사용하고 있습니다.

모두 자바스크립트 기반(?)으로 운영이 되고 있는데 지금까지 패키지 매니저는 NPM을 사용했습니다.

 

이번에 백앤드를 리뉴얼 하면서 YARN으로 패키지 매니저를 바꿨는데 왜 바꿨는지, YARN이 NPM보다 좋은 이유는 무엇인지, 그러면 NPM은 무엇인지에 대해 정리를 해보려고 합니다.

 

NPM?

가장 유명한 자바스크립트 패키지 매니저로, 자바스크립트 개발자들이 가장 많이 쓰는 node.js의 기본 패키지 관리자이기도 합니다.

수많은 개발자들이 제작한 패키지를 자유롭게 공유하는 세계 최대의 패키지 저장소로, 어마어마한 자료와 커뮤니티를 기반으로 거대한 개발 생태계가 구축되어있습니다.
https://www.npmjs.com/

 

npm

Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java

www.npmjs.com

NPM의 대표 커맨드는 아래와 같습니다.

  • npm init : package.json 생성
  • npm install : package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치
  • npm install package_name@버전 : 특정 패키지의 특정 버전 설치
  • npm install (주소) : 특정 저장소 내 패키지 설치. 주로 github을 이와 같이 설치합니다.
  • npm install package_name -g : 옵션. 글로벌로 설치. 로컬의 다른 프로젝트도 이 패키지를 사용 가능하게 됩니다.
  • npm uninstall : 패키지 삭제 명령어입니다.
  • npm update : 설치한 패키지들을 업데이트해줍니다.
  • npm dedupe : 중복 설치된 패키지들을 정리해주는 명령어입니다.

 

YARN?

페이스북에서 제작한 새로 나온 자바스크립트 패키지 매니저입니다. (페이스북이 라이브러리나 프레임워크를 아주 잘 만드는 거 같습니다... 물론 지금은 '메타'입니다.) yarn은 기본적으로 npm의 단점을 느꼈기에 이를 향상하기 위해 만들어진 매니저 툴인데, 여기서 말하는 npm의 단점으로는 속도(performance), 안정성(stability), 보안성(security) 등이 있습니다.

다운로드한 패키지 데이터를 캐시(cache)에 저장하여, 중복된 데이터는 다운로드하지 않고, 캐시에 저장된 파일을 활용함으로써 패키지 설치 속도가 매우 빠릅니다.


npm은 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용했습니다. 이 점은 매우 편리한 부분이기 도하지만 안정성에 있어서는 단점이 될 수 있습니다. 특히나 검증되지 않은 패키지가 존재할 수 있다는 점에서 더욱 위험도가 높습니다.


반면 yarn은 yarn.lock이나 package.json으로부터 설치만 하며, yarn.lock은 모든 디바이스에 같은 패키지를 설치하는 것을 보장하기 때문에 버전의 차이로 인해 생기는 버그 방지가 가능합니다!

(페이스북에서 제작, 운영하기에 페이스북이 프로젝트 정보 수집해가는 거 아니냐며 꺼려하는 사람들도 있다고하네요...)

https://yarnpkg.com/

 

Home

Fast, reliable, and secure dependency management.

yarnpkg.com

 

YARN의 대표 커맨드는 아래와 같습니다.

  • yarn init : package.json 생성
  • yarn or yarn install : package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치
  • yarn add package_name@버전 : 특정 패키지의 특정 버전 설치
  • yarn add 주소 : 특정 저장소 내 패키지 설치. 주로 github을 이와 같이 설치합니다.
  • yarn global add package_name : 옵션. 글로벌로 설치. 로컬의 다른 프로젝트도 이 패키지를 사용 가능하게 됩니다.
  • yarn remove : 패키지 삭제 명령어입니다.
  • yarn upgrade : 설치한 패키지들을 업데이트해줍니다.
  • npm dedupe : 중복 설치된 패키지들을 정리해주는 명령어입니다.

정리해보면

이번에도 yarn을 쓰게 된 결정적인 이유는 
사용하려고 했던 라이브러리 버전 때문에 충돌이 났는데 너무너무 꼬이고 복잡해지는 경험을 했기 때문입니다.

 

예를 들어 프로젝트 구성후 버전 관리가 진행되지 않은 상태에서 새로운 프로젝트 환경 구성을 구성해 줄 때, 패키지들이 일괄적으로 최신 버전으로 유지되면서 , 현재 작업 중인 프로젝트의 패키지들과 버전이 맞지 않는 상황이 발생하게 되는 것이죠.


여기서 npm update를 강제적으로 진행하게 된다면, 종속된 패키지의 업데이트로 Deprecated 된 함수가 생기고, 그로 인해 특정 함수가 동작하지 않는, '버전 불일치'로 인한 오류가 발생할 가능성이 상당히 커집니다.


yarn의 병렬적 패키지 설치로 인한 가벼움, 또한 버전의 차이로 인한 버그 방지 등의 기능은 yarn이 npm보다 더 좋은 툴이라고 설명하기 충분한 점이라고 생각합니다.

 

(앞으로도 Yarn을 계속 쓰게 되지 않을까 싶네요....)

반응형