Search

npm, yarn, pnpm

NestJS의 패키지매니저

패키지매니저란?

패키지 매니저는 프로젝트에서 사용하는 외부 라이브러리(패키지)들을 설치, 업데이트, 삭제, 버전 관리해주는 도구이다.
Node.js 생태계에서는 보통 JavaScript/TypeScript로 작성된 라이브러리를 관리하게 되며 이를 위해 npm,. yarn, pnpm 같은 패키지 매니저를 사용한다.
즉, 패키지 매니저는 프로젝트에 사용되는 패키지를 쉽게 관리하고 설치해주는 도구이다.

1. npm

Node.js의 기본 패키지 매니저이다.
특징
가장 널리 사용되고 문서가 풍부함
NestJS 설치 시 기본값으로 사용됨
장점
신뢰도가 높고 안정적이다.
공식 Node.js문서 및 튜토리얼과 잘 호환됨
에러 메세지 및 경고가 직관적이다.
단점
상대적으로 속도가 느림
워크스페이스 기능이 불안전함 (특히 모노레포에선 불편하다)
NestJS CLI로 새로운 프로젝트를 생성하면 하위 앱 경로를 자동으로 인식하지 못한다.
또한 —project 옵션없이 생성하면 오류가 나고
nest-cli.json에 projects 필드에 계속 수동으로 새로 만든 프로젝트를 넣어줘야 한다.
모노레포는 직접적인 앱 간 참조를 권장하지 않기때문에 Module not found 오류 발생 가능성

2. yarn

Facebook에서 만든 대안 패키지 매니저이다.
특징
속도가 npm보다 빠르며 효율적인 캐싱을 제공한다.
yarn workspaces모노레포에 유리
장점
빠르고 안정적인 설치 속도
모노레포 지원
yarn.lock 으로 의존성 고정 강력
단점
최신 기능은 pnpm 보다 느리게 반영됨

3. pnpm

특징
빠르고 디스크 공간 효율적인 패키지 매니저이다.
모노레포 최적화, 링크 기반 설치
NestJS도 공식적으로 잘 지원한다.
장점
매우 빠름
하드링크 기반 저장소이기 때문에 디스크 절약
pnpm은 패키지를 node_modules 에 직접 복사하지 않고, 하드링크로 연결한다.
따라서 동일한 패키지를 중복 저장하지 않아도 된다.
→ 따라서, 100개의 프로젝트가 axios를 써도 1개만 저장함
→ 디스크 공간이 절약된다.
워크스페이스 사용이 매우 강력하다.
pnpm:workspace로 여러 패키지를 하나의 루트에서 관리한다.
의존성 중복을 최소화한다.
꼭 필요한 의존성 패키지만 설치한다.
단점
node_modules 구조가 npm/yarn과 달라서 헷갈릴 수 있다.
일부 오래된 패키지가 pnpm 구조에 문제를 일으킬 수 있다.