[매일매일]프론트 엔드 기술 일기: 패키지 매니저 pnpm과 Yarn Berry, 그리고 유령 의존성 문제까지!
프론트엔드 개발에서 패키지 매니저는 없어선 안 될 도구입니다.최근에는 전통적인 npm 대신 성능과 효율성을 개선한 pnpm과 Yarn Berry가 주목받고 있는데요.이번 글에서는 두 도구의 특징과 장단점, 그리고 유령 의존성 문제를 해결한 방식까지 함께 살펴보겠습니다.
🚀 pnpm이란?pnpm은 npm 대비 빠르고, 디스크 사용량이 적은 패키지 매니저입니다.🌟 특징과 장점패키지를 설치할 때 매번 복사본을 만들지 않고, 전역 저장소(content-addressable store)에 저장해놓고 하드링크/심볼릭 링크만 프로젝트에 연결합니다.같은 패키지를 여러 프로젝트에서 공유하기 때문에 설치 속도가 빠르고, 디스크 용량도 절약됩니다.유령 의존성 문제가 발생하지 않도록 의존성 트리를 철저히 관리합니다.workspace 기능을 지원해 모노레포 환경에서도 유용하게 사용됩니다.
🎯 Yarn Berry란?Yarn Berry는 Yarn의 2.0 이상 버전을 통칭하며, 기존 Yarn 1.x를 대체하는 버전입니다.특히 PnP(Plug’n’Play)와 Zero Install로 혁신적인 패키지 관리 방식을 도입했습니다.🌟 특징과 장점node_modules 폴더를 없애고, 대신 .pnp.cjs 파일로 패키지 위치와 의존성을 관리합니다.패키지들은 .yarn/cache에 zip 형태로 저장되며 디스크 사용량이 적고, 속도도 빠릅니다..yarn/cache와 .pnp.cjs를 함께 Git에 커밋하면 별도의 설치 없이 바로 실행 가능한 Zero Install을 구현할 수 있습니다.workspace 기능을 지원해 모노레포에 적합합니다.유령 의존성 문제를 방지합니다.
👻 유령 의존성(Ghost Dependency) 문제란?유령 의존성은 직접 설치하지 않은 패키지를 코드에서 불러올 수 있는 현상입니다.예를 들어, A 패키지가 B를 의존하고 있는데, 내가 A만 설치했더니 B도 설치되어 있고, 코드에서 B를 import해도 동작하는 상황입니다.이는 의존성 트리를 명확히 보장하지 못하기 때문에 발생하며, 다른 환경에서 동일하게 실행되지 않는 문제를 유발할 수 있습니다.🧹 pnpm과 Yarn Berry는 이렇게 해결했습니다pnpm: 각 패키지별로 고립된 환경을 구성해, 실제 의존성에만 접근하도록 강제합니다.Yarn Berry: .pnp.cjs를 통해 의존성의 위치를 정확히 지정해, 정의되지 않은 패키지에는 접근할 수 없도록 합니다.
🤔 단점도 있을까?pnpm익숙하지 않은 개발자들이 많아 도입 시 러닝커브가 존재합니다.일부 레거시 툴(특히 node_modules에 의존하는 도구)과의 호환성이 떨어질 수 있습니다.Yarn Berry역시 기존 Yarn 1.x와 비교했을 때 설정이 까다롭고 학습이 필요합니다..pnp 방식이 모든 도구와 호환되지는 않기 때문에, 환경에 따라 문제를 해결해야 할 수도 있습니다.
📚 참고 자료pnpm 제작 동기https://pnpm.io/ko/next/motivation
동기 | pnpm Saving disk space pnpm.io
po4tion.dev: pnpm 파헤치기https://po4tion.dev/pnpm
pnpm 파헤치기 pnpm, 난 너가 npm보다 가벼울 줄 알았어… po4tion.dev
토스 기술블로그: node_modules로부터 우리를 구원해 줄 Yarn Berryhttps://toss.tech/article/node-modules-and-yarn-berry
node_modules로부터 우리를 구원해 줄 Yarn Berry 토스 프론트엔드 레포지토리 대부분에서 사용하고 있는 패키지 매니저 Yarn Berry. 채택하게 된 배경과 사용하면서 좋았던 점을 공유합니다. toss.tech
✍️ 마무리점점 대규모화되는 프론트엔드 프로젝트에서 패키지 관리의 중요성은 점점 커지고 있습니다.pnpm과 Yarn Berry는 더 빠르고, 더 안전하며, 더 현대적인 패키지 관리를 가능하게 해줍니다.하지만 단점과 특성을 충분히 이해하고 환경에 맞게 선택하는 것이 중요합니다.여러분은 어떤 패키지 매니저를 선호하시나요? 😄
📌 요약✅ pnpm은 전역 저장소를 활용해 빠르고 디스크 효율적인 패키지 관리가 가능하며, 유령 의존성을 방지합니다.✅ Yarn Berry는 PnP와 Zero Install로 node_modules를 없애고, 더 빠르고 안정적인 의존성 관리를 제공합니다.✅ 두 도구 모두 모노레포에 적합하고, 유령 의존성 문제를 해결하지만, 초기 러닝커브와 호환성 이슈는 주의해야 합니다.✅ 환경에 맞는 선택과 충분한 테스트가 중요합니다.