대상: 원격 Mac self-hosted 러너에서 Gradle·Maven 의존성이 국경 간 회선으로 자주 끊기는 JVM 팀. 제공: 저장소 종단·미러 엔드포인트 표, GRADLE_USER_HOME·.m2 배치, --parallel·worker·-T 임계, HTTP 타임아웃·지수 백오프 재시도 복붙값. 더 보기: 기술 블로그 목록, 모듈 풀 Go GOPROXY 매트릭스, MacPull 홈.
  • 단일 홉 취약점: settings.gradle·settings.xml에 순서 폴백 없이 Nexus URL 하나만 두면 전체 해석이 동시에 멈춥니다.
  • 병렬 IO 폭풍: 공유 SSD에서 org.gradle.workers.maxmvn -T 1C를 무분별히 올리면 네트워크 타임아웃으로 오인하기 쉽습니다.
  • 캐시 볼륨 오류: 작거나 NFS인 홈의 ~/.gradle·~/.m2는 락·대역폭 병목을 키웁니다.

① 2026 의사결정 매트릭스: 해석은 어디서 끝내나

정책이 허용하면 사설 허브 한 곳으로 모으되, 헬스체크·폴백 URL을 Runbook에 적어 둡니다. Git·npm과 동일 SSD를 쓰면 캐시 키·동시성 큐를 같은 Runbook에 묶어 디스크 경합을 줄입니다.

접근 적합 공유 Mac CI에서 주의
사설 Nexus·Artifactory·GitHub Packages 정문 감사·TLS를 퍼미터 안에 유지 스탠바이 없으면 SPOF; modules-2·.m2 용량 계획
Maven Central·Gradle Plugin Portal 직접 건강한 출구·공개 OSS 지연·레이트리밋—스레드보다 타임아웃을 먼저
하이브리드 순서 저장소 내부 좌표는 사내, 공개는 승인 허브 Gradle repositories 순서·Maven mirrorOf를 문서화

② 미러 엔드포인트 비교(호스트만 교체해 패턴 복사)

역할 전형 URL 형태 강점 공유 Mac CI 약점
사내 그룹 리포지토리 https://nexus.corp.example/repository/maven-public/ 단일 출구·캐시된 아티팩트 헬스 없으면 단일 장애점
Maven Central https://repo1.maven.org/maven2/ 정본 메타데이터 지연·한도—병렬 상한 필요
승인 지역 미러 규정 승인 허브 URL 허용 시 RTT 감소 복제 지연이 해석 깨뜨림—SLA 추적
Gradle Plugin Portal https://plugins.gradle.org/m2 플러그인 좌표 분리 미러 허용 목록에서 빠지기 쉬움

③ 캐시 디렉터리: GRADLE_USER_HOME·Maven 로컬 저장소

대상 경로·변수 CI 메모
Gradle 사용자 홈 export GRADLE_USER_HOME=/usr/local/ci/gradle ./gradlew 전에 export; 테넌트별 분리 가능
다운로드 모듈 $GRADLE_USER_HOME/caches/modules-2 용량 최대; 비피크 정리
변환·jar 캐시 $GRADLE_USER_HOME/caches/ 하위 Gradle 8+ 변환 IO 부담
Maven 로컬 ~/.m2/repository 또는 -Dmaven.repo.local=/usr/local/ci/m2 공유 시 파일 락 규율

④ 병렬 파라미터: --parallel·workers·Maven -T 임계

도구 노브 보수적 출발 올리기 전 조건
Gradle org.gradle.parallel=true 공유 풀에 org.gradle.workers.max=4 디스크 큐 평탄·해석이 여전히 지배
Gradle CLI --parallel worker 상한과 일치; 소형 잡은 생략 구성 단계 CPU 유휴·IO 여유
Maven mvn -T 1C 또는 -T 4 공유 디스크는 -T 2·-T 4 우선 전용 호스트·NVMe 여유

⑤ HTTP 타임아웃·재시도·백오프(약한 링크 플레이북)

계층 설정 권장 출발값 재시도 패턴
Gradle systemProp.org.gradle.internal.http.connectionTimeout 120000 ms 최대 3회, 슬립 2s / 4s / 8s
Gradle systemProp.org.gradle.internal.http.socketTimeout 120000 ms 시도마다 실패 URL 로그
Maven Wagon·resolver (예: -Dmaven.wagon.http.retryHandler.count=3) Gradle과 동급 2분대 상시 -U 지양; 캐시 예열 후 전체 빌드

⑥ 실행 체크리스트: 첫 그린 빌드 전 다섯 단계

1
JDK·래퍼 고정. ./gradlew·mvnw 버전을 CI에서 자동 승격하지 않습니다.
2
캐시 루트 export. 잡 셸 맨 앞에 GRADLE_USER_HOME·MAVEN_OPTS=-Dmaven.repo.local=...를 둡니다.
3
저장소 순서. 내부 미러→승인 공개 허브→명시 폴백만.
4
병렬 상한. Gradle parallel+worker 천장; Maven -T는 위 표에서 출발.
5
타임아웃·재시도 커밋. 아래 스니펫을 저장소에 두고 ./gradlew·mvn을 셸 래퍼로 최대 3회 감쌉니다.
org.gradle.parallel=true
org.gradle.workers.max=4
org.gradle.caching=true
systemProp.org.gradle.internal.http.connectionTimeout=120000
systemProp.org.gradle.internal.http.socketTimeout=120000
# Maven 예: MAVEN_OPTS에 -Dmaven.wagon.http.retryHandler.count=3 추가

전체 매트릭스 전에 ./gradlew help 또는 mvn -q dependency:get로 스모크 테스트하세요.

⑦ 아키텍처 리뷰용 인용 수치

120초 소켓은 2026 장거리 풀에서 CPU를 늘리기 전에 먼저 시도할 만한 기본선입니다.

Gradle worker 4는 M4급 공유 풀에서 메타데이터 집약 그래프에 16보다 자주 이깁니다.

2·4·8초 백오프 3회는 벽시계를 제한하면서 flaky 미러를 흡수합니다.

⑧ FAQ: 원격 Mac 러너의 Gradle·Maven 캐시

잡별 vs 풀별? 정책 허용 시 풀 단위 GRADLE_USER_HOME; 규제 아티팩트는 분리 디스크.

mvn -T 1C 항상? 동시 잡 많은 SSD에서는 -T를 낮추고, 전용 호스트에서만 상향.

--parallel이 다운로드에? TLS 동시성만 늘리는 경우가 많습니다—미러·타임아웃·디스크를 먼저.

맺음말

미러 순서·GRADLE_USER_HOME·.m2 NVMe 배치·worker 상한·120초 HTTP2·4·8초 백오프 3회만 맞춰도 2026 원격 Mac CI의 JVM 풀 실패가 줄어듭니다.

로그인 없이 이어 보기: , 원격 Mac 구매, 도움말(SSH·연결 FAQ).

같은 SSD에서 Git·Docker와 경쟁하지 않도록 디스크·동시성 Runbook을 이 페이지와 함께 유지하세요.

Gradle·Maven CI용 원격 Mac

Apple Silicon 전용 노드·SSD 친화 경로·SSH로 JVM 파이프라인을 고정하세요. 아래는 모두 로그인 없이 열 수 있는 페이지입니다.