brunch

You can make anything
by writing

C.S.Lewis

by Stephan Seo Jan 26. 2023

앱 구독 상품 subscription SKU 관리하기

서로 다른 플레이스토어와 앱스토어, 구독 상품 관리 어떻게 하는걸까

0. 구독 모듈


큰 대기업들은 어떠한지 모르겠다만, 대부분의 앱 서비스들은 서비스 개발 하나에 집중하기에도 벅차다. 구독 모델을 도입하기 위해 구독 상품을 설계(구독 주기 설정, 할인 프로모션, 무료체험 프로모션 등)하고, 결제 수단과 결제 로그를 관리하며 주기마다 문제 없이 결제를 처리하게끔 만드는 것은 별도의 서비스를 하나 새로 만드는 것과 같은 공수이다.


따라서 제3자가 제공해주는 모듈을 사용하는 것이 일반적이다. 마치 광고 수익화에서 광고 지면 개발, 광고 수급, 광고들 사이의 우선 순위 조율(미디에이션) 등을 앱 서비스가 직접하지 않고 패키지 형태로 된 수익화 SDK (구글 애드몹, 앱러민 맥스 등)를 쓰는 것처럼, 구독 수익화 또한 그러한 모듈을 사용하는 것이다. 해당 모듈은 구독 상품들의 속성들을 설계하여 관리할 수 있게 해주고, 유저들의 결제 수단을 등록 및 관리해주며, 다달이 결제까지 진행해준다. 여러 모듈 플레이어들이 있지만, 거의 대부분의 국가(중국 러시아 등 제외)를 독점하고 있는 구글 플레이와 앱스토어 커넥트가 바로 그 대표 서비스이다. 앱 서비스 개발자는 OS 에 맞춰 각 스토어에서 제공하는 모듈을 연동하고, 모듈 대시보드 상에 구독 상품을 세팅하면 되는 것이다.


1. 구독 모듈 소통 구조


앱은 구독 모듈을 통해서 특정 구독 상품의 결제를 진행한다. 가령 앱이 "이 유저가 구독 상품 A를 선택했어. A 결제 진행해줘"라고 '호출'을 보내면 스토어에서 호출을 받아 그들이 갖고 있는 '구독 상품 A에 대한 정보값 (구독 기간, 가격 등)'과 유저의 계정 식별값 (이메일 주소 등)', '결제 정보 (카드 번호 등)'를 활용하여 결제를 진행한다. 그리고 결제 성공 여부를 '응답'으로 앱에게 내려준다. '성공' 값을 받으면 앱은 유저에게 막혀 있던 기능들을 열어주며 구독 유저로서의 경험을 제공하기 시작하는 것이다. 그 이후에도 유저의 현재 상태가 구독이 유지되는 상태인지도 주기적으로 소통하며 동기화한다. 또한 만료일이 도래하여 자동결제가 이어지거나, 그전에 구독이 해지되어 그대로 만료되거나 등 상식적인 유저 플로우에 대해 앱은 지속적으로 모듈과 소통해 나간다.


2. 구독 모듈 연동


은 본글에서 다루지 않을 예정이다. 이는 각 스토어에서 제공해주는 연동 문서를 참고하면 좋겠다.


3. 구독 상품 세팅


앱 내에서 구독 모듈을 사용하여 특정 구독 상품을 호출하기 위해서는 해당 구독 상품들을 모듈의 어드민(대시보드)에 등록 및 세팅해두어야 한다. 구독 상품 A,B,C 에 대한 상세 정보값을 앱은 갖고 있지 않다. 그저 A,B,C 를 식별하여 호출하기 위한 일종의 ID 값만 들고 있을 뿐이다. 대시보드 상에 세팅하는 방식에 대해 자세히 알아보도록 하자. 구글 플레이와 앱스토어커넥트, 비슷하면서도 조금씩 다른 두 플랫폼을 서로 비교해가며 서술해보려 한다.


3-1. 주요 속성 값


자잘하게 설정해줘야될 것이 많지만 대체로 디폴트 값을 쓰면 되기 때문에 차치하고, 굵직하게는 4가지를 지정해줘야 한다. 그 4가지의 구조적인 관계는 아래 그림을 참고 바란다.

대시보드 내의 위계가 양 플랫폼 서로 조금씩 다르지만, 주요 4가지 속성값은 모두 다루고 있다.


A. 구독 기간  

어느 주기로 결제를 발생시킬 것인가? 월구독? 연구독?

