같은 IPA가 미국에서는 한 번에 통과하고, 일본에서는 연령 등급 설명을 요구받으며, 중국 본토에서는 프라이버시 매니페스트나 ICP 표시로 반려된다——국제 iOS 배포의 난제는 이제 「빌드가 되느냐」를 넘어 서명 신원이 명확한지, 지역 컴플라이언스가 선행되는지, 빌드·제출이 감사 가능한지에 달려 있습니다.
팀이 빌드 머신을 책상에서 클라우드 Mac으로 옮겨도 서명 로직이 자동으로 단순해지지는 않습니다. 인증서를 어느 머신에 둘지, 국가별 심사 차이를 CI 레인에 어떻게 매핑할지, Transporter 업로드와 TestFlight 검증을 어떻게 인계할지——이것이 클라우드 서명 전략이 답해야 할 질문입니다. 이 글은 컴플라이언스·엔지니어링 양쪽 관점에서 주요 시장의 심사 포인트를 정리하고, 실행 가능한 서명 아키텍처를 제안합니다. 공개 규칙은 App Store Review Guidelines와 App Store Connect API를 기준으로 합니다.
1. 왜 「배포 컴플라이언스」가 서명 전략의 상위 설계인가
많은 팀이 「서명」을 Xcode에서 Team을 고르고 Archive를 누르는 일로 이해합니다. 엔지니어링 관점의 서명은 이 바이너리가 누구의 권한으로 만들어졌는지, 어떤 기기에 설치 가능한지, App Store에 제출할 수 있는지를 다룹니다. 컴플라이언스 관점의 배포는 목표 시장의 현지 법규·플랫폼 정책을 충족하는지를 다룹니다.
둘의 관계는 다음과 같이 요약할 수 있습니다:
- 서명이 올바른 것은 심사 제출의 필요 조건이지 충분 조건이 아닙니다——Profile 일치, Entitlements 범위 준수, Distribution 인증서 유효 기간 등.
- 컴플라이언스가 완비된 것은 심사관이 「메타데이터」「프라이버시」「사업 자격」 단계에서 막을지를 결정합니다——서명 머신이 로컬이든 클라우드든 직접적 관련은 없습니다.
- 클라우드 전략의 가치는 서명·컴플라이언스 검사를 반복 가능하고 감사 가능하며 지역별로 분기 가능한 파이프라인으로 고정하는 것입니다——특정 동료 노트북 키체인에 의존하지 않게 하는 것이죠.
컴플라이언스 북극성
출시 한 번마다 세 가지를 답할 수 있어야 합니다: 누가 서명했는가(인증서·Team), 무엇을 서명했는가(commit + entitlements), 어디를 대상으로 하는가(지역 메타데이터·기능 플래그). 클라우드 Mac은 실행 환경일 뿐, 계약은 저장소와 CI에 씁니다.
2. 주요 시장 App Store 심사 차이 요약
Apple의 글로벌 심사 프레임워크는 통일되어 있지만, 각지 규제·스토어 현지화가 추가 요구를 얹습니다. 아래 표는 엔지니어링 책임자가 자주 쓰는 「차이 레이더」로, 빌드·메타데이터 전략에 매핑하기 좋습니다——구체 항목은 Apple 당기 정책·현지 법규를 따르세요.
| 차원 | 일반적 글로벌 요구 | 지역별 추가 예시 | 엔지니어링 매핑 |
|---|---|---|---|
| 프라이버시 공개 | Privacy Nutrition Label, Privacy Manifest(서드파티 SDK) | EU GDPR 권리 안내; 중국 PIPL 국내 저장 선언 | CI에서 PrivacyInfo.xcprivacy 검증; 지역별 프라이버시 정책 URL 전환 |
| 연령 등급 | App Store Connect 설문 | 한국 GRAC, 호주 등급 세부; 아동 앱 더 엄격 | 지역별 메타데이터 템플릿; TestFlight 그룹별 스크린샷·설명 검증 |
| 결제·IAP | 디지털 콘텐츠는 IAP(가이드 예외 참고) | EU DMA 하 대체 결제·외부 링크 정책 변화 | 기능 플래그 + 독립 QA 레인; 실험 Entitlement를 메인 서명 레인과 혼용 금지 |
| 콘텐츠·자격 | UGC 심사, 불법 콘텐츠 필터 | 중국 ICP 등록번호 표시, 게임 허가 | 원격 설정으로 표시 제어; 필요 시 지역 특화 바이너리 |
| 암호화 수출 | 미국 수출 컴플라이언스 설문(ENC) | 국가별 암호화 제품 신고 요구 상이 | ASC에 정확히 신고; CI에서 ITSAppUsesNonExemptEncryption 기록 |
중국 본토
본토 사용자 대상 앱에서 심사 대화에 자주 등장하는 항목: 앱 내·스토어 페이지 ICP 등록 정보 표시, 프라이버시 정책 접근성·데이터 수집 행위 일치, 뉴스·종교·금융·의료 등 버티컬 업종 자격, 온라인 게임 허가(版号) 자료. 대부분 중국 전용 서명 인증서가 필요하지는 않지만, 기능 제한·메타데이터 차별화는 필요할 수 있습니다——심사 반려 후 Profile을 급히 바꾸기보다 제출 전에 완료하세요.
EU·영국
GDPR·Cookie/추적 동의(ATT) 외에, 디지털 시장법(DMA) 하에서 EU 사용자는 App Store 외 배포 경로로 앱을 받을 수 있습니다. 엔지니어링 팀에게는: 대체 배포를 탐색한다면 사이드로드/마켓 채널용 독립 공증·업데이트·서명 흐름을 준비하고, App Store 메인 레인과 인증서를 격리해 App Store Distribution 패키지가 비승인 채널로 나가는 실수를 막아야 합니다.
미국·기타 영어권
미국은 보통 첫 출시·기준 메타데이터 시장입니다: 프라이버시 라벨, 건강/금융 데이터 HIPAA 관련 안내, 아동 온라인 프라이버시(COPPA) 등. 서명 전략에서는 메인 레인으로 쓰기 좋습니다: 미국 TestFlight에서 자동 검사를 먼저 통과한 뒤, 메타데이터 템플릿을 캐나다·호주 등 영어권에 복제·현지화 미세 조정.
일본·한국·동남아
일본은 구독·과금 투명성, 한국어 현지화 완성도를 중시합니다. 한국은 게임 등급·확률형 아이템 공개가 더 엄격하고, 동남아 여러 국은 현지 결제 습관·콘텐츠 민감도가 겹칩니다. 아태 노드에는 현지화 QA·VNC 검수를 두고, 미국 노드는 archive·업로드를 계속 담당——자세한 내용은 국제 통합 빌드 환경 글을 참고하세요.
3. 서명 신원 계층: 「설치 가능」을 「출시 가능」과 혼동하지 말 것
Apple 생태계에서 배포 관련 서명 유형은 아키텍처 다이어그램에 용도를 명시하고, 「하나의 인증서로 전부」를 금지하세요:
| 유형 | 전형적 용도 | 흔한 오용 |
|---|---|---|
| Apple Development | 실기기 디버깅, 내부 개발 | App Store 업로드용 Archive |
| Ad Hoc | 등록 기기 ID 한정 내부 테스트 배포 | 기기 목록 통제 상실, Store 패키지와 혼합 서명 |
| App Store Distribution | App Store / TestFlight 제출 | 전 직원 노트북에 인증서 설치 |
| Enterprise (In-House) | 기업 내부 배포(기업 프로그램 필요) | 대외 공개 배포(프로그램 약관 위반) |
Provisioning Profile은 App ID, 인증서, 기기(또는 App Store)를 묶습니다. 국제 팀은 다음을 합의하세요:
- 각 Bundle ID에 명확한 Capabilities 집합——테스트 Profile에 프로덕션 Entitlement가 섞이지 않게.
- fastlane match 등으로 인증서를 통제된 빌드 머신에 동기화하고, .p12를 메일로 보내지 않기.
- App Store Connect API Key와 서명 인증서 권한 분리: 업로드·메타데이터 자동화는 API Key, archive는 Distribution Profile.
4. 클라우드 서명 아키텍처: 빌드·서명·업로드 삼각
클라우드 Mac 호스트에서는 서명 관련 책임을 세 역할로 나누는 것을 권장합니다(같은 머신의 다른 CI job이거나 물리적으로 분리):
- 빌더(Builder): 코드 pull, SPM/CocoaPods 해석,
xcodebuild archive. 읽기 전용 키체인의 Distribution 신원 사용, ASC 업로드 권한 없음. - 서명 감사자(Signer/Auditor): archive 서명 체인, Entitlements,
embedded.mobileprovision, commit 메타데이터 검증; 제출 리포트 산출(SBOM 선택). - 퍼블리셔(Publisher): API Key 보유,
altool/notarytool(macOS 배포 시) 또는 Transporter 업로드; 개발 인증서 개인키 없음.
업로드 머신에 개발 인증서를 두지 않는 이유
공격 면적 최소화: Publisher 노드가 뚫려도 공격자는 빌드를 업로드할 수 있지만 새 바이너리에 서명하기는 어렵습니다. ASC 이중 인증·빌드 버전 잠금과 함께 사고 대응 창을 줄일 수 있습니다.
셀프호스팅 Runner 연동은 Mac 클라우드 CI/CD 배치 가이드를 참고하세요. 동일 playbook으로 미동부·미서부·아태 노드를 초기화하고, 지역별 키 주입·캐시 경로만 교체합니다.
5. 빌드 레인: 글로벌 패키지 vs 지역 특화 패키지
기본 가정: 하나의 App Store 서명으로 글로벌 출시. 지역 차이는 App Store Connect 지역별 메타데이터, 원격 설정, 앱 내 스위치로 우선 해결하고, IPA를 여러 개 유지하지 마세요.
다음 경우에만 독립 레인(독립 Scheme / Bundle ID / Profile)을 추가하세요:
- 중국 본토와 타 지역 바이너리 기능이 다름(로그인 방식, 지도 SDK, 결제 SDK 완전 상이).
- 기업 내부 배포와 스토어 버전 병행(Enterprise vs App Store Distribution).
- EU 대체 배포 채널용 다른 공증·업데이트 메커니즘 실험 패키지.
레인 격리의 강제 규칙: 서로 다른 Distribution 인증서가 같은 키체인 기본 검색 목록에 있으면 안 됩니다. CI는 SIGNING_IDENTITY·PROVISIONING_PROFILE_SPECIFIER로 명시 지정하고, 무인 Runner에서 Xcode 「자동 서명 관리」에 의존해 드리프트하지 않게 하세요.
6. 프라이버시 매니페스트, 수출 컴플라이언스, 제출 전 자동 검사
2024년부터 서드파티 SDK Privacy Manifest가 심사 고빈도 이슈입니다. 클라우드 파이프라인 「Signer/Auditor」 단계에 정적 검사를 넣으세요:
- 메인 target·임베디드 프레임워크에 유효한
PrivacyInfo.xcprivacy포함(해당 시). - Info.plist의
NSPrivacyTracking,NSPrivacyTrackingDomains가 ATT 호출과 일치. - 수출 컴플라이언스:
ITSAppUsesNonExemptEncryption가 ASC 설문 답과 일치. - 버전:
CFBundleShortVersionString/CFBundleVersion단조 증가, 레인 간 번호 충돌 방지.
검사 결과를 JSON으로 객체 스토리지에 보관하고 IPA와 같은 수명 주기로 유지——특정 국가 심사에서 「이 버전이 어떤 데이터를 수집하나」라고 물을 때 해당 commit·의존성 트리까지 추적할 수 있게 합니다.
7. TestFlight 지역별 검증과 심사 커뮤니케이션
TestFlight는 「심사 없이 아무거나」가 아닙니다: 외부 테스트도 Beta App Review 제약을 받습니다. 국제 팀 실전:
- 내부 테스트(ITC 사용자): 미국 구역에서 먼저 설치해 크래시·서명 검증; 아태 내부 인원은 현지화·지역 스위치 검증.
- 외부 테스트: 국가별 그룹 초대, 「심사관이 질문할 만한」 스크린샷·설명 템플릿 수집.
- App Store 제출: 「앱 심사 정보」에 지역별 컴플라이언스 설명 사전 입력(테스트 계정, 등록번호 진입, 특수 하드웨어 요구).
클라우드 Mac의 가치: 샌프란시스코 새벽에 자동 업로드된 빌드를, 베이징 오전에 아태 TestFlight 그룹이 설치——타임존 인계로 「빌드 대기」를 줄입니다. 아태 샌드박스 검수는 TestFlight·미국 샌드박스 FAQ를 참고하세요.
8. 클라우드 키체인과 인증서 순환 보안
인증서를 클라우드에 둔다고 불안전한 것은 아닙니다. 느슨한 권한이 문제입니다. 최소 실천:
- 빌드 머신은 전용 macOS 사용자, 키체인 잠금 해제 비밀번호는 CI 시크릿 관리로 주입, 이미지에 디스크 저장 금지.
- SSH 로그인 후 대화형
security import를 일상 절차로 두지 않기——전부 Infrastructure as Code. - 만료 30일 전 자동 알람; 순환 시 이중 인증서 병행 한 기간 두고 모든 Runner 동기화 확인 후 구 인증서 폐기.
- 감사 로그: 「어느 클라우드 호스트, 어느 job, 어느 signing identity」가 어떤 build number에 서명했는지 기록.
레드라인
- Enterprise 인증서로 공개 App Store 대체 배포 금지.
- Entitlements 조작·비공개 API로 심사 회피 금지——클라우드 자동화는 이상 Entitlement를 탐지해야지 숨기면 안 됩니다.
- 개인·회사 개발자 계정·기기 혼용 시 Team ID·Profile 출처 일치에 주의.
9. 미동부·미서부·아태 노드 역할 분담
| 노드 | 서명 관련 책임 | 컴플라이언스 관련 책임 |
|---|---|---|
| 미동부 | ASC API·일부 CDN 입구에 근접; archive + Transporter 업로드 | 미국 메타데이터 기준, 수출 컴플라이언스 설문 주 기록 |
| 미서부 | 아티팩트 저장소·객체 스토리지 동거; 두 번째 Builder로 큐 완화 | 서부 팀 VNC로 서명 후 GUI 플로우 스팟 체크 |
| 아태 | 일반적으로 Transporter 메인 업로드 비담당(대양 꼬리 지연) | 중·일·한 현지화 검수, ICP/프라이버시 문구 스크린샷, StoreKit 샌드박스 근거리 테스트 |
IPA 아티팩트를 미동부에서 생성해 객체 스토리지로 아태가 pull·설치하는 편이, 대양 횡단으로 archive를 반복하는 것보다 빠릅니다——한 번 서명, 여러 지역 검증. 아태에서도 로컬 archive가 꼭 필요하면(극히 드문 지역 의존 암호화 플러그인), 동일 commit·lockfile을 쓰고 감사 리포트에서 해시를 대조하세요.
10. 6단계 실행 체크리스트 (HowTo)
- 컴플라이언스 매트릭스: 목표 국가 나열, 메타데이터 vs 바이너리 차이 표시.
- 서명 계층: Development / Ad Hoc / App Store / Enterprise 용도·보유자 도식화.
- 레인 설계: 기본 단일 레인; 필요할 때만 Bundle ID 분리.
- 클라우드 삼각: Builder, Auditor, Publisher를 머신 또는 job으로 분리.
- CI 게이트: Privacy Manifest, 버전 번호, 서명 신원, Entitlements 화이트리스트.
- TestFlight 지역 분할: 지역 그룹 검증 후 「심사 제출」.
FAQ
국제 출시 시 국가마다 별도 서명이 필요한가?
보통 필요 없습니다. 동일 App Store Distribution 서명으로 여러 지역을 커버하고, 차이는 메타데이터·기능 플래그에 있습니다. Binary나 Bundle ID가 다를 때만 레인을 나눕니다.
클라우드 Mac 서명과 로컬 Mac은 컴플라이언스상 차이가 있나?
본질적 차이는 없습니다. Apple은 적법한 신원·추적 가능한 빌드를 봅니다. 클라우드는 키체인·감사를 강화해야지 규칙을 완화하면 안 됩니다.
중국 심사에서 추가로 주의할 점은?
ICP 표시, 프라이버시 정책, 업종 자격, 게임 허가 등. 대부분 메타데이터·기능 이슈이므로 제출 전 체크리스트로 자가 점검하세요.
EU DMA가 서명 전략에 미치는 영향은?
대체 배포 채널은 독립 공증·업데이트 경로가 필요합니다. App Store 메인 레인과 인증서를 격리해 혼합 서명을 막으세요.
match와 API Key는 어떻게 나누나?
match는 인증서·Profile 동기화, API Key는 업로드·메타데이터. 권한 분리로 유출 면적을 줄입니다.
서명 노드는 어디에 둘까?
archive·업로드는 ASC API와 동거(미동부/미서부); 아태는 현지화 QA·TestFlight 검수.
맺음말
iOS 배포 컴플라이언스는 법무 부서만의 일이 아니라, 서명·CI 아키텍처의 설계 입력입니다. 지역 차이를 「메타데이터 템플릿 + 기능 플래그 + 필요 시 두 번째 레인」으로 번역하고, 인증서를 클라우드 빌드 머신 전용 키체인에 가두고, Transporter·TestFlight를 타임존으로 인계하면——국제 출시는 「심사마다 복권」이 아니라 「예측 가능한 엔지니어링 프로세스」가 됩니다.
이미 클라우드 Mac으로 통합 빌드를 하고 있다면, 다음 단계는 제출 전 컴플라이언스 검사를 같은 파이프라인에 넣는 것입니다: 서명이 올바르고 컴플라이언스가 완비될 때만 업로드 버튼이 녹색이 되게 하세요.
클라우드 Mac으로 서명 삼각을 담고, 다지역 한 번에 배포
Vuncloud 미동부·미서부·아태 M4 클라우드 호스트를 Builder / Publisher 노드로 쓸 수 있습니다. SSH 초기화, match 동기화, Transporter 업로드를 동일 playbook으로 관리하세요.
관련 글
- 국제 iOS 개발 팀이 통합 빌드 환경을 구축하는 방법? (다지역 노드 배포 가이드)
- 아태 팀이 Mac mini M4 클라우드로 TestFlight·미국 샌드박스 검수하기
- iOS CI 캐시: CocoaPods, DerivedData, SPM 실전
- 2026 Mac 클라우드 CI/CD: 미동부·미서부 배치와 아태 SSH/VNC FAQ
Apple 심사·서명 절차는 공식 문서 기준입니다. 각국 법규는 갱신될 수 있으니 전문 법률 자문을 받으세요. 최종 업데이트: 2026년 7월 20일.