Google Play 출시 트랙 정리: 내부·비공개·공개·프로덕션과 App Store 비교
오늘 성경 지도라는 앱을 App Store와 Google Play 양쪽에 올렸습니다. iOS를 먼저 끝내고 Play Console로 넘어왔는데, 출시 개요 페이지에서 카드 네 장을 보고 잠깐 멈췄습니다.
- 개발자가 관리하는 더 큰 테스터 그룹을 대상으로 앱 테스트 (2/5 완료)
- Google Play에서 누구나 앱 테스트에 등록할 수 있도록 설정 (1/4 완료)
- 사전 등록을 통해 앱에 대한 기대감 높이기
- 버전 생성 및 게시 (3/5 완료)
넷 다 진행률 막대가 붙어 있어서 배포 경로가 네 갈래로 갈라지는 줄 알았습니다. 이 중 하나를 골라야 하나 싶었고, 이미 진행률이 차 있는 게 셋이라 뭘 잘못 건드렸나 싶기도 했습니다.
결론부터 쓰면 제 생각이 틀렸습니다. 넷은 경로가 아니라 관객입니다. 그리고 넷 중 하나는 아예 트랙이 아닙니다.
API에 물어보니 명단이 달랐습니다
콘솔 화면만 보고는 확신이 안 서서 Android Publisher API로 트랙 목록을 직접 조회했습니다.
production 3 (1.0.0) [completed] vc=3
beta (비어 있음)
alpha (비어 있음)
internal 1.0.0 [completed] vc=3네 줄인데 콘솔 카드 넷과 구성이 다릅니다. 세 가지가 눈에 띕니다.
사전 등록이 없습니다. 트랙이 아니기 때문입니다. 출시 전에 스토어 등록정보를 미리 띄워두고 관심 있는 사람의 알림 신청을 받는 홍보 기능이라, 앱 파일이 어디로 가는지와는 상관이 없습니다. 콘솔이 같은 목록에 나란히 놓아서 헷갈렸던 겁니다.
내부 테스트는 카드에 없는데 API에는 있습니다. internal 트랙에 이미 vc=3이 올라가 있습니다. 아까 eas submit으로 보낸 게 여기입니다. 콘솔은 이미 끝난 단계를 출시 개요에서 빼버립니다. 그래서 화면에는 넷만 남았고, 저는 그게 전부인 줄 알았습니다.
이름도 다릅니다. 콘솔의 비공개 테스트가 API에서는 alpha, 공개 테스트가 beta입니다. 초창기 이름이 API에 그대로 굳었습니다. 스크립트를 쓸 때는 콘솔의 한글 이름이 아니라 이쪽을 써야 합니다.
진행률 막대에 대해서도 하나 알게 됐습니다. 카드마다 세부 단계를 세는데 그 단계들이 서로 겹칩니다. 국가 및 지역 선택이나 스토어 등록정보 같은 건 어느 트랙으로 가든 필요한 항목이라, 프로덕션 쪽 작업을 하면 테스트 카드의 숫자도 같이 올라갑니다. 제가 손대지도 않은 비공개 테스트가 2/5였던 이유입니다.
트랙은 넷이고, 순서대로 넓어집니다
| 트랙 | API 이름 | 받는 사람 | 심사 |
|---|---|---|---|
| 내부 테스트 | internal |
지정한 이메일 최대 100명 | 사실상 없음 |
| 비공개 테스트 | alpha |
이메일이나 Google 그룹으로 지정 | 받음 |
| 공개 테스트 | beta |
Play에서 아무나 신청 | 받음 |
| 프로덕션 | production |
전체 사용자 | 받음 |
아래로 갈수록 대상이 넓어집니다. 위에서부터 차례로 밟아야 하는 건 아니고, 내부 테스트만 하고 바로 프로덕션으로 가도 됩니다. 오늘 제가 한 게 그겁니다.
다만 개인 개발자 계정으로 첫 앱을 내는 경우에는 비공개 테스트가 강제되는 정책이 있습니다. 일정 인원을 모아 2주간 연속으로 테스트를 돌려야 프로덕션 신청이 열립니다. 요구 인원은 그동안 몇 차례 조정됐으니 숫자는 콘솔에 표시되는 값을 믿으시는 게 좋습니다. 사업자 계정에는 없는 조건입니다.
파일은 하나입니다
여기가 제일 오해하기 쉬웠습니다. 트랙이 넷이라고 해서 빌드를 네 번 하는 게 아닙니다.
위 조회 결과를 다시 보면 internal과 production 양쪽에 똑같이 vc=3이 들어 있습니다. 그런데 번들 라이브러리에는 파일이 하나뿐입니다.
== 번들 라이브러리 ==
versionCode 3 sha1 b92ba685AAB를 한 번 올려두면 트랙은 그 파일을 가리키기만 합니다. 그래서 프로덕션 버전을 만들 때 화면 가운데 크게 그려진 업로드 영역이 아니라, 그 아래 작게 붙어 있는 라이브러리에서 추가를 눌러야 합니다. 같은 파일을 다시 업로드하면 versionCode가 겹쳐서 거부당합니다. 업로드 영역이 워낙 크게 그려져 있어서 저는 그쪽이 정답인 줄 알았습니다.
iOS와 나란히 놓으면
| Google Play | App Store | |
|---|---|---|
| 테스트 배포 | 트랙 3개 (내부·비공개·공개) | TestFlight (내부·외부) |
| 정식 배포 | 프로덕션 트랙 | App Store |
| 동시 운영 | 트랙마다 다른 버전 가능 | 라이브 버전은 하나 |
| 단계적 출시 | 프로덕션에서 비율 지정 | 7일에 걸친 자동 단계 출시 |
| 테스트 빌드 심사 | 비공개부터 받음 | 외부 TestFlight만 받음 |
| 개인 계정 제약 | 비공개 테스트 기간 요건 | 없음 |
가장 큰 차이는 동시 운영입니다. Play는 프로덕션에 1.0을 서비스하면서 공개 테스트에 1.1을 돌릴 수 있습니다. 서로 다른 사용자 집단이 서로 다른 버전을 쓰고 있는 상태가 정상입니다. App Store에는 그런 개념이 없습니다. 라이브 버전은 항상 하나고, TestFlight 빌드는 스토어에 노출되지 않는 별개 통로입니다.
이게 왜 중요한가 하면, Play에서는 되돌리기가 트랙 단위로 끝납니다. 공개 테스트에서 문제가 터져도 프로덕션은 건드릴 필요가 없습니다. iOS는 새 버전이 나가면 그게 곧 전체 사용자의 버전이라, 문제가 생기면 다음 심사를 기다리거나 이전 버전으로 되돌려 달라고 요청해야 합니다.
두 번째 차이는 테스트 빌드에 심사가 붙는 시점입니다. iOS는 내부 TestFlight에 심사가 없고 외부 테스터를 부를 때부터 심사를 받습니다. Play는 내부 테스트가 그 자리를 대신하고 비공개 테스트부터 심사 대상입니다. 이름만 다를 뿐 경계선이 거의 같은 자리에 있습니다.
completed는 끝났다는 뜻이 아니었습니다
프로덕션 트랙에 vc=3이 completed로 들어갔길래 다 됐구나 싶어 스토어를 열어봤는데 아무것도 없었습니다.
트랙의 completed는 "출시 절차가 끝났다"가 아니라 "이 트랙의 단계적 출시 비율이 100%다"라는 뜻입니다. 10%만 열어두면 inProgress가 되고, 전부 열면 completed가 됩니다. 심사를 통과했는지, 스토어에 게시됐는지와는 별개의 값입니다.
실제로는 앱 콘텐츠 설문이 남아 있었습니다. 개인정보처리방침 URL, 콘텐츠 등급 설문, 데이터 보안 양식, 타겟층, 광고 여부, 앱 액세스 권한. 전부 콘솔에서 사람이 답해야 하고 API로는 넣을 수 없는 항목들입니다. 이걸 끝내야 검토 요청이 나갑니다.
설문을 채우고 나니 그제서야 제출이 묶여서 올라갔습니다. 변경사항 13개가 하나의 제출로 들어갔는데, 프로덕션 버전과 176개 국가 지정, 스토어 등록정보, 콘텐츠 등급, 개인정보처리방침 URL이 전부 한 덩어리입니다. Play는 이렇게 여러 변경을 모아 한 번에 검토합니다. iOS가 앱 버전 하나를 심사 단위로 삼는 것과 다른 지점입니다.
제출 화면에서 웃긴 것도 하나 봤습니다. 타겟 연령대가 만 6~2147483647세로 적혀 있었습니다. 32비트 정수 최댓값을 상한 없음 대신 그대로 찍어놓은 콘솔 표시 버그입니다.
iOS도 같은 시각에 심사 대기 상태입니다. 양쪽 다 남의 손으로 넘어갔으니, 실제 심사가 얼마나 걸렸는지는 결과가 나오면 쓰겠습니다.
함께 읽기
- 스토어 이미지 규격 정리: 스크린샷·아이콘·그래픽에 실제로 필요한 것앱 하나를 App Store와 Google Play에 동시에 올리면서 이미지를 몇 개나 만들었는지 세어봤습니다. 스크린샷 12장, 스토어 전용 그래픽 2개, 앱 번들에 들어가는 아이콘 자산 7개. 합쳐서 21개입니다. 코드를 다 짜놓고 시작한 마무리 작업인데 결국 여기에 시간을 더 썼습니다.
- RN 앱 두 번째 배포: 재사용되는 인증서, 새로 해야 하는 등록몇 주 전에 만든 고객 포털 앱을 반쯤 복사해서 새 RN 앱을 하나 더 만들었습니다. 성경 속 여정을 지도에 그리는 화면 하나를 웹에서 옮겨온 것뿐인데, 옮기고 나니 "인증서까지 그대로 가져다 쓸 수 있나"가 궁금해졌습니다. 결론부터 적으면 절반만 맞았습니다.
- Google Play 출시 트랙을 이해하는 방법Google Play Console에는 여러 출시 트랙이 있습니다. 처음 앱을 배포할 때 내부 테스트, 비공개 테스트, 공개 테스트, 프로덕션의 차이를 이해하지 못하면 심사와 배포 흐름이 헷갈릴 수 있습니다.
- 스토어 메타데이터 API 정리: 항목별로 되는 것과 안 되는 것앱 설명과 키워드를 채우면서 두 스토어의 API 를 항목별로 다 두드려 봤습니다. 콘솔에 들어가지 않고 어디까지 갈 수 있는지 궁금했거든요.
- 바이너리 등록 후 남은 것들: 자동화되는 일과 사람이 해야 하는 일빌드가 끝나고 양쪽 스토어 콘솔에 바이너리가 올라갔습니다. 저는 그때 "이제 다 됐다"고 생각했습니다. 실제로는 거기서부터가 절반이었습니다.