•
해당 글은 Delightroom Town Hall Meeting 때 Notion에 정리해서 발표한 내용을 Medium에 옮겨온 글입니다.
2020년 상반기 내내 알라미 안드로이드 구독 모델 출시를 위해 달려왔다. 구독모델을 위한 기능 추가와 Server 구현은 1분기 OKR이었고 구독 전세계 런칭을 위한 내용들은 2분기 OKR이었다.
결론부터 이야기하면 2020년 6월말을 기점으로 알라미 안드로이드는 전 세계 사용자에게 프리미엄(구독) 모델이 제공되고 있다.
1월 주어진 업무의 메인 키워드는 알라미 구독모델인 프리미엄 출시였다. 1월 목표에 의하면 3월 알라미 프리미엄을 미국과 한국 사용자를 대상으로 런칭하고 4~5월쯤 추가 기능과 전 세계 출시가 계획이었다.
GoLang 을 이용하여 안드로이드 구독 인증을 위한 서버구현과 클라이언트에서의 서버 연동은 아무런 문제가 없이 진행되었다. 그리고 프리미엄을 위한 기능들인 기상 체크, 백업 사운드, 시간 압박, 따라쓰기 미션도 차례대로 개발되었다. 일정이 밀리는 것 외에는 프리미엄 기능을 짜잔하고 유저들에게 4월 말에 아무런 문제 없이 출시가 가능해 보였다.
사건의 시작
4월 21일 Product operation 그룹으로부터 슬랙 문의가 들어오면서 문제를 인지하게 된다.
허무맹랑하지 않은 질문과 허무맹랑한 소리를 하는 개발자
내용을 확인하기 위해 구글 플레이 콘솔을 확인해보았다.
환불 처리 건수의 급격한 상승
구글 플레이 콘솔에서 4월 5일 이후 환불이 지속적으로 증가하며 수치도 비정상적으로 생각되어 구글플레이 개발자 지원팀에 문의하였다.
구글플레이 개발자 문의로 해결 실마리를 얻기를 기대했으나 돌아온 지원팀의 응답은 ‘구매자의 잘못이거나 판매자의 문제로 발생했다.’ 라는 굉장히 포괄적인 답변 (모두의 잘못이다???) 과 함께 사용자로 인한 문제로 보인다는 답변을 받아 그냥 기다리면 되는 건가 싶은 모호한 결론만 얻었다.
무엇보다 결제 관련 코드에 직접적인 수정이 없었다고 착각하고 있었기에 원인파악이 더욱 힘들었다.
하지만…
Google Play Console 에서 ‘패키지가 인앱 구매 또는 정기 결제를 인식하지 못한 경우가 감지하였습니다. Billing Library 2.0부터는 모든 구매자가 3일 이내에 승인되지 않으면 자동으로 환불됩니다.’라는 메시지와 구독 결제 구현 과정에서 개발문서 때 보았던 문구가 오버랩되면서 쎄한 느낌을 받아 깃 커밋 로그 히스토리를 쭉 훑어보았다.
구현한 구독 관련 모듈을 부분 테스트를 위해 merge를 진행하였고 이로인해 Billing Library 가 구독 모듈을 구현할때 사용한 최신버전을 따라가게 되면서 기존 코드에 영향을 주기 시작했다. (gradle 의존성 옵션 api와 implementation 구분의 중요성)
결과적으로 Billing Library 가 최신버전으로 업데이트되어 코드를 수정하진 않았지만 라이브러리 동작이 변경 되었고 결제 건에 대해서 3일이내 관리자 승인이 필요하게 되었다. 하지만 해당 코드가 반영된 이후로 이러한 내용을 인지하고 있지 못했기에 자동으로 환불되어왔다.
버그 원인을 파악했으면 수정 후 배포! 하여 문제가 간단히 해결되었다면 좋았겠지만, 문제를 파악한 시점이 복잡하게 꼬여 새로운 문제가 발생했다.
4월 중순부터 배포를 시작한 버전에서 기존에 사용하던 프로 IAP 모델은 사라지고 프리미엄 구독 모델로 전환되어 이미 런칭된 것이다.
결과적으로 사라진 프로 IAP 동작을 앱에서 acknowledge 처리를 하는 로직을 추가해서 배포하는 것은 불가능했다.
대안을 찾아보자
환불 문제를 해결하려면 유저한테 과감하게 ‘4.21.0으로 업데이트해서 프리미엄 구독을 쓰세요’ 라고 하면 개발적으로 편하고 좋겠지만, 프리미엄 구독이 모든 유저에게 오픈된 상태가 아니고 유저들에게 구독 때문에 유저들의 결제를 막은 것처럼 보이는 문제점이 있다.
방법을 찾던 중 구독 인증 서버를 구현할 때 사용했던 api를 이용하여 Google Play Console > 주문관리 에서 확인 가능한 구매 토큰값만 있으면 acknowledge가 가능함을 확인했다.
로컬 서버에 acknowledge 처리를 위한 개발을 진행했고, 곧 만료 예정인 토큰을 테스트하여 시간이 지나도 환불이 진행되지 않는 것을 체크했다.
(살았다
)
5주간의 여정
수습방법을 찾아낸 이후로 더 깊은 방법을 찾아보지 않았기에 단순 작업의 길만 남아있었다.
원인파악하고 로컬서버가 구현된 시점부터 구독이 100% 런칭되는 5월말까지 매일 11시 콘솔 주문관리에서 Pro 구매 토큰을 복사해서 인증을 반복하기로 결정하고 노가다를 진행하였다.
관리 업무 시켜주는 Slack Shortcut bot
Slack에 #안드로이드_주문_관리 채널을 생성하여 정기적으로 알림을 받으며 일자별 토큰과 처리 여부를 관리해왔다.
해당 기간동안 100+건의 프로 결제를 처리하였다.
프로 결제를 처리하면서 5월 말 미국, 한국 사용자에게 프리미엄 런칭을 하였고, 6월 말 전세계 사용자를 대상으로 프리미엄 런칭을 완료하였다.
기존에 들어오던 프로 IAP 모델은 정책 변경으로 프리미엄 구독으로 안내하고 있다.
결론
허무맹랑한 VoC는 없으며 버전 관리는 신중하게 해야 한다.