Yarn Classic 탈출! Pnpm으로 모노레포 의존성 관리 효율 UP!
Yarn Classic의 유령 의존성 문제를 해결하기 위해 Pnpm으로 전환
Pnpm의 Content-addressable Store 방식을 통해 디스크 공간 절약 및 유령 의존성 문제 해결
Amplify Preview 빌드 시간 3배 단축, Github Action 설치 시간 25-30초로 개선
Pnpm의 핵심 원리: Content-addressable Store
Pnpm은 Content-addressable Store 방식을 통해 의존성을 관리한다. 구체적으로, 전역 스토어에 종속성을 설치하고 심볼릭 링크와 하드 링크를 사용하여 프로젝트의 `node_modules`를 구성한다. 따라서 유령 의존성 문제를 해결하고 디스크 공간 절약을 가능하게 한다. 결과적으로, 모노레포 환경에서 효율적인 의존성 관리를 지원한다.
Yarn Classic vs Pnpm: 장단점 비교
Yarn Classic은 호이스팅을 사용해 의존성을 관리하지만, 유령 의존성 문제를 야기한다. 반면, Pnpm은 Content-addressable Store를 통해 안정적인 의존성 관리를 제공한다. 따라서 Pnpm은 설치 속도 향상과 보안 강화 측면에서 유리하다. 하지만, Pnpm은 심볼릭 링크를 지원하지 않는 환경에서는 추가 설정이 필요할 수 있다.
Pnpm 도입 가이드: Turbo Repo 환경
Turbo Repo 환경에서 Pnpm 도입 시, `pnpm-workspace.yaml` 파일을 생성하여 워크스페이스를 정의한다. 구체적으로, `pnpm install` 명령어를 실행하여 의존성을 재설치하고, `depcheck`를 통해 유령 의존성을 확인한다. 따라서 Amplify Preview 환경에서는 .npmrc 설정을 통해 빌드 문제를 해결해야 한다. 결과적으로, Github Action 캐싱을 통해 빌드 속도를 최적화할 수 있다.