iOS 자동 갱신 구독 기능 구현에 대한 회고 - (1) 시작

애플 앱스토어에서는 사용자의 최초 확인 한번으로 매달 결제가 이루어지게 하는 자동 갱신 구독 (Auto-Renewable Subscription) 기능을 지원한다. 이 기능은 본래 잡지나 서적에 해당하는 앱에만 적용되었지만, WWDC 2016을 기점으로 모든 앱에서 사용 가능하도록 바뀌었다.

이 기능은 개발사에게 매우 유리한 구매 형식인데, 사용자가 1년 이상 정기구독을 유지할 경우 애플에서 가져가는 수수료가 30%에서 15%로 줄어들기 때문이다.[1]

우리 회사의 앱에는 특정 기능을 한 달간 무제한 사용할 수 있는 아이템이 있다. 기존에도 이 기능은 있었지만, 소모성 인앱 결제를 통해 구매할 수 있는 포인트를 통해 한 달에 한 번씩 구매하는 방식이었다.

포인트를 통해 구매한다는 것, 그리고 한달에 한번씩 매번 구매해야 한다는 것에서 개선 방안이 있지 않을까 라는 경영진과 기획팀의 생각을 통해 10월 중순부터 “자동 갱신형 정기권” 기능을 만들기 시작하였다. 물론 1년 이후 수수료 인하도 이번 결정에 한 몫을 했을 것이라고 생각한다.

10월 중순쯤 시작된 기능 구현이 릴리즈 직전에 문제가 터질줄은 아무도 몰랐겠지만.

진행

사실 처음 시작할때는 앱에서 준비할 것들이 많지 않을거라고 생각했다. 자동 갱신형 구독이든 소모품이든 구매할때 사용되는 StoreKit의 API는 동일했기 때문이다. 그래서 처음 생각한 구독 아이템 구매 플로우는 다음과 같았다.

  • 백엔드 API에서 자동 갱신형 구독 아이템을 구매할 수 있는지 판단한다.
  • 구매 가능한 유저일 경우 스토어 아이템 리스트 API 응답에 해당 아이템을 포함한다.
  • 앱에서 사용자가 아이템을 선택하고 구매한다.
  • 앱에서 구매 완료된 영수증을 백엔드 API로 전송한다.
  • 백엔드 API로 전송된 영수증을 애플 서버를 통해 검증하고 정상일 경우 해당 아이템을 지급한다.
  • 전송된 영수증은 DB에 저장한다
  • 백엔드 Worker 가 저장된 영수증을 이용해 갱신 여부를 매일 판별한다.
  • (Optional) 애플이 상태가 변경된 구독 영수증을 보내주면 백엔드 API 가 영수증을 확인하고 구독 상태를 변경한다

최종적으로 구현된 서비스도 이와 크게 다르지 않게 구현되었다. 원래 계획대로라면 15일 아침에 서버가 배포되고 서버 배포 직후에 애플에 앱과 인앱 아이템 심사를 제출할 예정이었다.

그러다 14일 저녁, 백엔드 개발자의 실수로 인해 전날 저녁에 서버가 미리 배포가 되어 버렸다. 하지만 앱 심사에 문제 될 만한 이슈는 아니라고 판단해서 일정대로 앱 심사를 제출하였다. 이때가 12월 15일. 이때까지만 해도 애플의 연말 연휴까진 아직 멀었으니 안심이라고 생각하고 있었다.

2편에서 계속됩니다

참고 링크

Apple Developer - Offering Subscription

Apple Developer Documentation - Working with Subscriptions


  1. https://developer.apple.com/app-store/subscriptions/ ↩︎