Yarn Classic vs Yarn Berry
v1.0.0@young_log|Browser|Published on 2026-01-14
"똑같은 Yarn 인데 왜 폴더 구조가 다를까?"
Details
Changelog
Dependencies
Yarn Classic(버전 1)과 2버전 이상인 Yarn Berry 는
철학이 완전히 다르기 때문에 폴더 구조와 동작 방식에 차이가 난다.
Yarn Classic
npm과 거의 비슷하며, 가장 대중적으로 쓰이는 방식이다.
node_modules/: 모든 패키지가 이 폴더 안에 거대하게 쌓인다. (용량이 커지고 속도가 느린 주범!)yarn.lock: 설치된 패키지들의 정확한 버전을 고정해두는 파일.- "패키지들을 몽땅 내려받아서 폴더에 물리적으로 저장한다"

Yarn Berry
Zero-Install 구조이며, node_modules/ 가 아예 사라질 수 있다.
.yarn/폴더: 패키지들이 폴더 형태가 아니라.zip파일 형태로 압축되어 저장된다..pnp.cjs:node_modules대신 "어떤 패키지가 어디 있는지"를 알려주는 지도 역할을 하는 파일. (Plug'n'Play 방식)- Zero-Install: 패키지가 압축 파일이라 용량이 작아서 Git에 통째로 올릴 수 있다. 다른 팀원이 프로젝트를 받을 때
yarn install을 안 해도 바로 실행되는 마법이 가능하죠. - 압축된 상태로 바로 참조하기 때문에 설치 속도가 압도적으로 빠르다!
- Zero-Install: 패키지가 압축 파일이라 용량이 작아서 Git에 통째로 올릴 수 있다. 다른 팀원이 프로젝트를 받을 때
- 그런데 이미지와 같이 Yarn Berry라고 해서
node_modules이 사라지는 것은 아니고,nodeLinker설정에 따라 최신 엔진의 장점을 누리면서, 기존 폴더 구조를 유지할 수 도 있다.

Yarn Berry의 핵심인 PnP(Plug'n'Play)
.pnp.cjs 은 의존성을 확인할 수 있는 파일이다.
기존 npm이나 Yarn Classic은 의존성을 나타내기 위해 node_modules 디렉토리를 생성하는데,
node_modules는 간단한 프로젝트여도 몇백 메가바이트에 육박하는 큰 크기를 차지한다.
뿐만 아니라 디스크 상에 있다보니 의존성 확인하기 위해 수많은 디스크의 I/O 작업이 호출된다.
심지어 엄청 느리다.
그래서 yarn berry는 .pnp.cjs 를 사용해 디스크 I/O 같이 느린 작업을 메모리 상의 자료구로로 대체하여 개선한 것
디스크를 읽는 느린 작업이 사라지니 속도가 엄청 빨라진다.