본문으로 이동
node_modules로부터 우리를 구원해 줄 Yarn Berry
문서

node_modules로부터 우리를 구원해 줄 Yarn Berry

박서진 · 토스 · 토스 기술 블로그

원본 보기

소개

토스 프론트엔드 레포지토리 대부분에서 사용하고 있는 패키지 매니저 Yarn Berry. 채택하게 된 배경과 사용하면서 좋았던 점을 공유합니다.

AI 핵심 요약

토스 프론트엔드팀은 node_modules의 느린 탐색과 큰 설치 용량, 환경에 따라 달라지는 의존성 동작, 유령 의존성 문제를 해결하기 위해 Yarn Berry의 Plug'n'Play(PnP)를 도입했습니다. PnP는 node_modules 대신 Zip 아카이브 캐시와 .pnp.cjs에 의존성 위치·관계를 기록해 패키지를 빠르고 명시적으로 찾으며, Zero-Install을 적용하면 캐시를 Git에 포함해 설치 없이 바로 사용할 수 있습니다. 그 결과 의존성 용량과 설치·CI 시간을 줄이고, 기기와 CI 환경 간 재현성을 높이며 선언되지 않은 의존성 사용을 막았습니다. 플러그인, 워크스페이스, 패치 명령도 제공해 의존성 관리와 모노레포 작업을 확장하기 쉽다는 점을 확인했습니다.

  • PnP는 패키지별 의존성 정보를 .pnp.cjs에 기록해 node_modules 탐색 없이 패키지 위치를 찾습니다.
  • Zero-Install은 Yarn 캐시와 PnP 파일을 저장소에 포함해 복제 직후나 오프라인에서도 의존성을 사용할 수 있게 합니다.
  • PnP는 끌어올리기를 하지 않으므로 package.json에 선언하지 않은 유령 의존성을 차단합니다.
  • Zip 아카이브 기반 캐시는 중복 파일과 디스크 I/O를 줄이고, 체크섬으로 패키지 변경 여부를 확인하기 쉽습니다.
  • PnP 도입 시 Node 명령 대신 yarn node를 사용하고, 도구 호환성을 확인해야 합니다.