그동안 리티의 백엔드 서버는 패키지 매니저로 npm을 사용하고 있었다. pnpm이 npm보다 좋다는 말은 여러번 들어서 알고 있었고, 과거에 한번 pnpm으로 패키지 매니저를 바꾸려고 했다가 무언가 꼬여서 그냥 npm을 한동안 계속 사용하였다. 그러던 중 이번 소프트런치 전에 pnpm으로 이전하는것이 좋겠다는 판단이 들어 pnpm에 대해 조사해보았다.
pnpm의 장점
[1] 메모리 절약
npm은 각 프로젝트의 node_modules 폴더에 패키지 파일을 직접 복사한다. pnpm은 content-addressable store라는 전역 저장소에 패키지를 한 번만 저장하고, 각 프로젝트에서 링크로 연결한다.
중요한 점은 이 전역 저장소가 컴퓨터 전체를 기준으로 하므로, 다른 프로젝트에서 동일한 버전의 패키지를 재설치할 때 이미 저장된 패키지를 재사용한다.
[2] 속도 개선
기존 npm은 패키지를 복사해서 node_modules에 붙여넣어야 했다. pnpm은 처음 한 번만 전역 저장소에 저장하고, 이후로는 링크만 연결하면 되므로 설치 속도가 훨씬 빨라진다.
[3] 엄격한 의존성 관리
npm은 의존성 호이스팅을 사용해 중복 설치를 방지한다. 이 과정에서 개발자가 직접 설치하지 않은 패키지도 사용할 수 있게 된다. 이는 시한폭탄처럼 작용할 수 있다.
pnpm은 의존성 트리를 그대로 유지하므로, 직접 설치하지 않은 패키지는 코드에서 사용할 수 없다. 해당 패키지에 의존하는 패키지에서만 접근 가능하다.
npm에서 이런 방식을 사용하지 못했던 이유
당시 트리 구조를 유지하면 중복 설치 문제가 발생했다. pnpm처럼 링크 활용이 어려웠고, 윈도우에서 경로 길이 제한으로 인한 문제도 많았다.
