오랜만에 Android 앱을 Google Play에 출시하려고 하니 앱을 만드는 것보다 확인할 일이 더 많아 보였다.

앱 번들을 만들고 소개글과 이미지를 준비하는 일만으로 끝나지 않았다.

개인정보처리방침, 데이터 보안, 광고, 콘텐츠 등급, 대상 연령과 공개 국가도 실제 앱 동작에 맞춰 답해야 했다.

준비 중이던 결제 기능까지 한 번에 넣으려 했지만 상품 가격 저장 오류와 실제 구매 검증이 남아 있었다.

결제 기능을 기다리느라 잘 동작하는 앱의 첫 출시까지 미루는 것이 맞는지 다시 생각했다.

첫 출시에는 준비한 기능을 전부 넣어야 할까?

검증하지 못한 결제부터 뺐다

원래는 출시할 음악 앱에 1개월 선불 Pro 이용권을 제공할 생각이었다.

Pro 사용자는 광고 없이 모든 코드 진행 프리셋을 사용하는 방식이었다.

하지만 Play Console에서 가격 저장 오류가 반복됐고 구매, 복원, 만료와 환불도 실제로 확인하지 못했다.

버튼만 숨기고 프리셋 잠금을 남기면 사용자는 이유도 모른 채 기능 일부를 사용할 수 없게 된다.

그래서 첫 버전에서는 Pro 진입점과 잠금을 함께 비활성화했다.

14개 장르의 180개 코드 진행 프리셋을 모두 무료로 열고 화면 아래의 배너 광고만 유지했다.

기능을 덜 완성한 것이 아니라 검증된 범위와 사용자에게 보여 주는 범위를 맞춘 결정이었다.

출시 후보를 다시 만들었다

무료 프리셋 기준으로 앱 버전을 1.0.1 (2)로 올렸다.

업로드 서명, R8 코드 축소, 리소스 축소와 ReTrace 매핑 파일을 적용한 AAB를 만들었다.

쉬운 설명: AAB는 Google Play에 제출하는 Android 앱 묶음이고, R8은 필요 없는 코드를 줄이며 ReTrace 파일은 줄어든 코드에서 발생한 오류를 다시 읽기 쉽게 바꿔 준다.

Google Play에서는 최소 Android API 24, 목표 SDK 36과 신규 설치 크기 약 6.5MB를 확인했다.

쉬운 설명: 최소 API는 앱이 실행될 수 있는 가장 오래된 Android 기준이고, 목표 SDK는 앱이 맞추도록 개발된 최신 Android 기준이다.

내부 테스트 라이브러리에 있던 같은 AAB를 프로덕션 출시 후보에 다시 사용했다.

이전 1.0 (1)은 제외하고 1.0.1 (2) 하나만 남겼다.

스토어 설명과 실제 앱을 맞췄다

한국어 앱 이름은 코드 스케치, 영어 이름은 Chord Sketch로 정했다.

짧은 설명과 자세한 설명도 한국어와 영어로 각각 작성했다.

로그인 없이 코드 휠, 피아노 건반, 스페셜 코드, 4코드 스케치, 메트로놈과 모든 프리셋을 사용할 수 있다는 현재 기능만 적었다.

아직 제공하지 않는 Pro 혜택과 결제 문구는 뺐고 배너 광고가 표시된다는 점은 분명하게 적었다.

앱 아이콘, 기능 그래픽과 실제 휴대전화 화면 네 장도 등록했다.

예전 Pro 잠금이 보이는 스크린샷은 현재 무료 버전과 맞지 않아 제외했다.

영어 등록정보는 별도 이미지를 다시 올리지 않고 기본 등록정보의 이미지를 함께 사용했다.

정책 질문은 실제 SDK를 기준으로 답했다

앱은 로그인 없이 사용할 수 있고 광고를 포함한다고 선언했다.

대상 연령은 13세 이상으로 정했고 정부, 금융과 건강 앱에는 해당하지 않는다고 답했다.

콘텐츠 등급 설문에는 폭력, 성적 콘텐츠, 도박, 약물, 공포와 사용자 생성 콘텐츠가 없다고 입력했다.

그 결과 대한민국에서는 전체 이용가에 해당하는 등급이 나왔다.

데이터 보안 양식에는 Google Mobile Ads SDK가 처리할 수 있는 대략적인 위치, 진단 정보, 앱 상호작용과 기기 또는 기타 ID를 반영했다.

쉬운 설명: SDK는 앱에 기능을 더하는 도구 모음이므로 앱이 직접 저장하지 않는 정보라도 광고 SDK가 처리한다면 데이터 보안 답변에 포함해야 한다.

Android 13 이상 앱에 필요한 광고 ID 선언도 실제 매니페스트와 광고 SDK 사용을 기준으로 작성했다.

