yarn: 본질, React Native를 위한 대체 패키지 매니저

저자: IT Sectr 게시일: 2026-02-13 읽는 시간: 10 분

yarn — Node.js를 위한 대체 패키지 매니저로, 2016년 Facebook이 Exponent, Google 및 Tilde와 공동으로 만들었습니다. yarn은 npm 2-4의 속도 및 보안 문제를 해결했습니다: 병렬 설치, 엄격한 lock 파일 및 오프라인 캐시. 오늘날 yarn은 React Native, Expo 및 모노레포에서 여전히 인기가 있습니다. 자세한 내용은 yarn Documentation에서 확인하세요.

핵심 포인트

  • yarn — npm 문제를 해결하기 위해 2016년 Facebook이 만든 Node.js용 패키지 매니저
  • yarn.lock — 모든 종속성의 정확한 버전을 기록하는 lock 파일, 자동 생성
  • yarn install — 중복 없이 글로벌 캐시를 사용한 병렬 패키지 설치
  • yarn workspaces — 공유 node_modules 폴더로 모노레포를 관리하는 메커니즘
  • Plug'n'Play — 글로벌 캐시의 ZIP 아카이브에 패키지를 저장하는 node_modules의 대안

yarn이란 — 패키지 매니저?

yarn(Yet Another Resource Negotiator)은 2016년 10월 npm 2-4의 문제(느린 설치, lock 파일 부족, 안전하지 않은 패키지)에 대한 Facebook의 대응으로 출시되었습니다. yarn은 병렬 패키지 다운로드, 결정론적 yarn.lock 및 체크섬을 통한 무결성 검증을 도입했습니다. 2020년 yarn은 Plug'n'Play 및 TypeScript-first 접근 방식으로 버전 2(Berry)로 전환했습니다.

yarn 아키텍처는 npm과 다릅니다: yarn은 패키지를 병렬로 다운로드하고(npm은 버전 5 이전에는 순차적으로), 각 패키지를 ~/.cache/yarn에 프로젝트 간 중복 없이 캐시하며, 체크섬을 통해 무결성을 검증합니다. yarn은 모든 설치 시 yarn.lock을 생성하는 반면, npm의 package-lock.json은 버전 5에서야 등장했습니다.

yarn 2(Berry, 2020)부터 yarn은 완전히 TypeScript로 다시 작성되었으며 Plug'n'Play, workspaces, 모노레포용 constraints 및 다양한 소스(npm, git, tarball)에서의 설치 프로토콜을 지원합니다. yarn 3+(2022)는 Zero-Installs를 추가했습니다 — 네트워크 없이 즉시 설치할 수 있도록 리포지토리에 캐시를 저장합니다.

yarn이 종속성 설치를 관리하는 방법

yarn install — package.json과 yarn.lock을 읽고 종속성을 설치하는 주요 명령어입니다. yarn은 패키지를 병렬로 다운로드하여 npm 4 및 이전 버전과 비교해 설치 속도를 2~3배 향상시킵니다. yarn은 오프라인 캐시를 사용합니다: 패키지가 다른 프로젝트에서 이미 다운로드된 경우 다시 다운로드하지 않고 캐시에서 복사됩니다.

bash
# yarn 기본 명령어
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# 대화형 업데이트
$ yarn upgrade-interactive
# 중복 패키지 제거
$ yarn dedupe

yarn add — 새 패키지를 설치하는 명령어입니다. yarn add <package>는 dependencies에 추가하고, yarn add --dev는 devDependencies에 추가합니다. yarn은 자동으로 yarn.lock을 업데이트합니다. yarn upgrade는 시맨틱 범위 내에서 패키지를 최신 버전으로 업데이트합니다. yarn upgrade-interactive — 업데이트할 특정 패키지를 선택하는 대화형 모드입니다.

yarn cache — ~/.cache/yarn/v6에 있는 글로벌 캐시입니다. 각 패키지는 체크섬과 함께 ZIP 아카이브에 한 번 저장됩니다. yarn 캐시는 자동으로 정리되지만 수동으로 yarn cache clean을 실행할 수 있습니다. yarn cache dir은 캐시 경로를 표시합니다. yarn cache list — 캐시된 패키지 목록입니다.

yarn.lock: 목적 및 파일 구조

