CI/CD 2026-04-01 약 14분

2026년 국경 간 Apple 인도: notarytool 공증 업로드 타임아웃과 롱테일을 다중 리전 물리 Mac 노드 선택으로 안정화—임계값 의사결정 매트릭스·실행 파라미터·FAQ

여러 국가에 흩어진 릴리스 엔지니어는 notarytool 업로드가 멈추거나 Accepted 직전에 CI가 죽고, 사실은 지리에 따른 「무작위」 롱테일을 자주 봅니다. 본문은 누가 어떤 상황인지, 증상·리전 풀 선택 두 장의 임계값 매트릭스, 복붙 가능한 notarytool 호출, 7단계 롤아웃, 인용 수치, FAQ를 담아 한 홉에 몰린 단일 리전 Mac 대신 리전별 물리 풀을 표준으로 고정하는 방법을 정리합니다.

2026년 notarytool 공증 업로드 타임아웃과 다중 리전 물리 Mac CI 파이프라인

1. 실무에서 업로드가 깨지는 이유: 바이너리만의 문제가 아닙니다

  1. Apple 향 경로가 나쁜 단일 리전 Mac. 작은 Git 작업은 되는데 수백 MB 공증 업로드만 국경 구간에서 손실·버퍼블로트가 튈 때 시간 단위로 재시도합니다.
  2. 공증 P99보다 짧은 CI 타임아웃. 컴파일 기준으로 잡은 뒤 --wait 대기열·스캔 시간을 잊으면 주간 SLO 위반의 대부분이 꼬리에서 납니다.
  3. 불안정 재시도의 숨은 비용. 재제출마다 submission ID가 늘고 대시보드가 지저분해지며, 실제로는 네트워크·정책 문제인 「유령」 실패를 사람이 뒤집니다.
  4. 프록시·검사 정책. 브라우저에는 통하는 기업 TLS 미들박스가 장시간 CLI 업로드를 깨는 경우가 많고, Apple 엔드포인트 허용은 방화벽 티켓 한 장이 아니라 보안·감사 논의입니다.

기업 출구·Apple ID·앱별 비밀번호가 한 경로에 묶이면 동일 증상이 반복됩니다. 자격 증명과 네트워크 전제를 먼저 분리해 두면 리전 라우팅 결정이 훨씬 빨라집니다.

2. 증상 → 유력 원인 → 1차 조치 매트릭스

사후 분석 때 「오늘 Apple이 느렸다」 대신 측정 가능한 신호로 대화를 고정합니다.

증상 유력 원인 1차 조치
업로드 진행이 멈추고 CPU는 한가함 RTT 꼬리, 손실, 프록시 버퍼링 가장 깨끗한 리전에 라벨된 Mac에서 재실행하고 TLS 연결 시간을 로그(4절 참고).
즉시 인증 오류 앱별 비밀번호·Team ID 오류, 키체인 항목 만료 자격 증명 수정; 네트워크와 혼동하지 말고 notarytool history로 검증.
로그는 Accepted인데 사용자에게 Gatekeeper 경고 stapler 누락 또는 잘못된 번들 반환·빌드된 동일 아티팩트에 staple 후 stapler validate.
간헐적 HTTP 5xx Apple 측 또는 중간 경로 혼잡 지수 백오프(6절); 동일 빌드에 대한 병렬 중복 제출은 피합니다.

3. 다중 리전 물리 Mac 풀 의사결정 매트릭스

Runner에 notary:eu, notary:us-west처럼 라벨을 붙이고, PM 위치가 아니라 그 Mac에서 실측한 TLS 성능으로 라우팅합니다.

후보 Mac에서 측정 풀 결정 비고
Apple 호스트 TLS 연결 중앙값 ≤ 80ms, 손실 < 0.3% 주 공증 풀 기본 릴리스·야간 서명 빌드를 여기에 스케줄.
P95 TLS 연결 80–200ms, 안정적 보조·DR 풀 오버플로용; 주 풀 대비 CI 타임아웃 +10–20분.
P95 > 200ms 또는 손실 > 1% 공증 부착 금지 컴파일 전용으로 두거나 리전 릴레이 Mac으로 우회 후 캐리어 변경 시 재측정.

iOS E2E 인도도 동일합니다: 서명된 아카이브가 실제로 어느 출구에서 나가는가에 맞춰 풀 라벨을 잡고, 조직도 리전만 따라가지 마세요.

4. 실행 가능한 notarytool·stapler 파라미터

자리 표시자를 바꿔 쓰세요. 비밀은 키체인에 두고 @keychain: 참조를 권장합니다. Xcode CLT가 설치되어 있다고 가정합니다.

4.1 공증을 실행할 Mac에서 기준 TLS 시간

# 피크 업무 시간에 반복; 메트릭 스택으로 전송
for i in {1..60}; do
  curl -o /dev/null -s -w "%{time_connect} %{time_appconnect} %{time_total}\n" \
    "https://developer.apple.com/"
  sleep 2
done | tee /tmp/apple-tls-mac.txt

4.2 제출 후 종료 상태까지 블로킹

xcrun notarytool submit ./Release/MyApp.zip \
  --apple-id "[email protected]" \
  --password "@keychain:AC_NOTARY_PASSWORD" \
  --team-id "ABCDE12345" \
  --wait \
  --verbose

플래그: --wait는 Accepted/거절까지 프로세스를 유지합니다. --verbose는 HTTP 재시도를 로그 상관에 노출합니다.

4.3 블로킹 없이 제출(오케스트레이터 친화)

xcrun notarytool submit ./Release/MyApp.zip \
  --apple-id "[email protected]" \
  --password "@keychain:AC_NOTARY_PASSWORD" \
  --team-id "ABCDE12345" \
  --verbose