쉬운 설명: 매니페스트는 앱의 권한과 기본 설정을 적어 둔 설명서이고, 광고 ID는 광고 제공과 성과 측정에 사용하는 재설정 가능한 식별값이다.

개인정보처리방침, 지원 페이지와 데이터 삭제 안내도 공개 주소로 연결했다.

한국어와 영어로 전 세계 공개를 준비했다

앱 인터페이스와 스토어 설명을 한국어와 영어로 제공했다.

특정 국가에서만 사용하는 계정, 결제나 지역 전용 콘텐츠가 없어서 선택 가능한 176개 국가와 지역을 모두 공개 대상으로 지정했다.

모든 언어를 따로 번역한 것은 아니므로 다른 언어 환경에서는 Google Play의 기본 언어 처리에 따라 등록정보가 표시될 수 있다.

지역을 많이 선택하는 일보다 어느 지역에서든 앱 설명과 실제 기능이 어긋나지 않게 만드는 일이 더 중요했다.

마지막 차단 항목은 광고 ID였다

프로덕션 AAB, 국가, 소개글과 정책 응답을 저장하자 게시 개요에 12개 변경사항이 모였다.

제출 버튼은 아직 비활성화되어 있었고 Android 13의 광고 ID 사용 여부를 작성하라는 문제가 하나 남아 있었다.

광고 SDK와 매니페스트 권한을 확인한 뒤 사용 여부와 목적을 저장하자 차단이 사라졌다.

쉬운 설명: Play Console은 제출 전에 앱 파일과 정책 답변이 서로 맞는지 자동으로 확인하고, 빠진 필수 답변이 있으면 제출 버튼을 막는다.

한국어와 영어 출시 노트에는 첫 출시 안정화, 사용성 개선과 모든 프리셋 무료 제공을 적었다.

마지막으로 12개 변경사항을 Google Play 검토로 전송했다.

빠른 자동 검사가 끝난 뒤 상태가 검토 중인 변경사항으로 바뀐 것도 확인했다.

제출과 출시는 같은 말이 아니다

첫 제출 당시의 상태는 프로덕션 출시 심사 제출 완료였다.

Google의 검토와 실제 스토어 공개는 그다음에 남아 있는 일이었다.

관리형 게시를 사용하지 않았기 때문에 심사가 승인되면 별도의 공개 버튼 없이 자동으로 게시된다.

쉬운 설명: 관리형 게시는 승인이 끝난 뒤 개발자가 원하는 시점에 직접 공개하도록 멈춰 두는 기능이다.

앱 공개 후에는 AdMob에서 스토어 등록정보를 연결하고 앱 검토와 운영 광고 노출도 다시 확인할 계획이었다.

당시에는 결제 검증을 마친 뒤 Pro를 다시 붙이는 선택지도 남겨 두었다.

오랜만의 출시는 기능을 많이 넣는 일이 아니라 코드, 소개글, 스크린샷과 정책 답변이 같은 앱을 설명하도록 맞추는 일이었다.

검증하지 못한 기능 하나를 빼자 오히려 첫 버전의 경계가 더 분명해졌다.

#AI프롬프트제공

아래 프롬프트로 Android 앱의 출시 후보와 스토어 자료를 대조하고, 제출 전에 해결해야 할 항목을 정리할 수 있다.

비밀번호, 서명 키, API 키, 토큰과 개인정보는 프롬프트에 입력하지 않는다.

당신은 Android 앱의 Google Play 출시 준비를 점검하는 개발자입니다.

프로젝트: [프로젝트 경로 또는 저장소]
출시 후보: [앱 버전과 AAB 경로, 없으면 미생성]
공개할 기능: [이번 버전에 제공할 기능과 제외할 기능]
자료: [스토어 설명·스크린샷·정책 페이지·확인 가능한 콘솔 화면]
대상: [출시 트랙, 국가·지역과 연령층]

README, 빌드 설정, 매니페스트, 의존성과 실제 구현을 먼저 확인해 주세요.
- applicationId, versionCode/versionName, 최소·목표 SDK, 릴리즈 서명 설정과 실제 AAB의 일치
- 권한·광고·분석·결제 SDK와 개인정보처리방침·데이터 보안·광고 ID 선언의 일치
- 스토어 설명·스크린샷이 이번 버전의 실제 기능과 일치하는지
- 결제가 있다면 구매·복원·만료·환불 검증 근거와 미검증 기능의 노출 여부
- 로그인이나 제한 기능이 있다면 심사자가 접근할 방법, 지원·데이터 삭제 안내의 유효성

현재 Google 공식 문서로 대상 SDK 등 제출 요구사항을 확인하고, 특정 앱의 연령·데이터 보안 답변을 그대로 복사하지 마세요.
서명 키나 비밀값을 출력하지 말고, 검증하지 못한 기능을 자동으로 삭제하거나 정책 답변을 대신 확정하지 마세요.