yarn.lock — 모든 종속성 및 그 전이 패키지의 정확한 버전을 기록하는 lock 파일입니다. package-lock.json(JSON)과 달리 yarn.lock은 플랫 구조의 YAML 형식을 사용합니다. yarn.lock은 yarn install 또는 yarn add 시 항상 자동 생성됩니다 — 이로써 모든 개발자와 CI 서버가 동일한 패키지 세트를 받을 수 있습니다.

yaml
# yarn.lock 구조 예제
react@^18.3.0:
  version: "18.3.1"
  resolution: "react@npm:18.3.1"
  dependencies:
    loose-envify: "^1.1.0"
  checksum: "abc123def456..."

react-native@^0.76.0:
  version: "0.76.3"
  resolution: "react-native@npm:0.76.3"
  dependencies:
    react: "18.3.1"
  checksum: "def789ghi012..."

yarn.lock 필드: version — 정확한 패키지 버전, resolution — 소스 및 버전, dependencies — 해당 종속성, checksum — 검증을 위한 체크섬. yarn.lock은 리포지토리에 커밋되며 종속성의 유일한 정보 소스입니다. yarn.lock과 package.json이 일치하지 않으면 yarn이 경고를 표시합니다.

Yarn constraints — yarn.lock에서 종속성 버전을 확인하고 강제하는 모노레포용 규칙 시스템입니다. 제약 조건은 Yarn Constraint Language를 사용하여 yarn.constraints.js 파일에 설명됩니다. Constraints를 사용하면 모노레포의 모든 패키지가 동일한 버전의 React 또는 TypeScript를 사용하도록 보장할 수 있습니다.

React Native 생태계에서의 yarn

React Native는 전통적으로 yarn과 밀접하게 연결되어 왔습니다. Expo CLI, React Native CLI 및 Create React Native App은 초기에 yarn을 사용했습니다. React Native 프로젝트에서 yarn.lock은 네이티브 모듈의 버전을 고정하며, 이는 CocoaPods(iOS) 및 Gradle(Android)을 통한 안정적인 컴파일에 매우 중요합니다. 공유 코드가 있는 React Native 모노레포에서 yarn workspaces가 인기가 있습니다.

React Native 모노레포의 yarn workspaces: 루트 package.json에 "workspaces": ["packages/*", "mobile"]이 포함됩니다. yarn install은 루트 수준에 단일 node_modules 폴더를 만듭니다. 패키지는 심링크를 통해 서로를 참조합니다. 네이티브 종속성을 변경한 후 CocoaPods를 업데이트하기 위해 npx pod-install이 실행됩니다.

json
{
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/mobile",
    "apps/web"
  ],
  "scripts": {
    "mobile:start": "yarn workspace mobile start",
    "mobile:ios": "yarn workspace mobile ios",
    "lint": "yarn workspaces run lint"
  }
}

Expo SDK 50+npx create-expo-app으로 생성된 새 프로젝트에 yarn을 공식 권장합니다. yarn은 Expo 모듈과의 호환성을 보장하고 올바른 yarn.lock을 자동 생성합니다. yarn 3+의 Zero-Installs는 캐시를 리포지토리에 커밋할 수 있게 하여 개발자가 git clone 후 종속성 설치 없이 바로 사용 가능한 환경을 얻을 수 있습니다.

yarn과 npm: 비교 분석

npmyarn은 동일한 문제를 해결합니다 — Node.js 패키지 관리입니다. npm 5-7의 출시로 기능적 격차는 사실상 사라졌습니다. npm 7+에는 workspaces, npm ci(yarn install --frozen-lockfile에 해당) 및 병렬 설치가 포함됩니다. 그러나 yarn은 특정 시나리오에서 이점을 유지합니다: Plug'n'Play, Zero-Installs 및 성숙한 constraints 시스템입니다.

특징npmyarn
생성 연도20102016
Lock 파일package-lock.json (JSON)yarn.lock (YAML)
설치순차적 (npm 5+)병렬
Plug'n'Play아니오예 (yarn 2+)
Workspaces예 (npm 7+)
Zero-Installs아니오예 (yarn 3+)
캐시플래트닝이 있는 node_modules글로벌 ~/.cache/yarn
구현 언어JavaScriptTypeScript (yarn 2+)

