--repository_cache·--disk_cache·--remote_cache 임계, --jobs·Git 얕은 클론·IO 분리 FAQ, 복붙 .bazelrc·셸 재시도. 연관: 기술 블로그, Git·npm 국경 간 풀, 빌드 풀·디스크 IO, MacPull 홈.
- 레지스트리·tarball 이중 홉: BCR 인덱스는 빠른데 모듈
source호스트가 다른 리전이면 RTT·차단이 겹칩니다. - 캐시 혼동: 액션 출력(
--disk_cache)과 외부 다운로드(--repository_cache)를 한 경로에 두면 정리·락 이슈가 섞입니다. - 병렬 폭주:
--jobs를 코어 가득 올리면 NVMe 메타데이터 큐가 병목이라 네트워크 타임아웃으로 오인하기 쉽습니다.
① Bazel 외부·registry가 원격 Mac에서 막히는 지점
WORKSPACE의 http_archive·git_repository와 Bazel 6+ MODULE.bazel은 서로 다른 다운로드 경로를 탑니다. 전자는 URL·Git 프로토콜 직접, 후자는 모듈 인덱스→소스 아카이브 체인입니다. 공유 Mac에서는 동시 잡이 같은 repository_cache 디렉터리를 두고 쓰기 때문에 파일시스템 락·초기 풀 시 디스크 쓰기 폭주가 먼저 드러납니다.
| 단계 | 전형 증상 | 우선 점검 |
|---|---|---|
| Registry 조회 | MODULE.bazel 해석 단계에서 간헐 5xx·TLS 핸드셰이크 지연 |
common --registry= 승인 미러, 프록시 PAC·방화벽 로그 |
| 아티팩트 tarball | 체크섬 OK인데 중간 끊김·재개 실패 | --repository_cache를 NVMe에 두고 동일 URL 재실행 |
| Git 기반 외부 | shallow 이후 특정 ref 미존재 | depth·부분 클론과 commit 좌표 일치(아래 FAQ) |
| 액션 재실행 | 캐시 히트 없이 컴파일만 반복 | --disk_cache·--remote_cache 플래그와 인증 헤더 누락 여부 |
② 로컬 disk cache vs 원격 cache 선택 임계 표
--disk_cache는 액션 출력을 로컬에 쌓고, --repository_cache는 외부 규칙이 받은 바이트를 쌓습니다. --remote_cache는 팀이 공유하는 액션 캐시 백엔드(gRPC·HTTP)입니다. 세 가지는 상호 보완이지 대체 관계가 아닙니다.
| 조건 | 우선 권장 | 이유 |
|---|---|---|
| 단일 전용 Mac, 잡 순차 | --repository_cache + --disk_cache |
원격 RTT 없이 재빌드 비용 최소 |
| 풀·샌드박스에서 클린 체크아웃 매번 | --remote_cache + 로컬 disk(선택) |
액션 히트로 컴파일 재전송 감소 |
| 규제·에어갭, 업로드 금지 | disk + repository만, remote 끔 | 아티팩트 외유 차단 |
| 국경 간 링크 불안정 | repository를 먼저 키우고 remote는 읽기 전용 | 외부 tarball 실패율이 액션 캐시보다 높은 경우가 많음 |
동시 bazel build 4+ |
잡별 --output_base 또는 큐잉 |
단일 캐시 디렉터리 락·쓰기 경합 완화 |
③ WORKSPACE·MODULE 풀 실패: 재시도·타임아웃·복붙 플래그
Bazel 단일 플래그로 모든 HTTP 지연을 통제하긴 어렵습니다. 실무에서는 CI 셸에서 bazel fetch //... 또는 bazel build를 2s·4s·8s 슬립, 최대 3회로 감싸고, 아래 .bazelrc 조각을 저장소에 커밋합니다. 프록시 뒤라면 HTTPS_PROXY·NO_PROXY를 잡 시작 시 export하세요.
| 항목 | 플래그·설정 | 메모 |
|---|---|---|
| 외부 다운로드 캐시 | common --repository_cache=/usr/local/ci/bazel/repo-cache |
NFS 대신 로컬 SSD; 용량 모니터링 |
| 액션 로컬 캐시 | build --disk_cache=/usr/local/ci/bazel/disk-cache |
remote와 병행 가능 |
| 원격 액션 캐시 | build --remote_cache=grpcs://cache.example.com:443 |
TLS·토큰은 --remote_header·벤더 문서 따름 |
| 모듈 레지스트리 | common --registry=https://bcr.bazel.build (또는 승인 미러) |
여러 줄로 폴백 순서 고정 |
| 선행 동기화 | bazel sync --configure |
MODULE 그래프만 먼저 안정화할 때 유리 |
| 로컬 병렬 작업 | build --jobs=8 (출발) |
공유 Mac은 4~6부터 디스크 큐 확인 |
# .bazelrc (예시 — 경로·호스트는 환경에 맞게 교체)
common --repository_cache=/usr/local/ci/bazel/repo-cache
build --disk_cache=/usr/local/ci/bazel/disk-cache
# build --remote_cache=grpcs://your-remote-cache:443
# build --remote_header=authorization="Bearer ${REMOTE_CACHE_TOKEN}"
common --registry=https://bcr.bazel.build
build --jobs=6
# 셸 래퍼(요지)
# for i in 1 2 3; do bazel build //target && break; sleep $((2**i)); done
Git 기반 외부 규칙은 네트워크 재시도와 별도로 ref 가시성을 확인하세요. Git·npm 캐시 전략 글의 디스크 분리 원칙을 Bazel 캐시 경로에도 그대로 적용하면 IO 병목 진단이 쉬워집니다.
④ Git 부분·얕은 클론과 병행할 때 디렉터리·IO 할당 FAQ
워크스페이스(소스), --output_base, --repository_cache, --disk_cache를 가능하면 서로 다른 서브볼륨 또는 최소한 다른 상위 디렉터리에 둡니다. 같은 SSD라도 큰 Git unpack과 동시에 캐시에 수만 파일을 쓰면 큐 지연이 겹칩니다.
얕은 클론: git_repository가 가리키는 commit이 shallow 경계 밖이면 Bazel 단계에서만 실패합니다. 해결은 (1) depth 확대 (2) 전체 ref 가져오기 (3) http_archive로 소스 고정 중 하나입니다.
부분 클론(filter): 서브모듈·LFS와 겹치면 풀 시간이 길어져 Bazel fetch 타임아웃과 경쟁합니다. 대용량 에셋은 저장소 밖 아티팩트 스토어로 빼고 규칙 URL을 좁히세요. 서브모듈 매트릭스는 Git submodule·LFS CI 글과 함께 보세요.
⑤ 원격 Mac 리전·--jobs 병렬이 풀 안정성에 주는 영향
노드가 북미·일본·싱가포르 등 아티팩트 호스트에 가까울수록 registry·tarball RTT가 줄어듭니다. 반대로 팀 레지스트리가 한 리전에만 있으면 크로스 리전 self-hosted runner가 항상 불리합니다. --jobs는 CPU가 아니라 디스크 동시 쓰기 한계를 먼저 맞춥니다. M4급 공유 풀에서는 6 전후에서 시작해 p95 IO 대기를 본 뒤 올리는 편이 안전합니다. 병렬 잡 수(GitHub Actions matrix 등)와 곱해져 총 동시 Bazel 프로세스가 디스크·NAT 세션을 고갈시키지 않게 Runbook에 상한을 박아 두세요.
| 신호 | 조치 |
|---|---|
| fetch 단계만 간헐 실패 | 셸 재시도·repository_cache·registry 미러 |
| 컴파일은 되는데 총 시간만 김 | remote_cache 읽기·disk_cache 경로 SSD 여부 |
| 동시 PR 두 개부터 터짐 | 잡당 --jobs 하향 또는 runner 큐 길이 제한 |
맺음말
repository_cache로 외부 tarball을 먼저 안정화하고, disk_cache·허용 시 remote_cache로 액션 비용을 깎는 순서가 2026 원격 Mac에서 가장 재현성 높습니다. MODULE 그래프는 sync --configure로 앞당기고, Git 얕은 클론은 ref 정합성을 Runbook에 명시하세요.
로그인 없이 이어 보기: 홈, 원격 Mac 구매, 요금제·노드, 도움말 센터, SSH·연결 고객 지원, 기술 블로그 목록.
Apple Silicon 원격 Mac 임대로 리전·SSD·SSH 환경을 CI에 고정하면 Bazel 캐시 실험과 병렬 상한 튜닝이 반복 가능해집니다. 노드 위치와 대역이 곧 빌드 SLA입니다.