본문 바로가기

Javscript

[JS] Package Manager (npm, yarn, yarn berry, pnpm)

반응형

package manager에 대해 다루기 전에 모듈과 패키지에 대한 개념을 remind하고 가자

 

모듈이란 ?

프로그래밍에서 재사용 가능한 코드 조각을 나타낸다.

 

패키지란 ?

프로그래밍에서 코드, 리소스, 설정 파일 등을 묶어서 효율적으로 관리하고 배포하기 위한 단위를 의미함.

주로 패키지는 모듈의 집합이며, 프로그램이나 애플리케이션을 개발, 유지보수, 배포하기 위한 목적으로 사용됨.

 


 

이 패키지(라이브러리)들을 우리는 개발을 하며 많이 사용한다.

(예를 들어 npm install react, yarn add react 와 같은 명령어로 라이브러리를 설치를 하면 package.json 또는 yarn.lock 파일이 생성되며 라이브러리의 버전 및 의존성을 관리해준다. )

 

이 명령어 앞에 붙은 npm, yarn이 package manager라 불리우는 패키지를 관리해주는 애들이다.

 

 

NPM(Node Package Manager)

원조는 npm이다. 

얘는 이름 그대로 노드 패키지를 관리해주기 위해 태어났다.

 

이 자식의 4가지 기본 원칙은 아래와 같다.

- 여러 버전의 동일한 패키지를 한 프로젝트에서 사용할 수 있게 하자.

- 설치 방식을 통일하자.

- 패키지 관련 정보가 들어있는 메타 데이터를 간소화 하자.

- 누구나 배포할 수 있도록 하자.

 

지금도 사람들이 가장 많이 사용하는 노드환경에서의 패키지 매니저이다.

그러나, 얘의 한계는 명확하다.

  • 비효율적인 의존성 검색
  •  유령 의존성(호이스팅)

  • 너무 무거운 node_modules

 

 

YARN (Yet Another Resource Negotiator)

위와 같은 npm의 한계를 극뽁하기 위해서 등장했다.

yarn은 아래와 같은 개선을 했다.

  • 병렬화를 통한 속도 개선
  • 자동화된 lock 생성
  • 의존성 트리 알고리즘 변경
  • 캐시 사용

 

yarn에서도 단점이 있었고 이를 보완하기 위해 진화를 한것이 yarn berry, pnpm이 있다.

 

PNPM

pnpm은 특별한 알고리즘과 Symbolic Link으로 패키지의 설치를 최적화함.

(필자가 이해한 바로는 설치를 줄이고 링크를 통해 중복 설치를 줄임)

YARN BERRY

나는 yarn berry를 통해 프로젝트를 진행하고 있다.

yarn berry는 node_modules를 없앰

패키지를 zip파일로 저장

이랬을때 3가지 이점

1. zero install (매번 yarn install 불필요)

2. 오프라인시에 캐싱 기능으로 사용가능

3. ci 배포시에 clone만 하면 의존성이 다 있기 때문에 배포속도를 줄일 수 있다.

zip 파일이어서 폴더수와 용량이 줌

 

이 zip파일을 어떻게 관리하지 ?

-> Plug'n'Play라는 거로 관리함

 

 


각 패키지매니저들마다 장단점이 있다.

npm은 사람들이 많이 쓰는 만큼 오류가 났을때 구글에 치면 자료가 많다, 그리고 가볍게 아무생각 없이 쓰기에 좋다

yarn berry는 빌드, 배포속도가 빠르다

pnpm은 네개의 패키지 매니저들중에서 속도가 가장 빠르다(yarn berry와 비교하면 미세함)

그냥 yarn의 장점은 .... 모르겠따 !

 

쩄든, 용도에 맞게 잘 선택하는 것도 실력이라고 생각한다.

 

나는 yarn berry를 사용하여 모노레포를 구축하여 사이드 프로젝트를 진행하고 있다.

https://github.com/dbsgur/solar

놀러와서 star눌러주면 감사하겠따! (부족한 부분이 있으면 Issue에 남겨주셔도 됩니다.)

 

 

 

이글을 읽는 모두 열코다.

 

 

 

 

 

 

반응형