✨🚀 대상: pnpm·Turborepo monorepo를 원격 Mac CI에서 돌리는 프론트엔드·풀스택 팀.
결론: pnpm store·Turborepo remote cache·registry 미러는 히트율 지표·store-dir 키·TLS 엔드포인트·worker 표가 한 세트입니다.
본문: 진단 지표·복붙 파라미터 표·의사결정 매트릭스·여섯 단계·FAQ. 로컬은 빠른데 파이프라인만 install에서 멈춘다면 아래 표부터 적용하세요.
연관: 홈,
npm·Homebrew 미러 피하기,
블로그 목록.
히트율
store·Turbo·pull 분 단위.
store-dir
lockfile·Node·OS 키.
미러·worker
registry·Git·동시성.
원격 Mac CI에서 pnpm store·Turbo remote cache가 자주 빗나가는 이유
- store-dir 공유 오염: Node 20·22가 한 pnpm store를 쓰면 콘텐츠 주소 히트가 깨지고 install만 반복됩니다.
- remote cache 선행: install이 국경 간 풀 중인데 Turbo 업로드가 먼저 돌면 히트율은 좋아 보여도 벽시계만 늘어납니다.
- 단일 레인 포화:
network-concurrency와 turbo worker 4가 APFS·대역을 동시에 쓰면 ETIMEDOUT이 연쇄합니다.
① 원격 Mac CI 캐시 히트율 진단 지표(pnpm store·Turborepo)
Apple Silicon 풀마다 Job 로그에 아래를 남기면 국경 간 풀 튜닝 순서가 정해집니다.
| 지표 | 목표 | 조치 |
|---|---|---|
| pnpm store 재사용 | frozen install 후 85% 이상 | store-dir·lockfile 키 점검 |
| Turbo remote 히트 | cacheable task 대비 60% 이상(main) | signature·env 해시 정렬 |
| pull 구간 | pnpm fetch→첫 turbo 8분 미만 | registry 미러·worker 하향 |
② pnpm store-dir·캐시 키 설계(.npmrc 복붙)
레인마다 store를 분리하고 Node 메이저·pnpm-lock.yaml 해시를 CI 캐시 키에 넣습니다. Git·npm 캐시 전략과 함께 보세요.
# .npmrc (저장소 루트 또는 CI 생성)
store-dir=/var/ci/pnpm-store-${JOB_ID:-lane}
shamefully-hoist=false
fetch-timeout=120000
network-concurrency=4
registry=https://registry.npmmirror.com/
CI 캐시 키: sha256(pnpm-lock.yaml)+node-$(node -v)+darwin-arm64
③ 자체 Turborepo remote cache 엔드포인트·TLS(turbo.json)
{
"$schema": "https://turbo.build/schema.json",
"remoteCache": {
"enabled": true,
"signature": true,
"teamId": "team_macpull_ci",
"apiUrl": "https://turbo-cache.internal:443"
}
}
Runner 시크릿에 TURBO_TOKEN·TURBO_API를 두고 게이트웨이에서 TLS 종료·분기별 토큰 교체를 분기마다 실행하세요.
④ registry·Git 미러 조합(국경 간 풀)
- npm registry: npmmirror 또는 사내 Verdaccio — 미러·이어받기 가이드
- Git: shallow·bundle — Git bundle 매트릭스
- 국경 가속: Git·npm·Homebrew CI 최적화
원격 Mac CI 의사결정 매트릭스: store·remote cache·미러·worker
| WAN | pnpm store-dir | Turbo remote | registry | turbo worker |
|---|---|---|---|---|
| 80ms 이하 안정 | JOB_ID별 NVMe | 자체 TLS | 지역 npm 미러 | 4, --filter 스코프 |
| 120–200ms 손실 | 워밍 store·concurrency 2 | signature·비동기 업로드 | npmmirror+Git bundle | 2, network-concurrency 4 |
| 불안정·위성 | store tarball 프리페치 | 읽기 위주 remote | 사내 프록시 필수 | 1, fetch 직렬화 |
여섯 단계: install·store 워밍·turbo run
- Node 고정:
corepack enable·pnpm-lock.yaml커밋. - .npmrc: store-dir·registry를
pnpm install --frozen-lockfile전에 기록. - CI 캐시: lockfile+Node로 복원 후
pnpm store status. - Turbo:
TURBO_TOKEN·HTTPSremoteCache.apiUrl검증. - 실행:
turbo run build test --filter=web... --concurrency=2. - 디스크: APFS 여유 30GB 미만이면 실패 — 풀 안정성 FAQ.
pnpm install --frozen-lockfile
pnpm store status | tee store.log
turbo run lint build test --filter=web... --summarize --concurrency="${TURBO_CONCURRENCY:-2}"
인용 가능한 정책·숫자
온콜 붙여넣기
- pnpm store: M4 NVMe 레인당 워밍 4–12GB·키는
pnpm-lock.yaml해시. - Turbo remote: 압축 산출물 2–80MB·
remoteCache.signature로 오염 차단. - 디스크 수위: Mac Studio 공유 풀 APFS 여유 30GB 미만이면 install 중단.
⑤ 동시성·--filter·디스크 수위 FAQ
- Turborepo remote cache 전에 pnpm store 히트율은?
- 따뜻한 레인에서 85% 이상. 70% 미만이면 store-dir·registry·Node 메이저 혼용을 점검하세요.
- 국경 간 링크에서 turbo worker는?
- network-concurrency 4와 worker 2로 시작. remote 히트 60%·여유 30GB 이상일 때만 4로 올리세요.
- 자체 remote cache에 TLS 필수?
- 공유 네트워크에서는 필수. signature 켜고 풀별 TURBO_TOKEN 교체. loopback 디버그만 HTTP.
- --filter 범위는?
turbo run ... --filter=...@scope/pkg로 변경 패키지만 빌드해 remote 업로드를 줄이세요.
요약: monorepo용 원격 Mac CI 노드 임대
pnpm·Turbo CI는 store-dir·registry 미러·TLS remote cache가 같은 키 스토리를 공유할 때 안정합니다. npm·Homebrew 미러 피하기·국경 간 풀 가속과 함께 보세요.
pnpm·Turborepo monorepo 전용 원격 Mac CI 노드
레인별 pnpm store·TLS remote cache·registry 미러를 한 NVMe 경로에 두세요. 로그인 없이 요금·구매를 확인하세요.