앱 서명
키와 Play 앱 서명을 다룹니다.
앱 서명은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
앱에 서명이 필요한 이유
Android는 앱에 디지털 서명이 없으면 설치하지 않습니다. 서명은 앱을 게시한 사람이 누구인지, 그리고 그 이후 APK가 변조되지 않았는지를 증명합니다.
특히 서명은 업데이트를 원래 앱에 연결합니다. 설치된 버전과 동일한 키로 서명한 업데이트만 허용됩니다. 그 키를 잃어버리면 앱을 다시는 업데이트할 수 없습니다.
이 학습에서는 키 저장소, 서명 설정, 그리고 Google의 더 안전한 최신 방식인 Play App Signing을 다룹니다.
키 저장소와 키
서명 ID는 키 저장소 파일(.jks 또는 .keystore)에 저장됩니다. 하나의 키 저장소에는 여러 키를 보관할 수 있으며, 각 키에는 별칭과 고유한 비밀번호가 있습니다.
- 키 저장소 비밀번호 — 파일의 잠금을 해제합니다.
- 키 별칭 — 키 저장소 안의 키 이름입니다.
- 키 비밀번호 — 해당 키의 잠금을 해제합니다.
매일 실행하는 디버그 빌드는 일회용 디버그 키 저장소로 자동 서명됩니다. 릴리스에는 직접 만든 키 저장소가 필요합니다.
키 저장소 만들기
Android Studio 대화상자에서 키 저장소를 만들거나, JDK와 함께 제공되는 keytool 명령을 사용할 수 있습니다.
긴 유효 기간(25년 이상)을 설정하세요. 키가 만료되면 업데이트를 게시할 수 없습니다. RSA 2048이 표준입니다.
keytool -genkeypair \
-v \
-keystore release.jks \
-alias upload \
-keyalg RSA \
-keysize 2048 \
-validity 10000signingConfigs 블록
Gradle 빌드 중 자동으로 서명하려면 signingConfigs 항목을 선언하고 release 빌드 유형에 연결하세요.
이 방법은 작동하지만 비밀번호가 빌드 파일에 그대로 표시된다는 점에 유의하세요. 다음에는 이 문제를 해결합니다.
android {
signingConfigs {
create("release") {
storeFile = file("release.jks")
storePassword = "superSecret"
keyAlias = "upload"
keyPassword = "superSecret"
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
}
}
}Git에 비밀 정보 보관하지 않기
비밀번호나 키 저장소를 버전 관리 시스템에 절대 커밋하지 마세요. 대신 로컬에서 관리하며 Git이 무시하도록 설정한 keystore.properties 파일에서 읽어 오세요.
keystore.properties와 *.jks를 .gitignore에 추가하세요.
// top of app/build.gradle.kts
val keystoreProps = Properties().apply {
val f = rootProject.file("keystore.properties")
if (f.exists()) load(f.inputStream())
}
android {
signingConfigs {
create("release") {
storeFile = file(keystoreProps["storeFile"] as String)
storePassword = keystoreProps["storePassword"] as String
keyAlias = keystoreProps["keyAlias"] as String
keyPassword = keystoreProps["keyPassword"] as String
}
}
}keystore.properties 파일
이에 대응하는 속성 파일은 일반적인 키=값 목록이며, Git에서 제외하고 안전한 곳(비밀번호 관리자 또는 CI 비밀 저장소)에 보관합니다.
CI 서버에서는 커밋된 파일 대신 환경 변수로 제공되는 비밀 정보로 이 값을 주입합니다.
# keystore.properties (git-ignored!)
storeFile=release.jks
storePassword=superSecret
keyAlias=upload
keyPassword=superSecretPlay App Signing
최신 Play에서는 Play App Signing을 사용합니다. 여기서 Google은 실제 앱 서명 키를 안전한 인프라에 보관하고, 사용자에게 제공되는 APK에 이 키로 서명합니다.
개발자는 업로드 키만 관리합니다. 이 키로 번들에 서명하여 업로드하면 Play가 업로드 키를 확인하고 제거한 뒤 앱 서명 키로 다시 서명합니다.
가장 큰 장점은 업로드 키를 잃어버려도 재설정을 요청할 수 있다는 점입니다. 사용자가 신뢰하는 앱 서명 키는 Google이 안전하게 보관합니다.
업로드 키와 앱 서명 키 비교
두 키의 역할은 서로 다르므로 혼동하지 마세요.
- 업로드 키 — 개발자의 키입니다. 업로드하는 AAB에 서명하며, 잃어버린 경우 재설정할 수 있습니다.
- 앱 서명 키 — Google의 키(또는 개발자가 한 번 업로드한 키)입니다. 사용자가 설치하는 최종 APK에 서명하며, 영구적으로 사용됩니다.
새 앱을 등록할 때는 Google이 앱 서명 키를 생성하도록 하고, 업로드 키로 업로드에 서명하는 방법이 가장 간단합니다.
서명 확인하기
아티팩트에 어떤 방식으로 서명되었는지 확인하려면 Android SDK 빌드 도구에 포함된 apksigner를 사용하세요. 이 도구는 서명 인증서와 적용된 서명 체계(v1/v2/v3)를 보고합니다.
인증서의 SHA-256 지문을 비교하는 방법은 Firebase나 Google Sign-In과 같은 서비스에 앱을 등록할 때도 사용됩니다.
# Verify and print signer certificates of an APK
apksigner verify --print-certs app-release.apk
# Show the SHA-256 fingerprint of a keystore key
keytool -list -v -keystore release.jks -alias upload키 보호하기
업로드 키는 교체하기 어렵고, 직접 관리하는 앱 서명 키는 교체할 수 없습니다. 두 키를 매우 중요한 보물처럼 다루세요.
- 키 저장소를 최소 두 곳의 안전한 위치에 백업하세요.
- 비밀번호는 소스 코드가 아닌 비밀번호 관리자에 보관하세요.
- Play App Signing을 사용하여 업로드 키를 잃어버려도 복구할 수 있게 하세요.
- 팀에서 키 저장소에 접근할 수 있는 사람을 제한하세요.
개발자가 키를 잃어 더 이상 업데이트를 배포할 수 없게 되어 중단된 게시 앱이 많습니다.
전체 과정 정리
전체 릴리스 서명 과정은 다음과 같습니다.
keytool로 업로드 키 저장소를 만듭니다.keystore.properties에서 비밀 정보를 읽도록signingConfigs에 연결합니다../gradlew bundleRelease로 서명된.aab를 빌드합니다.- Play에 업로드하면 Play가 사용자에게 제공하기 전에 앱 서명 키로 다시 서명합니다.
이제부터 모든 업데이트는 동일한 업로드 키로 서명해야 합니다.
빠른 확인
Play App Signing이 활성화된 경우 업로드할 번들에 어떤 키로 서명하며, 그 키를 잃어버리면 어떻게 되나요?
복습: 앱 서명
서명은 Android 앱을 설치하고 업데이트할 수 있게 합니다.
- 키 저장소에는 키가 보관되며, 각 키에는 별칭과 비밀번호가 있습니다.
keytool로 유효 기간이 긴 키를 만들고signingConfigs에 연결합니다.keystore.properties와.gitignore를 사용하여 비밀번호를 Git에서 제외합니다.- Play App Signing은 키를 재설정할 수 있는 개발자의 업로드 키와 Google이 영구적으로 보관하는 앱 서명 키로 나눕니다.
- 키를 신중하게 백업하세요. 키를 잃으면 앱을 더 이상 운영하지 못할 수 있습니다.
다음 학습에서는 Play Console과 스토어 등록 정보를 설정하는 방법을 알아봅니다.
자주 묻는 질문
“앱 서명” 강의는 무료인가요?
네 — “앱 서명” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“앱 서명”에서 뭘 배우나요?
키와 Play 앱 서명을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Android Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“앱 서명” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.