yarn
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
yarn
개요
yarn은 JavaScript 생태계에서 널리 사용되는 패키지 관리자(Package Manager) 중 하나로, Facebook(현 Meta)을 중심으로 개발되어 2016년에 공개되었습니다. [npm](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%ED%8C%A8%ED%82%A4%EC%A7%80%20%EA%B4%80%EB%A6%AC/npm)(Node Package Manager)과 유사한 역할을 하지만, 더 빠른 설치 속도, 보다 안정적인 의존성 관리, 오프라인 설치 지원 등의 장점을 내세워 많은 개발자들 사이에서 인기를 끌었습니다. 특히 의존성 트리의 결정성(deterministic dependency resolution)과 [yarn.lock](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EC%9D%98%EC%A1%B4%EC%84%B1%20%EA%B4%80%EB%A6%AC/yarn.lock) 파일을 통한 버전 일관성 보장은 대규모 프로젝트에서 중요한 장점으로 작용합니다.
yarn은 Node.js 기반의 프로젝트에서 외부 라이브러리(예: React, Lodash, Express 등)를 설치하고 관리하는 데 사용되며, [package.json](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD/package.json) 파일에 정의된 의존성을 기반으로 패키지를 다운로드하고 로컬에 설치합니다.
주요 기능
1. 빠른 설치 속도
yarn은 패키지를 병렬로 다운로드하여 설치 속도를 극대화합니다. 반면 기존 npm은 순차적으로 다운로드하던 방식을 사용했기 때문에, 의존성이 많은 프로젝트에서는 설치 시간이 길어질 수 있었습니다. yarn은 캐시 시스템도 효율적으로 운영하여 동일한 패키지를 여러 프로젝트에서 사용할 때 재다운로드 없이 빠르게 설치할 수 있습니다.
2. 결정성 있는 의존성 설치
yarn은 프로젝트 루트에 yarn.lock 파일을 생성하여 각 패키지의 정확한 버전과 하위 의존성까지 기록합니다. 이 덕분에 여러 개발자나 CI/CD 환경에서 동일한 의존성 구조를 보장할 수 있으며, "내 컴퓨터에선 잘 되는데 왜 안 돼?"와 같은 문제를 줄일 수 있습니다.
// yarn.lock 예시 (생략된 부분)
react@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz"
integrity sha512-/Gv6yqk/7cjLTIqNmvNy0jzvG1rkOTItdaDkVA1BAXbHOrWfNk7Dvg+RyKUuU7y2n2Q3pZsUyfPjwXRvk7wWTA==
3. 오프라인 설치 지원
yarn은 로컬 캐시에 다운로드한 패키지를 저장하므로, 인터넷 연결 없이도 이전에 설치한 패키지를 재설치할 수 있습니다. 이는 네트워크가 불안정한 환경이나 오프라인 작업 시 유용합니다.
설치 방법
yarn은 여러 방식으로 설치할 수 있습니다. 가장 일반적인 방법은 npm을 통해 설치하는 것입니다.
npm install -g yarn
또는 공식 사이트(https://yarnpkg.com)에서 제공하는 설치 스크립트를 사용할 수 있습니다.
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
macOS 사용자는 Homebrew를 이용해 설치할 수도 있습니다:
brew install yarn
설치 후 버전 확인:
yarn --version
주요 명령어
| 명령어 | 설명 |
|---|---|
[yarn init](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%EB%8F%84%EA%B5%AC/yarn%20init) |
새로운 package.json 파일 생성 |
[yarn add](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%EB%8F%84%EA%B5%AC/yarn%20add) <package> |
패키지를 프로젝트에 추가 (devDependencies 포함 시 --dev) |
[yarn remove](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%EB%8F%84%EA%B5%AC/yarn%20remove) <package> |
패키지 제거 |
[yarn install](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%EB%B0%8F%20%EC%9D%98%EC%A1%B4%EC%84%B1%20%EA%B4%80%EB%A6%AC/yarn%20install) |
package.json과 yarn.lock 기반으로 의존성 설치 |
[yarn upgrade](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EC%9D%98%EC%A1%B4%EC%84%B1%20%EA%B4%80%EB%A6%AC/yarn%20upgrade) <package> |
특정 패키지 업그레이드 |
[yarn run](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%EB%8F%84%EA%B5%AC/yarn%20run) <script> |
package.json에 정의된 스크립트 실행 |
[yarn list](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%EB%8F%84%EA%B5%AC/yarn%20list) |
설치된 패키지 목록 확인 |
예시:
# React 설치
yarn add react react-dom
# 개발용 패키지 설치 (예: ESLint)
yarn add eslint --dev
# 스크립트 실행 (package.json에 "start": "webpack serve" 정의 시)
yarn run start
Yarn Berry (Yarn 3.0+)와 Plug'n'Play
2020년 이후로 yarn은 버전 2와 3을 통해 큰 변화를 겪었습니다. 이를 통칭하여 Yarn Berry라고 부릅니다. 주요 변화는 다음과 같습니다:
- Plug'n'Play (PnP):
[node_modules](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD/node_modules)폴더를 생성하지 않고, 패키지를 가상 파일 시스템에 로드합니다. 이는 디스크 공간 절약과 설치 속도 향상에 기여합니다. - 내장된 워크스페이스(Workspaces): 다중 패키지(Monorepo) 관리 기능 강화
- 내장된 패키징 도구:
[yarn dlx](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EA%B0%9C%EB%B0%9C%EB%8F%84%EA%B5%AC/yarn%20dlx)를 통해 일회성 명령어 실행 가능 (예:yarn dlx [create-react-app](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC/create-react-app) my-app) .yarnrc.yml설정 파일: 기존.yarnrc에서 YAML 기반 설정으로 변경
Berry 버전은 기존 방식과 호환되지 않을 수 있으므로 마이그레이션 시 주의가 필요합니다.
yarn vs npm
| 항목 | yarn | npm |
|---|---|---|
| 속도 | 병렬 다운로드로 빠름 | 과거에는 느림, npm 7+부터 개선 |
| 결정성 | yarn.lock으로 보장 |
package-lock.json으로 보장 (npm 5+) |
| 오프라인 설치 | 캐시 기반으로 가능 | 제한적 |
| 커뮤니티 | 활발하지만 npm보다 작음 | 가장 큰 생태계 |
| 기능 확장 | Plug'n'Play, 워크스페이스 등 고급 기능 | 지속적으로 기능 추가 중 |
최근 npm은 성능과 기능에서 많은 개선이 있었기 때문에, yarn과의 차이점은 점점 줄어들고 있습니다. 그러나 여전히 일부 팀은 yarn의 안정성과 고급 기능을 선호합니다.
참고 자료 및 관련 문서
- 공식 문서: https://yarnpkg.com
- GitHub 저장소: https://github.com/yarnpkg/yarn
- Yarn Berry 문서: https://yarnpkg.com
- 관련 도구:
[pnpm](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%ED%8C%A8%ED%82%A4%EC%A7%80%20%EA%B4%80%EB%A6%AC/pnpm)(또 다른 고성능 패키지 매니저)
Tip: 프로젝트 시작 시 팀원들과 패키지 매니저를 통일하는 것이 중요합니다.
.nvmrc,.yarnrc등의 설정 파일로 개발 환경을 표준화하세요.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.