NEON의 이것저것

플레이 스토어 앱 업데이트 실패 해결 과정(certificate mismatch) 본문

개발지식 정리/Kotlin

플레이 스토어 앱 업데이트 실패 해결 과정(certificate mismatch)

Neoself 2025. 12. 3. 13:41

인앱 업데이트 로직을 통해 플레이스토어로 리다이렉트 및 업데이트 시도 시, 아래 팝업과 함께 앱 설치가 불가하다는 문제를 겪었습니다.

 

이를 해결하고자 먼저, 해당 이슈가 발견된 기기를 연결하여 LogCat를 통해 원인을 파악하였습니다.

[414] AU2: Failure History successfully updated for package, attempting to upgrade to version 7 with install reason SINGLE_INSTALL and status_code 6004
[410] IQ: start evaluating install requests.
[403] com.packageName.projectName is installed but certificate mismatch // 서명 파일 불일치!
[410] IQ: There are 0 installs pending for job 34988: []
[410] IQ: No matching installs to run for jobs: [34988]
[410] IQ: 0 scheduled install statuses found to proceed.

 

이는 업데이트 전인 버전 A와 업데이트를 하고자 하는 최신 버전 B 간 사용된 서명 파일이 불일치하기에 업데이트를 하여도, 동일한 앱으로 간주되지 않아, 업데이트가 실패되고 있다는 것을 의미합니다.

 

실제로 버전 A에서 사용된 서명 파일의 경우 CI/CD 구축 과정에서 다른 서명파일로 교체를 한 후, 버전 B에 대한 배포가 이루어졌기 때문에 이에 대한 검증을 하고자 버전 A에 대한 아카이브 파일을 다시 Android Studio로 연 후, "Generate Signed App Bundle or APK"를 통해 버전 B 배포에 사용한 업로드 키 인증서(jks)로 서명하여 apk로 추출한 후, 테스트 기기에 설치하여 확인해보기로 했습니다.

 

하지만, 이러한 시도 후에도 동일하게 업데이트에 실패하는 이슈가 유지되었습니다.

그 이유는 업로드에 사용된 서명 키가 실제 playStore에서 관리하고 있는 서명키와 달랐기 때문입니다.

Playstore는 업로드 키로 서명된 앱 번들을 배포할 때, 앱 서명 키로 재서명을 진행합니다.

 

이는 Google Play Console -> 앱 대시보드 -> 테스트 및 출시 -> 앱 무결성 탭에서 Play 앱 서명 섹션의 설정 버튼을 누르면 확인이 가능합니다. 우측 사진에서 보시는 바와 같이 앱 번들을 업로드할 때 사용되는 업로드 키 인증서와 앱의 출시버전 서명에 사용되는 앱 서명 키 인증서를 별도로 구분하고 있죠. 여기서 앱 서명 키 인증서는 업로드 키 인증서와 달리 개발자가 직접 접근할 수는 없으며 Google 서버에서 자체 보관합니다.

 

즉, 초기에 문제가 발생한 원인은 기존 버전에 사용된 앱 서명 키와 최신 버전에 사용된 앱 서명 키가 서로 상이하여 업데이트가 거부된 것이었으며, 디버깅 목적으로 최신 인증서로 서명한 앱으로 업데이트를 시도하였을 때에는 앱 업로드 키와 앱 서명키 간 일치 여부를 비교하려 했기 때문에 업데이트가 거부된 것이였습니다.

 

 

때문에 인앱 업데이트 로직을 테스트하기 위해선 플레이스토어에 등록된 앱 서명키로 서명된 이전 버전의 앱이 필요했습니다.

 

이는 Google Play Console에서 조회 및 다운로드가 가능합니다.

 

 

이러한 디버깅 및 리서치 경험을 통해 Google Play에서 출시된 앱 버전들에 대해 어떻게 서명을 관리하고 있는지를 알아볼 수 있었습니다.

 

감사합니다.