결과는 출시 차단 항목, 개선 권장 사항, 확인 불가 항목으로 구분하세요.
각 항목에 파일·실행 결과 등의 근거와 다음 조치를 적고, 코드로 확인한 사항·Play Console 확인 사항·실기기 테스트를 분리하세요.
빌드 성공을 업로드·심사 승인·공개 완료로 표현하지 마세요.
먼저 점검 결과와 최소 수정안을 보고하고, 코드 수정·업로드·심사 제출·공개는 각각 요청된 범위와 승인 절차에 따라 진행하세요.

2026년 9월 9일 추가 업데이트: 출시하고 나서도 할 일이 있었다

첫 버전은 Google Play에 공개됐고, 이번에는 내 휴대폰에서 새 버전을 확인한 뒤 업데이트를 제출했다.

출시 버튼을 누르는 것으로 끝날 줄 알았지만, 실제로 쓰고 찾아보니 다시 손볼 부분이 보였다.

무료로 운영하기로 했다

처음에는 결제 검증이 끝나지 않아 유료 기능을 미뤘지만, 이제는 모든 기능과 프리셋을 무료로 열고 하단 배너 광고로 운영하기로 했다.

유료 버전을 기다리게 하기보다 코드를 듣고 조합하는 기능을 누구나 바로 쓰게 하고 싶었다.

앱뿐 아니라 한국어와 영어 스토어 소개, 개인정보처리방침과 지원 안내도 같은 방향으로 맞췄다.

내 휴대폰에서 다시 확인했다

휴대폰을 USB로 연결하고 기존 앱을 지운 뒤 새 버전을 설치해 직접 사용해 봤다.

앱이 정상으로 동작하고 화면 아래에 광고가 표시되는 것도 확인했다.

다만 내 휴대폰에서 광고가 보이는 것과 AdMob의 심사가 끝나는 것은 별개였다.

쉬운 설명: AdMob은 앱에 광고를 공급하는 서비스이며, 광고 한 번이 표시됐다고 관리 화면의 검토 절차까지 모두 끝났다는 뜻은 아니다.

이번에 확인한 것은 직접 설치한 새 버전의 동작이고, Google Play를 통한 업데이트 배포는 심사 뒤에 확인할 일이었다.

잘 보이는 화면 밖도 살폈다

업데이트를 제출하기 전에 파일 가져오기와 앱 내부 웹 화면, 광고 처리와 사용 중인 라이브러리도 점검했다.

가져온 파일의 내용이 코드처럼 실행될 수 있는 문제를 수정하고, 파일의 크기와 형식을 검사하도록 보완했다.

앱 내부 웹 화면이 접근할 수 있는 범위를 줄이고, 알려진 취약점이 있는 라이브러리 버전도 교체했다.

쉬운 설명: 파일은 작업 내용을 담은 자료로만 읽어야 하고, 그 안의 문장이 앱에 명령을 내리는 코드로 실행되면 안 된다.

검사를 통과했다고 앞으로 보안 문제가 생기지 않거나 다시 업데이트할 필요가 없다는 뜻은 아니므로, 이번에 발견한 문제를 고치고 확인한 범위로 기록했다.

출시된 앱을 찾는 일도 남아 있었다

Google Play에서 내 앱을 검색했는데 생각보다 잘 보이지 않았다.

코드 스케치라는 이름만으로는 처음 보는 사람이 음악 앱인지 바로 알기 어려울 수 있겠다는 생각이 들었다.

그래서 한국어 이름을 코드 스케치 - 작곡 공부, 영어 이름을 Chord Sketch: Learn to Compose로 바꿔 제출했다.

설명도 기능 이름을 나열하는 데서 한 걸음 더 나아가, 코드를 듣고 피아노에서 구성음을 확인하며 나만의 진행을 만드는 연습 방법을 담았다.

지원 페이지에도 같은 안내와 Google Play 바로가기를 넣었다.

이름을 바꾼다고 검색 순위가 바로 오르는 것은 아니지만, 적어도 어떤 앱인지 더 분명하게 전달할 수는 있다.

9월 9일 제출을 마친 시점에는 1.0.2 (3)과 새 한·영 등록정보가 함께 심사 중이었다.

진행 중인 심사에 이름과 설명 변경을 추가하면서 검토가 다시 시작됐고, 대기 시간이 늘어날 수 있다는 안내도 받았다.

다음에는 업데이트와 새 이름의 공개 여부, AdMob의 심사 결과를 각각 확인하면 된다.

한 줄 요약: 앱을 출시할 때는 실제 동작·소개·정책을 맞추고, 출시 후에는 실기기 사용 경험과 검색에서 전달되는 용도까지 확인하되 심사 제출과 공개 완료를 구분해 기록하자.