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로 직접 처리하도록 바꿨다.
- 안드로이드 네이티브 모듈에 Billing 8 클라이언트를 붙이고, 기존 JS 인터페이스와 같은 형태로 브릿지를 맞췄다.
- 구매 복원·소비(consume) 흐름은 서버 영수증 검증을 기준으로 다시 그렸다. 클라이언트가 성공을 단정하지 않고, 서버 검증이 끝난 뒤에만 지급하도록 순서를 고정했다.
- iOS는 손대지 않았다. 한 번에 둘 다 바꾸면 문제가 생겼을 때 어느 쪽인지 가려내기 어렵다.
검증
실기기(안드로이드)와 시뮬레이터에서 신규 구매·복원·중복 결제 시도·네트워크 끊김 상황을 항목별로 확인했다. 특히 결제 직후 앱이 죽는 경우를 재현해, 재실행 시 미소비 구매가 복원되는지 봤다. 이 경로가 실제 CS로 가장 많이 들어오는 구간이라 시간을 더 썼다.
정리
라이브러리가 마감일을 못 따라가는 일은 생각보다 자주 있다. 그때 선택지는 (1) 상위 스택 전체를 올리거나 (2) 해당 경로만 네이티브로 우회하거나 둘 중 하나인데, 마감이 있는 쪽을 좁게 처리하고 큰 업그레이드는 일정을 따로 잡는 편이 사고가 적었다.