가이드라인 3.1.2 앱 거절: 구독 페이월 가격 표시 해결법
글: Mehdi Azizi
게시, 9분
가이드라인 3.1.2: 실제 청구 금액이 페이월에서 가장 눈에 띄는 가격이어야 하고, 기간, 자동 갱신, 이용약관 링크도 필요해요. 실제 거절 두 건과 수정 방법을 정리했어요.
가이드라인 3.1.2는 자동 갱신 구독을 다루는 규정이에요. Apple이 이 조항을 언급했다면 두 가지를 확인하세요. 실제로 청구되는 금액이 페이월에서 가장 눈에 띄는 가격이어야 하고, 앱과 스토어 페이지 모두 기간, 가격, 그리고 이용약관과 개인정보 처리방침으로 연결되는 작동하는 링크를 보여줘야 해요.
저는 2026년 10월에 앱 두 개가 이 사유로 거절됐어요. Solys는 10일, TradaZen은 12일이었죠. 원인은 같은 표시 방식이었어요. 주당 가격은 크게, 실제 청구 금액은 작게. 이 글에서는 규정 원문, 이 두 사례, 그리고 지금 제가 쓰는 체크리스트를 소개할게요. 다른 거절 사유는 Apple이 앱을 거절하는 이유를 읽어보세요.
가이드라인 3.1.2는 무슨 내용인가요?
3.1.2 "Subscriptions"는 App Review Guidelines의 섹션 3 "Business", 그중 3.1 "Payments" 파트에 있어요. 그래서 메일 제목이 "Guideline 3.1.2 - Business - Payments - Subscriptions"인 거예요. 하위 항목이 세 개 있고, 괄호 안의 알파벳이 어디를 봐야 하는지 알려줘요.
| 하위 항목 | Apple의 요구 사항 | 대표적인 거절 사례 |
|---|---|---|
| 3.1.2(a) Permissible uses | 지속적인 가치, 최소 7일 | 콘텐츠가 바뀌지 않는 구독 |
| 3.1.2(b) Upgrades and Downgrades | 중복 없이 요금제 변경 | 두 요금제가 동시에 결제됨 |
| 3.1.2(c) Subscription Information | 무엇을 얼마에 받는지 | 환산 가격이 청구 가격보다 큼 |
3.1.2(c) 원문은 짧아요. 사용자에게 구독을 요청하기 전에 "clearly describe what the user will get for the price", 즉 그 가격에 무엇을 받는지 명확히 설명해야 해요. 그다음 개발자 프로그램 라이선스 계약의 부속서 2(Schedule 2)를 참조하라고 해요. 이 부속서는 "clearly and conspicuously", 즉 명확하고 눈에 띄게 보여줘야 할 항목을 나열해요.
- 구독 이름
- 구독 기간
- 가격, 그리고 해당된다면 단위당 가격
- 앱 안에서 접근할 수 있는 개인정보 처리방침과 이용약관 링크
가격 크기에 관한 규칙은 Apple의 구독 안내 페이지에 있어요. 구매 흐름에서 "the amount that will be billed must be the most prominent pricing element in the layout", 즉 청구될 금액이 레이아웃에서 가장 눈에 띄는 가격 요소여야 해요. 월 환산 가격이나 할인율은 보조 위치에 더 작게 표시한다면 허용돼요. 같은 페이지에서 무료 체험이 있다면 체험 기간과 체험 종료 후 청구 금액도 표시하라고 해요.
제가 받은 3.1.2(c) 거절 두 건
Solys: 0.38유로는 크게, 19.99유로는 작게
Solys는 SNS를 잠재워주는 제 알람 앱이에요. 온보딩 페이월의 "연간" 카드에는 "주 0.38유로"가 21포인트 굵은 글씨로 표시돼 있었어요. 그 아래 15포인트로 "연 19.99유로"라고 적혀 있었죠. 그런데 실제로 결제되는 건 0.38유로가 아니라 19.99유로예요.
2026년 10월 10일, Apple은 3.1.2(c)를 근거로 이 버전을 거절했어요. 메시지는 청구 금액이 가장 명확하고 눈에 띄는 가격 요소여야 한다고 요구했어요. 무료 체험, 출시 할인 가격, 환산 가격은 모두 그보다 아래에 있어야 하고요. Apple은 판단 기준으로 글꼴, 크기, 색상, 위치를 들었어요.
저는 알면서도 이 표시 방식을 유지했어요. 같은 원리로 만든 TradaZen의 이전 버전이 승인됐었거든요. 일종의 도박이었고, 그 대가로 심사 한 사이클을 날렸어요.
수정 내용: "연 19.99유로"를 크게, 그 아래 회색 캡션으로 "주 0.38유로"를 넣었어요. 앱이 지원하는 30개 언어 전부에요. 페이월이 코드 안에 있어서 버전을 다시 제출하기 전에 새 빌드가 필요했어요.
TradaZen: 이틀 뒤 같은 사유
TradaZen은 제 트레이딩 시뮬레이터예요. 2026년 10월 12일, 버전 1.5.1이 같은 규정으로 거절됐어요. 메시지에는 "weekly calculated" 가격이 "more clearly and conspicuously than the billed amount" 표시됐다고 적혀 있었어요. 주 환산 가격이 청구 금액보다 더 눈에 띄었다는 뜻이죠.
첫 번째 수정으로는 부족했고, 저는 제출 전에 그걸 알아챘어요. "주 0.92유로"를 작게 줄였지만 가격 줄의 오른쪽에 그대로 뒀거든요. 그런데 주간 구독 카드는 같은 열에 실제 가격 "주 8.99유로"를 표시하고 있었어요. 두 금액이 같은 위계로 읽혔죠. 실제 가격 열에 놓인 환산 가격은 작아도 청구 가격처럼 읽혀요.
최종 수정 내용: 각 카드 오른쪽에 청구 금액을 크게 넣었어요. 주당 가격은 그 아래 회색 캡션으로 옮겼고요. 왼쪽에는 요금제 이름만 남겼어요. 다음 심사에서 Apple은 더 이상 3.1.2(c)를 지적하지 않았어요.
이 앱에서 얻은 다른 교훈은 TradaZen 사례 연구에 있어요.
Apple이 거절한 것, 통과한 것
실제 표시 방식과 결과를 순서대로 정리했어요.
| 가격 표시 | 결과 |
|---|---|
| TradaZen 이전 버전: 주당 가격을 강조 | 이전 심사에서 승인 |
| Solys: "주 0.38유로" 굵게, 그 아래 "연 19.99유로" | 2026/10/10 거절, 3.1.2(c) |
| TradaZen 1.5.1: 주당 가격이 청구 금액보다 눈에 띔 | 2026/10/12 거절, 3.1.2(c) |
| TradaZen: 주당 가격을 줄였지만 가격 열에 그대로 둠 | 제출 전에 제가 폐기 |
| TradaZen: 청구 금액을 오른쪽에 크게, 주당 가격은 캡션 | 다음 심사에서 지적 없음 |
| Solys: "연 19.99유로" 크게, 주당 가격은 회색 캡션 | 수정 후 Apple에 재제출 |
가장 중요한 건 첫 줄이에요. 한 번 승인된 심사가 다음 심사에서 페이월을 보장해주지 않아요. 버전마다 심사관이 다시 보고, 이전 심사관보다 규정을 더 엄격하게 해석할 수 있어요. 안전한 표시 방식은 규정 원문을 지키는 것뿐이에요.
크게 표시하는 가격은 실제 결제 금액 하나뿐이에요. 주당, 월당, 일당 환산 가격은 모두 더 작고 흐린 캡션이고, 절대 그 자리를 차지하면 안 돼요.
3.1.2를 지키는 페이월 체크리스트
지금 제 앱의 모든 페이월에 대해, 매번 제출하기 전에 확인하는 목록이에요.
- 각 카드에서 청구 금액이 가장 크고, 대비가 가장 높고, 가장 좋은 위치에 있는 가격이다.
- 모든 환산 가격(주당, 월당, 일당)은 청구 금액 아래에 더 작고 흐린 캡션으로 있다.
- 다른 요금제가 실제 가격을 표시하는 열에 환산 가격이 들어가 있지 않다.
- 기간이 명확히 적혀 있다: "연간", "주간".
- 무료 체험에 기간과 체험 종료 후 청구 금액이 적혀 있다.
- 구독이 자동 갱신되며 Apple 계정 설정에서 해지할 수 있다는 문장이 있다.
- 구독으로 무엇이 열리는지 구매 버튼 앞에 적혀 있다.
- 페이월에 "구매 복원" 버튼이 보인다.
- 이용약관과 개인정보 처리방침 링크가 페이월에 있고 실제로 열린다.
- 요금제가 여러 개라면 Apple이 권장하는 대로 하나의 구독 그룹에 들어 있다.
- 가장 작은 iPhone과 가장 긴 가격으로 화면을 확인했다. TradaZen에서는 베트남 동 가격으로 테스트해요. 금액이 줄바꿈되면 위계가 무너지거든요.
RevenueCat 페이월을 쓴다면 RevenueCat 문서도 같은 경고를 해요. 청구 금액과 결제 주기가 다른 곳에 표시되지 않는다면 월 가격 변수 하나로는 부족해요. 전체 연동 방법은 RevenueCat: 인앱 구독 설정하기에, 설계 실수는 iOS 페이월: 초보자가 하는 7가지 실수에 있어요.
이용약관과 개인정보 처리방침 링크: 앱 안과 스토어 페이지 모두
3.1.2 거절의 또 다른 형태는 페이월이 아니라 메타데이터를 겨냥해요. 개발자들이 Apple 포럼에 올린 메시지를 보면 Apple이 기대하는 위치가 나와요. 개인정보 처리방침 링크는 App Store Connect의 전용 필드에, 이용약관(EULA) 링크는 설명이나 EULA 필드에 넣어야 해요.
함정은 표준 계약에 있어요. App Store Connect 도움말에 따르면 사용자 지정 계약을 추가하지 않으면 Apple의 표준 계약이 적용되고, "the license agreement link isn't shown on your App Store product page", 즉 스토어 페이지에 어떤 링크도 표시되지 않아요. 표준 계약을 쓴다면 그 링크를 설명에 직접 넣어야 해요. 자신의 약관 페이지나 Apple 표준 라이선스 계약으로 연결하면 돼요.
구독이 있는 제 앱들은 스토어 페이지의 모든 언어에서 설명 끝에 두 줄을 넣어요. 아래 템플릿을 자신의 상품과 도메인에 맞게 고쳐 쓰세요.
7일 무료 체험 후 연간 또는 주간 구독,
언제든 해지할 수 있어요.
이용약관: https://your-domain.com/terms
개인정보 처리방침: https://your-domain.com/privacy
붙여 넣기 전에 두 링크를 직접 열어보세요. 찾을 수 없는 페이지는 링크가 없는 것과 같아요. 개인정보 처리방침에 들어가야 할 내용은 앱 개인정보 처리방침에, 스토어 페이지의 나머지는 ASO App Store 페이지에 자세히 정리했어요.
이 부분은 새 빌드 없이 고칠 수 있어요. 설명과 App Store Connect 필드는 메타데이터니까요.
3.1.2(a): 구독은 지속적인 가치를 제공해야 해요
거절로 이어지는 또 다른 하위 항목은 화면이 아니라 비즈니스 모델을 겨냥해요. 3.1.2(a)는 "ongoing value", 즉 시간이 지나도 이어지는 가치를 요구해요. 구독 기간은 최소 7일이고, 구독은 사용자의 모든 기기에서 작동해야 해요. 구독자는 SNS에 게시하기 같은 추가 작업 없이 결제한 것을 받아야 해요.
앱이 한 번으로 끝나는 서비스를 제공한다면 일회성 구매가 더 맞을 수도 있어요. 두 모델의 비교는 구독 vs 일회성 구매에 있어요.
3.1.2 거절 후 Apple에 답변하는 방법
대화는 앱의 App Review 섹션에서 이뤄져요. App Review에 답장하는 절차는 다른 규정과 같아요. 경우는 두 가지예요.
- 문제가 앱 안에 있는 경우(가격 크기, 페이월 문구): Solys와 TradaZen처럼 새 빌드가 필요해요. 심사관은 빌드에 포함된 코드를 테스트하거든요. 이건 가이드라인 2.1 가이드에서 설명했어요.
- 문제가 스토어 페이지에 있는 경우(링크 누락 또는 깨진 링크): 메타데이터를 고치고 답장하면 같은 제출 건이 다시 심사로 넘어가요.
영어로 간결하게 쓰세요. 무엇이 문제였는지, 무엇을 바꿨는지, 어떻게 확인하면 되는지. 제가 쓰는 템플릿이에요(빌드 번호, 가격, 이동 경로는 자신의 것으로 바꾸세요).
Hello,
Thank you for your review.
Issue: on the paywall, the weekly equivalent price was displayed
more prominently than the billed amount.
Fix in build X:
- Each plan now shows its billed amount (e.g. "€19.99/year")
as the largest price on the card.
- The weekly equivalent is a smaller grey caption below it.
- The paywall states the duration, the auto-renewal, and links
to our Terms of Use and Privacy Policy.
How to verify: launch the app and complete the onboarding.
The paywall appears at the end.
Best regards,
다음 제출 전에 페이월 고치기
앱이 방금 3.1.2로 거절됐다면 Apple Review Kit이 인용된 규정과 그 요구 사항, 수정과 답변 예시를 찾도록 도와줘요. 포함된 Claude Code 스킬은 제출 전에 페이월과 스토어 페이지도 검토해줘요. 사람의 눈이 필요하다면 저와 한 시간 예약하세요. Apple 메시지를 함께 읽고 화면을 보면서 페이월을 다시 다듬어요. 전체 과정은 Apple에 거절된 앱 페이지에, 구독 설정은 iOS 인앱 구독 페이지에 있어요.
첫 출시를 준비 중이라면 무료 진단을 받아보세요. 단계를 순서대로 정리해주고 제 Apple 거절 방지 체크리스트를 보내드려요. 출시 첫날부터 수익을 내는 모바일 앱을 만들고 싶다면 iOS Kit의 세 번째 단계 "수익 연결하기"가 구독과 페이월을 다뤄요.
Apple이 앱을 승인할 거라고 누구도 보장할 수 없어요. 제가 할 수 있는 건 제가 두 번이나 대가를 치른 3.1.2(c) 거절을 여러분이 피하게 돕는 거예요.
자주 묻는 질문
"Guideline 3.1.2 - Business - Payments - Subscriptions"는 무슨 뜻인가요?
구독 규정의 전체 이름이에요. 가격 위계가 잘못됐거나, 페이월에 정보가 빠졌거나, 스토어 페이지에 링크가 없거나, 구독에 지속적인 가치가 없다는 뜻이에요. 3.1.2(c)처럼 괄호 안의 알파벳이 해당 하위 항목을 알려줘요.
주당 또는 월당 가격을 여전히 표시할 수 있나요?
네. Apple은 주당 또는 월당 환산 가격이나 할인율을 허용해요. 단, 실제 청구 금액보다 작고 덜 눈에 띄어야 해요. 제 앱에서는 환산 가격을 청구 가격 아래 회색 캡션으로 두고, 절대 실제 가격 열에 넣지 않아요.
3.1.2 거절 후 새 빌드가 필요한가요?
문제가 페이월에 있다면 필요해요. 심사관은 빌드에 포함된 코드를 테스트하니까요. 설명에 링크가 빠진 것처럼 스토어 페이지 문제라면 필요 없어요. 메타데이터를 고치면 같은 제출 건이 다시 심사로 넘어가요.
이용약관(EULA) 링크는 어디에 넣어야 하나요?
앱 안에서는 페이월에 넣어요. 스토어 페이지에서는 설명에 넣거나, 사용자 지정 계약이 있다면 App Store Connect의 EULA 필드에 넣어요. Apple 표준 계약을 쓰면 스토어 페이지에 링크가 표시되지 않으니, 모든 언어의 설명에 직접 추가하세요.
페이월이 이미 승인됐었는데 왜 지금 거절되나요?
버전마다 다시 심사를 받고, 때로는 다른 심사관이 보기 때문이에요. 주당 가격을 강조한 방식이 TradaZen에서 승인됐다가, 2026년 10월에 Solys와 TradaZen 모두에서 거절됐어요. 규정 원문을 지키는 것만이 확실한 방법이에요.