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를 사용하고, 도구 호환성을 확인해야 합니다.
비슷한 학습 자료
토스ㅣSLASH 24 - Yarn Plugin으로 우아하게 자동 로깅하기
SLASH · YouTube
es-toolkit: How a Small Internal Library Became a Global Project
박서진/이다용 · 토스 기술 블로그
es-toolkit, 사내 작은 라이브러리가 전세계적인 라이브러리가 되기까지
박서진/이다용 · 토스 기술 블로그
97% Smaller, 2x Faster: How es-toolkit Reached 10 Million Weekly Downloads
문동욱 · 토스 기술 블로그
Node.js 라이브러리 배포 파이프라인에 플러그인 시스템 도입기
장지훈 · 토스 기술 블로그
패키지 매니저의 과거, 토스의 선택, 그리고 미래
박서진 · 토스 기술 블로그