두 OS 동시에 구독을 런칭할 거라면 4weeks, 2months를 제외하고 골라보면 좋겠다.

B. 구독 가격

얼마를 지불하게 할 것인가?


B-1. 초기 세팅

[가격 입력 방식] 원하는대로 가격을 지정할 수 있는 플랫폼은 플레이스토어 뿐이다. 앱스토어는 주어지는 선택지 중에서 원하는 가격을 선택해야 한다. 실제로 세팅해보면 이 제약이 여간 성가신 것이 아니다. 플레이스토어는 원하는 가격을 주관식 답변을 입력하듯 기입하면 되고, 앱스토어는 원하는 가격을 입력하면 이에 가까운 선택지가 노출되어 그 중 고르면 된다. (아래 이미지 참고) 이 때 선택지가 매우 제약적인 것처럼 보일 수 있는데, '추가 가격 정보 노출'을 누르면 추가로 더 세세한 선택지가 제시된다. (왜 이렇게 기획한 것인지는 모르겠지만... 숨길거면 '결과 없음'이라는 텍스트는 없애야 하지 않을까...) 가격 선택지가 제한적이기 때문에, 양 플랫폼 동시에 구독 상품을 출시할 거라면 앱스토어 쪽에 먼저 세팅을 하고 플레이스토어로 넘어가는 것이 좋다. 앱스토어 선택지에서 픽스된 가격을 그대로 플레이스토어 적용하면 되기 때문이다.

앱스토어에서의 가격 세팅, 그닥 포괄적이지 않은 선택지 중에 골라야 한다. 와중에 선택지가 숨겨져 있다.

[국가 일괄 적용, 수동 수정] 두 스토어 모두 모든 국가에 가격을 일괄 세팅할 수 있게끔 기능을 제공해주고 있다. 기준이 되는 화폐 단위를 고를 수 있고(USD, KRW 등), 해당 화폐 단위를 기준으로 환율을 반영하여 모든 국가에 가격이 자동으로 세팅된다. 이 때 자동으로 세팅된 개별 국가의 가격들은 수동으로 수정할 수도 있다. 가끔 불안정한 환율로 인해 자동 적용이 이상하게 되는 경우가 있다. 가격이라는 것은 꼭 환율 그대로 따르는 것이 아니라 해당 국가에서의 대략적인 물가 감을 바탕으로 조정해야 하기 때문에 적절하게 수정을 해줘야 한다. 가령 5.99 USD 가 10,000 KRW 로 반영될 경우(실제 사례다.) 적절하게 6,900 원 수준으로 조정을 해주면 되겠다.

플레이스토어에서 가격 일괄 적용의 예시. 입력창에서 보듯 입력 자체는 주관식으로 자유롭게 입력 가능하다.

[수동 조정 로그] 이 때 수동으로 조정했는지 여부를 잘 기록해둬야 한다. 구독 상품이 많아지면 각 상품마다 일관되게 동일 국가들에 대한 가격 조정을 해줘야 하기 때문이다. 플레이스토어는 아무런 기록을 남겨주지 않지만, 다행히도 앱스토어는 그 기록을 남겨주기 때문에 관리가 용이한 편이다. (아래 이미지 참고)

가격 초기 세팅 값과 변경 이력을 기록해주는 앱스토어


B-2. 가격 수정

해당 구독 상품을 출시 하기 전에는 가격 수정을 얼마든지 할 수 있지만, 출시를 한 이후에는 조금 조심스럽게 접근해야 한다.


가격을 올리는 경우, 이미 기존 가격으로 구독을 한 유저들은 기존의 낮은 가격이 유지되는 것이 디폴트이다. 만약 그들의 구독 가격도 올리고 싶다면, 동의를 받는 여정을 거쳐야 하는데, 아예 구독을 이탈할지 모른다는 리스크를 감안한다면 그들은 그냥 기존의 낮은 가격이 유지되게끔 하는 것이 좋겠다.

가격을 올리는 경우 선택지 (앱스토어 안내)

반대로 가격을 낮추는 경우, 이미 기존 가격으로 구독을 한 유저들은 기존의 높은 가격에서 새로운 낮은 가격으로 하향 조정되는 것이 디폴트이다. 해당 구독 상품을 구독하여 유지하고 있는 유저가 현재 얼마나 유지되고 있는지, 또 가격이 얼마나 낮아지는지에 따라 판단해야 하는 부분인데, 이러나 저러나 무조건 손해이기 때문에 낮추는 것은 어지간하면 지양하는 것이 좋겠다.

가격을 낮추는 경우 안내문 (앱스토어 안내)