yarn을 선택해야 하는 경우: Expo SDK 50+ 프로젝트, 대규모 모노레포(100+ 패키지), 빠른 환경 설정을 위해 Zero-Installs를 중요시하는 팀, 이미 yarn을 사용 중인 레거시 프로젝트. npm을 선택해야 하는 경우: 표준 create-react-app 프로젝트, Next.js, Vite, 특정 패키지 매니저 요구사항이 없는 팀.

yarn 4(2024)는 향상된 성능, 네이티브 ESM 지원 및 대규모 모노레포 최적화를 도입했습니다. npm 10+는 보안 및 호환성에 중점을 두고 계속 발전하고 있습니다. 오늘날 npmyarn 사이의 선택은 팀 선호도와 특정 프로젝트 요구사항의 문제이지, 한 도구의 기술적 우월성의 문제가 아닙니다.

자주 묻는 질문

yarn과 npm의 주요 차이점은 무엇인가요?

yarn은 병렬 패키지 설치와 적극적인 캐싱 덕분에 처음에는 속도에서 npm을 앞질렀습니다. yarn.lock은 모든 설치 시 자동 생성되는 반면, package-lock.json은 npm 5에서 등장했습니다. yarn은 설치 시간이 없는 node_modules의 대안인 Plug'n'Play를 제공합니다. npm 7+에서는 기본 시나리오에서 속도와 기능의 차이가 미미합니다.

모노레포에서 yarn workspaces는 어떻게 작동하나요?

yarn workspaces — 단일 리포지토리에서 여러 패키지를 관리하는 메커니즘입니다. 루트 package.json에 "workspaces": ["packages/*"] 필드가 포함됩니다. yarn install은 최상위 수준의 단일 node_modules에 공유 종속성을 설치하고, 로컬 패키지 간에 심링크를 만들고 중복을 방지합니다. 모든 workspace에 대한 명령은 yarn workspaces run <script>를 통해 실행됩니다.

yarn Plug'n'Play란 무엇이며 왜 필요한가요?

Plug'n'Play(PnP) — yarn 2에서 도입된 기존 node_modules 폴더의 대안입니다. 파일을 복사하는 대신 yarn은 .pnp.cjs에 종속성 맵을 만들고 패키지를 글로벌 캐시의 ZIP 아카이브에 저장합니다. PnP 이점: 몇 초 만에 설치, Node.js 시작 시간 30-50% 감소, node_modules 및 관련 경로 문제 없음.

npm에서 yarn으로 프로젝트를 마이그레이션하려면 어떻게 하나요?

yarn을 글로벌로 설치: npm install -g yarn. 프로젝트 루트에서 yarn import를 실행하면 yarn이 package-lock.json을 읽고 동등한 yarn.lock을 만듭니다. node_modules와 package-lock.json을 삭제하고 yarn install을 실행하여 확인합니다. npm을 yarn으로 교체하여 CI/CD 구성을 업데이트합니다. yarn은 package.json과 완전히 호환됩니다.

yarn에서 버전 잠금 오류를 수정하려면 어떻게 하나요?

"Integrity check failed" 오류는 yarn.lock과 node_modules가 동기화되지 않았을 때 발생합니다. 해결 방법: node_modules, yarn.lock을 삭제하고 캐시를 지운 후(yarn cache clean), yarn install을 다시 실행합니다. 버전 충돌의 경우 yarn upgrade-interactive를 사용하여 특정 업데이트를 선택합니다. yarn dedupe가 중복 패키지를 제거합니다.

요약

  • yarn — 2016년 Facebook이 만든 대체 Node.js 패키지 매니저
  • yarn.lock — YAML 형식으로 모든 종속성의 정확한 버전을 기록하는 lock 파일
  • yarn install — 글로벌 오프라인 캐시를 사용한 병렬 패키지 설치
  • Plug'n'Play — node_modules 폴더가 없는 혁신적인 yarn 2+ 메커니즘
  • yarn workspaces — 단일 node_modules로 모노레포 관리
  • React Native에서의 yarn — Expo 및 React Native 프로젝트의 표준 패키지 매니저
  • Zero-Installs — 패키지 다운로드 없이 즉시 설치를 위한 리포지토리 캐시 커밋

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기