Play Billing 8 마감일에 맞춰 결제 모듈을 올린 기록

구글이 Play Billing Library 8.0.0 적용 마감일을 공지했다. 기한을 넘기면 업데이트 배포가 막히는 종류의 변경이라 미룰 수 없었다.

막힌 지점

앱은 React Native 기반이고 결제는 react-native-iap를 쓰고 있었다. 그런데 확인해보니 Billing 8을 공식 지원하는 버전이 없었다.

라이브러리 버전 Billing 요구 RN
12.x / 13.x 7.0.0 제한 없음
14.x 8.0.0 RN 0.79 이상

앱의 RN 버전은 0.79 미만이었다. 결제 라이브러리를 올리려면 RN을 먼저 올려야 하고, RN을 올리면 네이티브 모듈 전체를 다시 검증해야 한다. 마감일까지 그 범위를 안전하게 끝낼 자신이 없었다.

선택한 경로

RN 업그레이드는 분리하고, 결제 경로만 네이티브에서 Billing 8로 직접 처리하도록 바꿨다.

  1. 안드로이드 네이티브 모듈에 Billing 8 클라이언트를 붙이고, 기존 JS 인터페이스와 같은 형태로 브릿지를 맞췄다.
  2. 구매 복원·소비(consume) 흐름은 서버 영수증 검증을 기준으로 다시 그렸다. 클라이언트가 성공을 단정하지 않고, 서버 검증이 끝난 뒤에만 지급하도록 순서를 고정했다.
  3. iOS는 손대지 않았다. 한 번에 둘 다 바꾸면 문제가 생겼을 때 어느 쪽인지 가려내기 어렵다.

검증

실기기(안드로이드)와 시뮬레이터에서 신규 구매·복원·중복 결제 시도·네트워크 끊김 상황을 항목별로 확인했다. 특히 결제 직후 앱이 죽는 경우를 재현해, 재실행 시 미소비 구매가 복원되는지 봤다. 이 경로가 실제 CS로 가장 많이 들어오는 구간이라 시간을 더 썼다.

정리

라이브러리가 마감일을 못 따라가는 일은 생각보다 자주 있다. 그때 선택지는 (1) 상위 스택 전체를 올리거나 (2) 해당 경로만 네이티브로 우회하거나 둘 중 하나인데, 마감이 있는 쪽을 좁게 처리하고 큰 업그레이드는 일정을 따로 잡는 편이 사고가 적었다.

Play Billing 8 마감일에 맞춰 결제 모듈을 올린 기록 · peppercode 개발 노트