# 표준 출력에서 submission id를 캡처한 뒤:
xcrun notarytool log <submission-id> \
  --apple-id "[email protected]" \
  --password "@keychain:AC_NOTARY_PASSWORD" \
  --team-id "ABCDE12345"

4.4 staple·검증

xcrun stapler staple "./build/MyApp.app"
xcrun stapler validate "./build/MyApp.app"

제출 실패가 자격 증명인지 경로인지 빨리 가르려면 2026 글로벌 개발: Apple ID 및 네트워크 환경 최적화의 체크리스트와 병행하세요.

5. 7단계 롤아웃

  1. 모든 후보 Mac에 4.1 루프를 평일 일주일 돌려 P50/P95 연결 시간을 저장합니다.
  2. 리전+역할 Runner 라벨(notary-primary-eu)을 만들고 릴리스에 macos-latest를 쓰지 않습니다.
  3. 단일 notary 스크립트를 저장소에 고정: submit, 제출 ID를 아티팩트로 남기기, staple, validate.
  4. CI 타임아웃을 측정된 공증 P99 + 25% 여유로 설정하고, 하드 킬 전 경고를 둡니다.
  5. 재시도는 전송 계층 실패에만(6절), 빌드 ID 기준 중복 제출 방지.
  6. 프록시 규칙을 보안과 문서화: 검사를 우회해야 할 Apple 호스트명과 패킷 캡처 증거.
  7. 분기별 재기준: 캐리어나 사무실 SD-WAN 변경 후 중앙값이 20% 이상 움직이면 기본 풀을 옮깁니다.

SSH·VS Code로 원격 Mac 워크스페이스를 고정하는 패턴은 Mac mini 원격 개발 완벽 가이드(VS Code·SSH)와 함께 두면 리전별 노드 운영 비용이 줄어듭니다.

6. 인용 가능한 임계값(SLO 문서 출발점)

  • --wait 월 클럭: 바쁜 시간대 일반 앱 아카이브에 25–50분을 우선 예산하고, 대형 바이너리는 자체 히스토그램을 그리세요.
  • CI 잡 타임아웃: 컴파일이 아니라 관측된 공증 단계 P99 + 30–45분을 하드 한도로 잡습니다.
  • 전송 오류 백오프: 3회, 간격 5 / 15 / 45분 후 온콜; 동일 아티팩트 맹목 병렬 제출은 금지.

7. FAQ

notarytool이 이제 필수인가요?

신규 자동화에는 사실상 예로 보세요. 레거시 altool은 지양하고 notarytool submit|log|history와 같은 스크립트 안의 stapler를 표준화하세요.

Linux나 Windows에서 공증할 수 있나요?

Apple 지원 CLI로는 불가합니다. notarytool·stapler에는 macOS가 필요하고, 이 단계를 법적·재현 가능하게 호스팅하려고 물리 Mac 풀이 존재합니다.

Mac 리전을 옮기면 Apple ID 규정에 걸리나요?

조직의 Apple Developer Program 약관·계정 보안 정책을 따르세요. 운영적으로는 관리 키체인, 앱별 비밀번호 순환, 제출 가능 머신 감사를 유지합니다.

한 리전 풀만 건강하면?

일시적으로 모든 공증을 그쪽으로 라우팅하고 동시성 한도는 신중히 올리며, 불량 리전은 캐리어 티켓을 엽니다. 3절 매트릭스에 이미 어느 경로가 녹색인지 나와 있어야 합니다.

8. 공증 파이프라인에 Mac mini급이 맞는 이유

공증은 오래 CPU를 쓰지 않지만 안정적인 TLS 세션, 신뢰할 수 있는 키체인 접근, 네이티브 macOS 툴체인에 매우 민감합니다. Apple Silicon Mac mini는 서명 단일 스레드 성능, Xcode 규모 워크로드에 맞는 통합 메모리, 대기 전력 수 와트 수준을 동시에 제공해 상시 리전 Runner에 적합합니다.

macOS는 Gatekeeper·SIP·FileVault가 겹쳐 임시 VM 대비 변조 위험을 낮추고, 개발자 프로그램 명의로 소프트웨어를 제출할 수 있는 자격 증명을 둘 때 특히 중요합니다.

공증 꼬리만 줄이려고 다중 리전 물리 노드를 표준화한다면, 동일 OS 빌드·예측 가능한 네트워크·이후 iOS 컴파일 클러스터 확장 여지까지 고려할 때 Mac mini급 플릿이 마찰 비용이 가장 낮은 편입니다.

24/7 CI 부하에서도 발열·소음 부담이 적은 하드웨어에 이 파이프라인을 얹고 싶다면 Mac mini M4는 리전별 공증 풀을 앵커하기에 가성비가 매우 높은 선택입니다. 위 매트릭스와 함께 쓰고 가장 건강한 리전을 주 풀로 승격하세요.

정리

국경 간 notarytool 장애의 중심은 종종 단일 홉·단일 리전에 있습니다. 증상·리전 두 매트릭스로 라우팅을 데이터로 고정하고, CLI·타임아웃·재시도를 표준화하면 「Apple이 느렸다」가 아니라 경로와 정책을 고칠 수 있습니다.

다중 리전 물리 Mac

리전별 notarytool 업로드 경로가 필요하신가요?

팀에 가까운 전용 macOS 호스트로 공증 업로드를 깨끗한 경로에 올리고, 국가마다 하드웨어를 사지 않고도 동일 파이프라인을 유지하세요.

리전 풀 네이티브 notarytool 성장에 맞춘 과금
macOS 클라우드 렌탈 초저가 한정 특가
지금 구매