NovelaPlay SC032026-10-01 확인 · iOS · 앱 1.0.21
구매 후 코인 지급
결정 기록스토어 결제가 완료·취소·실패·지연되거나 완료 통지가 반복될 때 코인 지급과 복원을 어떻게 일관되게 처리할 것인가?
상황과 시작 조건
- 전제
- 사용자가 충전 상품과 실제 통화 가격을 확인하고 구매를 시작한 상태
- 행동
- 충전 상품 선택, 스토어 결제 결과 수신, 앱 재실행, 구매 복원 요청
앱에서 확인한 안내
코인은 일회성 구매이며, 현재 월간 패스·구독은 제공하지 않는다고 안내한다. 구매한 코인은 결제 당시 계정에 귀속된다.
앱 내 문구 확인 · 실제 집행은 미검증우리 서비스 제안
서버가 스토어 거래 ID와 상품 구성을 확인한 뒤 불변 거래 장부에 한 번만 기록하고 코인을 지급한다. 확인 중에는 지급 예정 상태를 보여주고 앱 재실행·지연 완료·복원을 같은 거래 조회로 수렴시킨다.
확인할 사항
스토어 결제창, 결제 완료 화면, 영수증 검증, 코인 지급 시점은 확인되지 않았다.
관찰과 근거
직접 관찰
- 게스트와 로그인 회원 모두 첫 구매 혜택 1종과 일반 5종, 총 6개 원화 상품을 같은 가격으로 확인했다.
- 로그인 직후 지갑은 유료 0·무료 0이었고, 구매 전 충전 이력과 사용 이력은 비어 있었다.
- 조사에서는 상품을 선택해 스토어 결제창으로 진입하거나 결제·취소·실패·복원을 수행하지 않았다.
앱 내 안내 · 집행 미검증
- FAQ는 코인 팩이 App Store 또는 Google Play 인앱결제로 판매되고 사용 가능한 결제 수단은 국가와 스토어에 따라 다르다고 안내한다.
- FAQ는 코인이 결제 당시 로그인한 계정에 지급되고, 비회원 구매는 기존 계정 로그인 뒤 Add 팝업으로 옮기며, 확인이 필요한 결제는 스토어 완료 후 앱 재진입 시 지급된다고 안내한다. Canceled·Failed는 미완료로 설명하며 실제 집행은 검증하지 않았다.
- FAQ는 구매 코인과 구매 보너스 코인에 만료가 없다고 안내한다. 실제 구매·장기 보유는 검증하지 않았다.
- FAQ는 코인 상품을 반복 구독이 아닌 일회성 구매로 설명하고, 현재 월 이용권·구독 상품은 제공하지 않으며 코인으로 개별 회차만 해제한다고 안내한다.
- FAQ는 가입에 사용한 Google 또는 Apple 계정으로 로그인하면 코인과 해제 회차가 유지된다고 안내한다. 실제 타 기기 복원은 수행하지 않았다.
관찰 범위는 조사 기록을 기준으로 합니다. 앱 안내는 실제 집행·스토어 공식 정책·법적 효력을 별도로 검증한 결과가 아닙니다.
미확인
- 스토어 결제창, 결제 완료 화면, 영수증 검증, 코인 지급 시점은 확인되지 않았다.
- FAQ의 Canceled·Failed·확인 필요 결제·앱 재진입 지급 안내가 실제 상태별 화면과 장부에서 어떻게 집행되는지는 검증하지 않았다.
- FAQ는 계정 재로그인 시 코인 유지를 안내하지만 앱 종료 뒤 완료된 거래와 타 기기 복원은 실제로 수행하지 않았다.
- 첫 구매 혜택의 계정·스토어·기기별 자격 판정과 중복 방지 규칙은 확인되지 않았다.
- 스토어 완료 통지가 반복됐을 때 중복 지급을 막는지는 확인되지 않았다.
대안 비교 · 우리 서비스의 선택지 3개
아래는 우리 서비스에 적용할 대안입니다. 다른 앱의 정책을 비교한 결과가 아닙니다.
| 선택지 | 장점 | 비용·제약 |
|---|---|---|
| 클라이언트 즉시 지급 | 결제 직후 잔액 반영이 빠르고 초기 구현이 단순하다. | 위변조·중복 통지·지연 완료·환불 연계에 취약하고 여러 기기의 장부 일관성을 보장하기 어렵다. |
| 서버 영수증 확인 후 지급 | 스토어 거래 ID를 기준으로 한 번만 지급하고 지연 완료와 복원을 같은 장부로 처리할 수 있다. | 확인 지연 중 대기 상태가 필요하고 서버·스토어 장애 대응이 복잡하다. |
| 혼합형 임시 잔액 | 사용자에게 빠른 피드백을 주면서 서버 확인을 기다릴 수 있다. | 임시 잔액 회수와 사용 제한이 복잡하고 오해와 고객지원 비용이 커질 수 있다. |
제안의 근거 · 해석
NovelaPlay FAQ는 일회성 코인 구매, 계정 귀속, 지연 결제 후 재진입 지급, 취소·실패 상태를 설명한다. 실제 완료 처리는 미검증이므로 우리 서비스는 스토어 성공 콜백만으로 지급하지 않고 중복과 지연을 견디는 서버 기준을 먼저 정해야 한다.
효과는 검증 전 가설입니다. 고객·출시 지역·개발 여건에 맞춰 검토해야 합니다.
정해야 할 정책 값
- 스토어 상품 ID와 지급 코인 매핑
- 서버 영수증 검증 기준
- 거래 멱등 키
- 지연 완료·보류 제한 시간
- 첫 구매 자격 기준
- 복원 대상과 진입점
- 결제 실패 코드와 사용자 문구
- 장부·지갑 원자성
예외 처리와 출시 QA
| 예외 조건 | 제안 처리 |
|---|---|
| 스토어는 완료했지만 서버 영수증 확인이 지연됨 | 거래를 처리 중으로 표시하고 반복 구매를 막는다. 앱 재실행 후 같은 거래 ID를 재조회해 지급 또는 명시적 실패로 확정한다. |
| 동일 거래 완료 통지가 여러 번 도착함 | 스토어 거래 ID를 멱등 키로 사용해 장부와 코인 지급을 한 번만 반영한다. |
| 사용자가 스토어 결제를 취소하거나 결제가 실패함 | 코인을 지급하지 않고 취소와 실패를 구분한다. 실패에는 결제수단 확인과 재시도, 취소에는 충전 화면 복귀를 제공한다. |
| 앱 종료 뒤 스토어 결제가 완료되거나 다른 기기에서 복원을 요청함 | 서버 장부와 스토어 거래를 대조해 누락 지급만 복구하고 이미 처리한 거래는 다시 지급하지 않는다. |
검증 조건 · 미실행
SC03-Q01
- Given
- 유효한 상품과 새 스토어 거래 ID가 있는 상태
- When
- 서버 영수증 확인이 성공함
- Then
- 장부 기록과 코인 지급이 함께 한 번만 반영되고 지갑과 충전 이력에 같은 거래가 보이는 것이 기획 완료 기준이다.
SC03-Q02
- Given
- 동일한 완료 통지가 세 번 도착한 상태
- When
- 구매 처리기가 모두 처리함
- Then
- 한 건의 지급과 한 건의 충전 이력만 생성되는 것이 기획 완료 기준이다.
SC03-Q03
- Given
- 스토어 완료 후 앱이 종료되고 서버 확인이 지연된 상태
- When
- 사용자가 앱을 다시 열거나 복원을 요청함
- Then
- 처리 중 상태를 거쳐 누락 지급이 복구되고 추가 결제 없이 결과를 확인할 수 있는 것이 기획 완료 기준이다.
SC03-Q04
- Given
- 결제 취소 또는 실패 상태
- When
- 앱이 결과를 수신함
- Then
- 잔액이 변하지 않고 취소·실패에 맞는 다음 행동이 표시되는 것이 기획 완료 기준이다.
검증할 지표 · 실제 값 미보유
- purchase_started 대비 서버 확인 완료율
- 결제 완료 후 잔액 반영 시간
- 중복 완료 통지율과 중복 지급 건수
- 지연 완료·복원 성공률
- 결제 취소·실패·보류 비율
- 충전 관련 문의율
흐름도
우리 서비스 제안
구매 지급과 회차 해제를 분리한 처리
코인제를 선택할 경우의 최소 설계다. 구매 지급과 회차 해제에 각각 중복 처리를 막는 기준을 두고, 앱이 종료돼도 상태를 다시 확인한다.
범위: 우리 서비스 제안
근거 결정 기록