🔧 DevOps

Yarn

JavaScript 패키지 매니저. npm 대안. 빠른 설치, 캐싱.

상세 설명

Yarn은 2016년 Facebook(현 Meta)에서 개발한 JavaScript 패키지 매니저입니다. npm의 속도와 보안 문제를 해결하기 위해 만들어졌으며, 결정적 의존성(deterministic dependencies)과 lock 파일을 통한 일관된 설치를 보장합니다.

핵심 특징으로 병렬 설치를 통한 빠른 속도, 오프라인 캐싱, yarn.lock을 통한 정확한 버전 관리, 워크스페이스(Workspaces) 기능을 통한 모노레포 지원이 있습니다. Yarn 2(Berry)부터는 Plug'n'Play(PnP) 모드로 node_modules 없이 의존성을 관리할 수 있습니다.

패키지 설치 시 전역 캐시를 활용하여 동일 패키지의 중복 다운로드를 방지합니다. 각 프로젝트의 의존성 트리를 분석하여 최적화된 구조로 설치하며, 체크섬 검증으로 패키지 무결성을 보장합니다.

실무에서는 CI/CD 파이프라인에서 yarn --frozen-lockfile로 lock 파일 변경 없이 설치하고, 모노레포 환경에서 워크스페이스로 여러 패키지를 효율적으로 관리합니다. npm과 99% 호환되어 마이그레이션이 쉽습니다.

코드 예제

# 프로젝트 초기화
yarn init -y

# 패키지 설치 (dependencies)
yarn add react react-dom

# 개발 의존성으로 설치
yarn add -D typescript @types/react

# 글로벌 설치
yarn global add create-react-app

# 모든 의존성 설치 (CI 환경)
yarn install --frozen-lockfile

# 패키지 업데이트
yarn upgrade react@latest

# 워크스페이스 설정 (package.json)
# {
#   "private": true,
#   "workspaces": ["packages/*"]
# }

# 특정 워크스페이스에서 스크립트 실행
yarn workspace @myapp/web dev

# 캐시 정리
yarn cache clean

# 의존성 이유 확인
yarn why lodash

실무에서 이렇게 말해요

시니어: "CI에서 패키지 설치가 느린데, yarn cache 설정 확인해보셨어요?"

주니어: "아, GitHub Actions에서 캐시 액션 추가했더니 설치 시간이 3분에서 40초로 줄었어요."

면접관: "npm과 Yarn의 차이점과 Yarn을 선택하는 이유가 있다면요?"

지원자: "Yarn은 병렬 설치로 더 빠르고, yarn.lock의 결정적 특성이 팀 협업에 유리합니다. 특히 워크스페이스 기능으로 모노레포 관리가 편해서 선호합니다."

리뷰어: "yarn.lock 파일 변경이 있는데, 의도한 건가요?"

개발자: "react 버전 업데이트하면서 같이 변경됐어요. 변경 내역은 yarn upgrade 로그에 있습니다."

주의사항

더 배우기