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: 설치된 패키지들의 정확한 버전을 고정해두는 파일.
    • "패키지들을 몽땅 내려받아서 폴더에 물리적으로 저장한다"

image.png


Yarn Berry

Zero-Install 구조이며, node_modules/ 가 아예 사라질 수 있다.

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

image.png


Yarn Berry의 핵심인 PnP(Plug'n'Play)

.pnp.cjs 은 의존성을 확인할 수 있는 파일이다.
기존 npm이나 Yarn Classic은 의존성을 나타내기 위해 node_modules 디렉토리를 생성하는데,
node_modules는 간단한 프로젝트여도 몇백 메가바이트에 육박하는 큰 크기를 차지한다.
뿐만 아니라 디스크 상에 있다보니 의존성 확인하기 위해 수많은 디스크의 I/O 작업이 호출된다.
심지어 엄청 느리다.

그래서 yarn berry는 .pnp.cjs 를 사용해 디스크 I/O 같이 느린 작업을 메모리 상의 자료구로로 대체하여 개선한 것
디스크를 읽는 느린 작업이 사라지니 속도가 엄청 빨라진다.

Comments_Log
TERMINAL
DEBUG CONSOLE
OUTPUT
~/stay-young-loggit(main)npm run comment:write
nickname:
content:
-- TOTAL COMMENTS: 0 --
[LOADING...] fetching data from supabase...