오늘은 기존의 npm과는 다른 pnpm에 대해 알아보겠습니다. 저는 npm만 사용하다가 최근에 pnpm을 알게 되었는데, 단순히 더 빠르다는 것만 알고 있었습니다. 그래서 이참에 pnpm에 대해 더 자세히 공부해 보고 싶어졌습니다. pnpm은 속도, 디스크 공간 절약, 그리고 강력한 모듈 관리 기능을 통해 기존 패키지 매니저들보다 뛰어난 이점을 제공합니다. 지금부터 pnpm의 특징과 장점을 자세히 살펴보겠습니다.
Saving disk space
npm을 사용할 때는 100개의 프로젝트가 동일한 의존성을 사용하면, 각 프로젝트마다 그 의존성의 복사본이 디스크에 저장됩니다. 하지만 pnpm을 사용하면, 의존성은 콘텐츠 주소 지정 저장소(content-addressable store)에 저장됩니다.
만약 각기 다른 버전의 의존성을 사용한다면, 변경된 파일만 저장소에 추가됩니다. 예를 들어, 의존성이 100개의 파일을 가지고 있고 새로운 버전에서 단 하나의 파일만 변경되었다면, pnpm 업데이트는 전체 의존성을 복제하는 대신 변경된 1개의 파일만 저장소에 추가합니다.
모든 파일은 디스크의 단일 위치에 저장됩니다. 패키지를 설치할 때, 이 파일들은 단일 위치에서 하드 링크로 연결되므로 추가적인 디스크 공간을 차지하지 않습니다. 이 덕분에 동일한 버전의 의존성을 여러 프로젝트에서 공유할 수 있습니다.
그 결과, 프로젝트와 의존성의 수에 비례하여 디스크 공간을 크게 절약할 수 있고, 설치 속도도 훨씬 빨라집니다!
Boosting installation speed
pnpm은 설치를 세 단계로 나누어 수행합니다.
- 의존성 해결: 필요한 모든 의존성을 식별하고 저장소에 가져옵니다.
- 디렉토리 구조 계산: 의존성에 기반하여 node_modules 디렉토리 구조를 계산합니다.
- 의존성 연결: 나머지 의존성을 가져와 저장소에서 node_modules로 하드 링크를 생성합니다.
이 접근 방식은 전통적인 세 단계 설치 과정(해결, 가져오기, 모든 의존성을 node_modules에 쓰기)보다 훨씬 빠릅니다.
Creating a non-flat node_modules directory
npm이나 Yarn Classic을 사용하여 의존성을 설치할 때, 모든 패키지는 모듈 디렉토리의 루트로 승격됩니다(hoisted). 이로 인해 소스 코드가 프로젝트에 추가되지 않은 의존성에도 접근할 수 있게 됩니다.
기본적으로 pnpm은 심볼릭 링크를 사용하여 프로젝트의 직접적인 의존성만 모듈 디렉토리의 루트에 추가합니다.
Reference
https://pnpm.io/blog/2020/05/27/flat-node-modules-is-not-the-only-way
'1. 웹개발 > 1_3_2 IT 상식' 카테고리의 다른 글
[IT 상식] 버전 표기법 (1.0.0) (0) | 2024.07.27 |
---|---|
[IT 상식] PoC란? (0) | 2024.07.20 |
[IT 상식] 모노레포란? (with Turborepo) (1) | 2024.06.30 |
[IT 상식] DMZ 서버란? (0) | 2022.04.16 |