원격 Mac·CI에서 Cargo가 국경 간 회선에서 끊길 때는 미러·재시도·lockfile을 한 세트로 정해야 합니다. 비교표와
CARGO_NET_RETRY 등 복붙 파라미터로 고정합니다. 전체 풀 안정성은 Git·npm 풀 FAQ와 함께 보세요.
왜 원격 Mac에서 Cargo가 특히 불안정한가(핵심 세 가지)
1
왕복 지연. crates.io·Git 소스까지 RTT가 쌓이고 클린 러너는 매 잡마다 동일 다운로드 패스를 반복합니다.
2
기본값 편차. 워크스페이스가 크면 인덱스·파일 수가 많아 끊기기 쉽습니다.
CARGO_HTTP_TIMEOUT·CARGO_NET_RETRY를 env에 명시하세요.
3
미러 혼용. 공식 인덱스와 미러를 섞으면
Cargo.lock 검증이 흔들립니다. 아래 표로 소스를 하나로 고정하세요.선택 의사결정 매트릭스: 미러·공식 인덱스·lockfile 정책
도메인은 조직 승인 미러로 치환하세요.
| 시나리오 | 권장 소스 | lockfile | 리스크 |
|---|---|---|---|
| 글로벌 CI | https://index.crates.io/ |
커밋 lock + fetch --locked |
회선 민감 → 재시도 필수 |
| 국경 간 미러 | sparse+https://미러호스트/… |
개발·CI 동일 미러 | 복제 지연 스큐 |
| Git·path | [source] + git 프록시 |
서브모듈 핀 + lock | 서브모듈 미초기화 |
복붙 체크·인용 값(2026)
- 한 인덱스: 로컬·원격 Mac·CI 동일
replace-with또는 기본 레지스트리. - 재시도·타임아웃:
CARGO_NET_RETRY=10,CARGO_HTTP_TIMEOUT=300(초)를 출발값으로. - CI 게이트:
cargo fetch --locked후cargo metadata --locked또는build --locked.
원격 Mac CI 세 단계 구성(환경변수·config·캐시)
세 덩어리로 나눠 적용하고, 내부는 다섯 실행 단계입니다. 원격 Mac SSH 세션에도 동일 env를 넣어 로컬 재현성을 맞추세요.
1
env.
CARGO_NET_RETRY=10, CARGO_HTTP_TIMEOUT=300.
2
config.
.cargo/config.toml에 [source.crates-io] replace-with와 미러 registry 또는 sparse URL 통일.
3
CI 예시.
env:
CARGO_NET_RETRY: "10"
CARGO_HTTP_TIMEOUT: "300"
4
캐시.
cargo fetch --locked 선행, 캐시 키에 lock 해시.
5
검증.
cargo metadata --locked 후 빌드. lock 갱신은 별도 PR.미러 선택 맥락: Git·npm·Homebrew CI 최적화.
타임아웃·인증서·프록시 FAQ
타임아웃: env로 1차 완화 후에도 끊기면 방화벽·QoS를 점검합니다.
인증서: 기업 CA는 키체인·승인 번들로 신뢰. TLS 검증 해제는 지양합니다.
프록시: HTTPS_PROXY·NO_PROXY를 Cargo·git에 동일 적용.
Git 서브모듈·모노레포(워크스페이스) 병행 시 유의사항
- 서브모듈:
git submodule update --init --recursive를 Cargo보다 먼저, 크레이트 경로에서cargo실행을 스크립트에 고정. - 워크스페이스:
members·pathdeps와 미러 정책 충돌 여부 확인, 사내 레지스트리는[registries]별칭. - 캐시: 루트 lock 기준으로 캐시 키 분리.
요약: 미러·재시도·lockfile를 한 줄로 고정하기
동일 레지스트리 + 재시도·타임아웃·fetch --locked로 네트워크 변동을 흡수하고, 서브모듈·워크스페이스는 스크립트 순서로 고정하세요.