C. 프로모션

할인, 무료체험 등을 제공할 것인가?


흔히 알고 있는 무료체험을 설정할 수 있는 항목이다. 무료체험 제공 자체는 Optional 이며, 내부 제품 전략에 맞춰서 사용하면 된다. 그 외에도 첫 결제만 할인, 첫 n회 결제만 할인 등 의외로 다양한 프로모션 기능을 제공해준다. 대부분의 구독 프로모션이 신규 구독자의 구독 진입 허들을 낮추기 위해 사용된다는 점을 감안했을 때, 이미 프로모션 없이 출시해둔 구독 상품에 신규 프로모션을 추가하는 행위도 가능하다. 어차피 기존에 해당 구독 상품을 구독 중인 유저에게는 해당 사항이 없을 프로모션이기 때문이다.

구글 플레이에서 프로모션(구글 플레이에서는 '혜택'이라 불림)을 세팅하는 화면
구글 플레이에서 무료체험의 기간을 세팅하는 화면


D. 메타정보

스토어 상에 상품 표기, 유저의 결제 이력에 상품 표기시에 어떤 이름과 정보로 노출할 것인가?


사실 메타 정보를 기입하기 전에, 구독 상품의 '이름'과 'ID'를 지정해주는 화면이 있다. 각 팀에서 관리하기 쉽게끔 네이밍 컨벤션을 갖춰 관리하면 되는 부분이다. 보통 앱과 모듈 사이에 호출을 주고 받을 때에 쓰이는 '키 값'의 개념이라는 점만 인지하면 좋겠다.

그 이후 기입해야 되는 '메타 정보'는 우릴 위한 값이라기 보다는 유저를 위한 값이다. 유저들이 각 스토어에서 앱을 살펴볼 때 그 앱 내에 어떠한 구독 상품이 있는지 볼 수 있는데, 이 때 노출될 정보값인 것이다. 적절히 유저들에게 매력을 어필함직한 문구를 작성하면 되겠다.

알라미 앱스토어에서 세팅한 구독 메타 정보 예시


이렇게 A. 구독 주기 B. 구독 가격 C. 프로모션 D. 메타 정보 까지 세팅하면 사실상 중요한 건 다 세팅한 셈이다. 이제 완료를 누르면 사실상 끝인데...


앱스토어의 경우 구독 상품을 새로 등록할 때나 수정할 때 '심사'를 거쳐야 하는 번거로움이 있다. 또한 '심사'를 위해 추가적으로 등록해줘야 하는 값도 있다. (구독과 관련된 화면 스크린샷과 이에 대한 설명문) 그나마 다행인 점은 가격에 대한 수정이 있을 때에는 별도의 '심사'를 거치지 않는다는 점이다. 이와 달리 구글 플레이의 경우 생성 이후 자체적으로 '활성화'를 누르면 바로 사용 가능하다. 이 때 혜택으로 생성해둔 ‘프로모션’도 별도로 ‘활성화‘를 눌러줘야 한다는 점을 유의하자.




끝으로 신규 구독 상품을 생성하는 행위는 '신중해야 한다'는 점을 강조하고 싶다. 출시 이후에 한명이라도 해당 구독 상품을 구독하여 유지하고 있다면, 우리 또한 그 구독 상품에 대한 코드를 계속해서 앱내에 지니고 유지 보수 해줘야 하기 때문이다. 만약 신규 할인, 무료체험 관련해서 새로운 구독 상품이 필요하다면 새로 구독 상품을 생성하기 보다는 안쓰고 있는 기존의 구독 상품을 수정하는 방향으로 생각해보는 것이 좋다.

알라미의 구독 상품 활성화 유저 수 - 4년 전의 구독 상품도 아직 30명이 사용하고 있다.


오랜만에 가격테스트 설계를 위해 기존 구독 상품을 수정하고 신규 구독 상품을 생성하는데, 예전에 해봤음에도 헷갈리는 부분이 많았다. 또한 UI/UX 도 너무 많이 바뀌어서 당황스러웠다. 구독의 많은 부분을 스토어 모듈에 의존하고 있는 만큼 주기적으로 해당 시스템을 잘 살펴봐야겠다는 생각이 들었다. 팀내 가이드 문서를 만드는 김에 브런치에도 휘리릭 글로 남겨본다. 모쪼록 어려움을 겪고 있을 업계 내 종사자들에게 좋은 팁이 되길 :)

매거진의 이전글 일이 되게 만드는 동료들과 일하는 행복
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari