Android에서는 인증서를 사용해 디지털 방식으로 서명된 APK만 기기에 설치하거나 업데이트할 수 있습니다. Android App Bundle을 사용하여 출시하는 경우 업로드 키로 App Bundle에 서명한 후 Play Console에 업로드해야 합니다. 그러면 Play 앱 서명이 나머지 작업을 책임집니다. Play 스토어 또는 다른 스토어에서 APK를 사용하여 앱을 배포하는 경우 업로드할 APK에 직접 서명해야 합니다.
이 페이지에서는 앱 서명 및 보안과 관련된 중요한 개념을 알아봅니다. 또한 Google Play에 출시하기 위해 Android 스튜디오를 사용하여 앱에 서명하는 방법과 Play 앱 서명을 구성하는 방법도 설명합니다.
새 앱에 서명하고 앱을 Google Play에 게시하기 위한 단계는 대략적으로 다음과 같습니다.
앱이 이미 기존 앱 서명 키로 Google Play 스토어에 출시되어 있거나, Google이 앱 서명 키를 생성하게 하는 대신 새 앱의 앱 서명 키를 선택하려는 경우 다음 단계를 따르세요.
- 앱의 서명 키를 사용하여 앱에 서명합니다.
- Play 앱 서명에 앱 서명 키를 업로드합니다.
- (권장) 향후 앱 업데이트를 위해 업로드 인증서를 생성하고 등록합니다.
- Google Play에 앱 업로드
- 앱 버전 준비 및 출시
이 페이지에서는 앱을 다른 앱 스토어에 업로드할 때 자체 키를 관리하는 방법도 알아봅니다. Android 스튜디오를 사용하지 않거나 명령줄에서 앱에 서명하려는 경우 apksigner
사용 방법을 알아보세요.
Play 앱 서명
Google에서는 Play 앱 서명으로 앱의 서명 키를 관리하고 보호하며, 배포할 APK에 서명하는 데 이 키를 사용합니다. App Bundle은 APK를 Google Play 스토어에 빌드하고 서명하는 것을 지연시키므로 App Bundle을 업로드하기 전에 Play 앱 서명을 구성해야 합니다. 이렇게 하면 다음과 같은 이점이 있습니다.
- Android App Bundle을 사용하고 Google Play의 고급 전송 모드를 지원합니다. Android App Bundle을 사용하면 앱 크기가 훨씬 작아지고 출시가 더 간단해지며 기능 모듈을 사용하여 인스턴트 환경을 제공할 수 있습니다.
- 서명 키의 보안이 강화되고 별도의 업로드 키를 사용하여 Google Play에 업로드하는 App Bundle에 서명할 수 있습니다.
기존 서명 키가 도용되었거나 더 강력한 암호화가 적용된 키로 이전해야 하는 경우 키 업그레이드를 통해 앱 서명 키를 변경할 수 있습니다.
Play 앱 서명은앱 서명 키와 업로드 키라는 두 가지 키를 사용하며 키 및 키 저장소에 관한 섹션에서 이 키를 자세히 설명합니다. 업로드 키는 개발자가 보관하다가 앱을 Google Play 스토어에 업로드하기 위해 서명할 때 사용합니다. Google이 업로드 인증서를 사용하여 개발자의 신원을 확인하고, 배포를 위해 개발자의 앱 서명 키로 APK에 서명합니다(그림 1 참고). 별도의 업로드 키를 사용하면 키를 분실하거나 키가 도용되었을 때 업로드 키 재설정을 요청할 수 있습니다.
반면 Play 앱 서명을 선택하지 않은 앱은 서명 키를 분실하면 앱을 업데이트할 수 없습니다.
그림 1. Play 앱 서명으로 앱에 서명
서명 키는 Google에서 자체 키를 저장하는 데 사용하는 인프라와 동일한 인프라에 저장되며, 이 인프라에서 키는 Google의 키 관리 서비스로 보호됩니다. Google의 기술 인프라에 관해 자세히 알아보려면 Google Cloud 보안 백서를 참고하세요.
Play 앱 서명을 사용할 때 업로드 키를 분실하거나 키가 도용된 경우 Play Console에서 업로드 키 재설정을 요청할 수 있습니다. 앱 서명 키는 Google에 의해 보호되므로, 업로드 키를 변경하더라도 원래 앱의 업데이트로 새로운 앱 버전을 계속 업로드할 수 있습니다. 자세한 내용은 분실했거나 도용된 비공개 업로드 키 재설정을 참고하세요.
다음 섹션에서는 앱 서명 및 보안과 관련된 몇 가지 중요한 용어와 개념을 설명합니다. 다음 섹션을 건너뛰고 Google Play 스토어에 업로드하기 위해 앱을 준비하는 방법을 알아보려면 출시할 앱에 서명을 참고하세요.
키 저장소, 키, 인증서
자바 키 저장소(.jks 또는 .keystore)는 인증서와 비공개 키의 저장소 역할을 하는 바이너리 파일입니다.
디지털 인증서 또는 ID 인증서라고도 하는 공개키 인증서(.der
또는 .pem
파일)에는 공개 키/비공개 키 쌍의 공개 키 그리고 상응하는 비공개 키를 보유하고 있는 소유자를 식별하는 기타 메타데이터(예: 이름, 위치)가 포함되어 있습니다.
다음은 알고 있어야 하는 다양한 유형의 키입니다.
- 앱 서명 키: 사용자의 기기에 설치된 APK에 서명하는 데 사용하는 키입니다. Android의 보안 업데이트 모델에 포함된 서명 키는 앱의 전체 기간 동안 변경되지 않습니다. 앱 서명 키는 공개되지 않으며 반드시 기밀로 유지해야 합니다. 하지만 앱 서명 키를 사용하여 생성한 인증서는 공유할 수 있습니다.
업로드 키: Google Play에서 앱 서명을 위해 업로드하기 전에 App Bundle이나 APK에 서명하는 데 사용하는 키입니다. 업로드 키는 반드시 기밀로 유지해야 합니다. 하지만 업로드 키를 사용하여 생성된 인증서는 공유할 수 있습니다. 다음 방법 중 하나로 업로드 키를 생성할 수 있습니다.
- Google에서 앱 서명 키를 대신 생성하도록 선택할 경우 출시할 앱에 서명할 때 사용하는 키가 업로드 키로 지정됩니다.
- 신규 또는 기존 앱을 선택할 때 Google에 앱 서명 키를 제공할 경우 보안 강화를 위해 선택 단계에서 또는 나중에 새로운 업로드 키를 생성할 수 있습니다.
- 새로운 업로드 키를 생성하지 않으면 앱 서명 키를 업로드 키로 계속 사용하여 각 출시에 서명하게 됩니다.
도움말: 키를 안전하게 보관하려면 앱 서명 키와 별도로 업로드 키를 만드는 것이 좋습니다.
API 제공업체와 작업
Play Console의 출시 > 설정 > 앱 서명 페이지에서 앱 서명 키와 업로드 키의 인증서를 다운로드할 수 있습니다. 인증서는 API 제공업체에 공개 키를 등록하는 데 사용되며, 비공개 키가 포함되어 있지 않으므로 공유 목적으로 사용됩니다.
인증서 지문은 짧고 고유한 인증서 표현식으로 API 제공업체가 패키지 이름과 함께 요청하는 경우가 많습니다. 앱을 제공업체 서비스에 등록하는 데 사용됩니다. 업로드 및 앱 서명 인증서의 MD5, SHA-1 및 SHA-256 지문은 Play Console의 앱 서명 페이지에서 찾을 수 있습니다. 같은 페이지에서 원본 인증서(.der
)를 다운로드하여 다른 지문을 계산할 수도 있습니다.
디버그 빌드 서명
IDE에서 프로젝트를 실행하거나 디버그할 때 Android 스튜디오는 Android SDK 도구에서 생성된 디버그 인증서를 사용하여 앱에 자동으로 서명합니다. Android 스튜디오에서 프로젝트를 처음 실행하거나 디버그하면 IDE가 자동으로 $HOME/.android/debug.keystore
에 디버그 키 저장소와 인증서를 만들고 키 저장소 비밀번호와 키 비밀번호를 설정합니다.
디버그 인증서는 빌드 도구에서 생성하고 설계상 보안이 유지되지 않으므로 Google Play 스토어를 포함한 대부분의 앱 스토어는 디버그 인증서로 서명된 앱을 게시할 수 있도록 허용하지 않습니다.
Android 스튜디오는 서명 구성에 디버그 서명 정보를 자동으로 저장하므로 디버그할 때마다 서명 정보를 입력할 필요가 없습니다. 서명 구성은 키 저장소 위치, 키 저장소 비밀번호, 키 이름 및 키 비밀번호를 비롯하여 앱에 서명하는 데 필요한 모든 정보가 들어 있는 객체입니다.
디버그할 앱을 빌드하고 실행하는 방법에 관한 자세한 내용은 앱 빌드 및 실행을 참고하세요.
디버그 인증서 만료
디버깅할 앱에 서명하는 데 사용되는 자체 서명된 인증서의 만료일은 생성일로부터 30년입니다. 인증서가 만료되면 빌드 오류가 발생합니다.
이 문제를 해결하려면 다음 위치 중 하나에 저장된 debug.keystore
파일을 삭제하면 됩니다.
- OS X 및 Linux:
~/.android/
- Windows XP:
C:\Documents and Settings\user\.android\
- Windows Vista 및 Windows 7, 8, 10:
C:\Users\user\.android\
다음에 앱의 디버그 버전을 빌드하고 실행할 때 Android 스튜디오에서 새 키 저장소와 디버그 키를 다시 생성합니다.
Google Play에 출시할 앱 서명
앱을 게시할 준비가 되면 앱에 서명하고 Google Play와 같은 앱 스토어에 업로드해야 합니다. 앱을 Google Play에 처음 게시하는 경우 Play 앱 서명도 구성해야 합니다. Play 앱 서명은 2021년 8월 이전에 만들어진 앱에는 선택사항입니다. 이 섹션에서는 출시할 앱에 올바르게 서명하고 Play 앱 서명을 구성하는 방법을 설명합니다.
업로드 키 및 키 저장소 생성
Play 앱 서명을 구성할 때 유용한 업로드 키가 아직 없다면 다음과 같이 Android 스튜디오를 사용하여 생성할 수 있습니다.
- 메뉴 바에서 Build > Generate Signed Bundle/APK를 클릭합니다.
- Generate Signed Bundle or APK 대화상자에서 Android App Bundle 또는APK를 선택하고 Next를 클릭합니다.
- Key store path 필드 아래에서 Create new를 클릭합니다.
그림 2에 표시된 것처럼 New Key Store 창에서 다음과 같은 키 저장소 및 키의 정보를 입력합니다.
그림 2. Android 스튜디오에서 새 업로드 키 및 키 저장소 생성
키 저장소
- Key store path: 키 저장소를 생성할 위치를 선택합니다.
또한 파일 이름은 위치 경로의 끝에
.jks
확장자와 함께 추가해야 합니다. - Password: 키 저장소에 사용할 보안 비밀번호를 생성하고 확인합니다.
- Key store path: 키 저장소를 생성할 위치를 선택합니다.
또한 파일 이름은 위치 경로의 끝에
키
- Alias: 키를 식별할 수 있는 이름을 입력합니다.
- Password: 키에 사용할 보안 비밀번호를 생성하고 확인합니다. 이 비밀번호는 키 저장소 비밀번호와 동일해야 합니다. 자세한 내용은 알려진 문제를 참고하세요.
- Validity (years): 키가 유효하게 유지되는 기간(년)을 설정합니다. 키가 최소 25년 동안 유효하게 유지되어야 앱 수명 동안 같은 키로 앱 업데이트에 서명할 수 있습니다.
- Certificate: 인증서에 사용할 본인 관련 정보를 입력합니다. 이 정보는 앱에 표시되지 않지만 APK의 일부로 인증서에 포함됩니다.
양식을 작성하고 나면 OK를 클릭합니다.
업로드 키를 사용하여 앱을 빌드하고 서명하려면 업로드 키로 앱에 서명하는 방법에 관한 섹션으로 계속 진행하세요. 키와 키 저장소만 생성하려면 Cancel을 클릭합니다.
키로 앱에 서명
업로드 키가 이미 있다면 그 키를 사용해 앱에 서명합니다. 앱이 이미 기존 앱 서명 키로 서명되어 Google Play 스토어에 게시되어 있다면 이 키를 사용하여 앱에 서명합니다. 나중에 Google Play로 별도의 업로드 키를 생성 및 등록하여 앱의 후속 업데이트에 서명하고 업로드할 수 있습니다.
Android 스튜디오를 사용하여 앱에 서명하려면 다음 단계를 따르세요.
- 아직 Generate Signed Bundle or APK 대화상자가 열려 있지 않다면 Build > Generate Signed Bundle/APK를 클릭합니다.
- Generate Signed Bundle or APK 대화상자에서 Android App Bundle 또는 APK를 선택하고 Next를 클릭합니다.
- 드롭다운에서 모듈을 선택합니다.
키 저장소 경로와 키의 별칭을 지정하고 키 저장소 및 키 별칭의 비밀번호를 입력합니다. 아직 업로드 키 저장소와 키가 준비되지 않았다면 먼저 업로드 키와 키 저장소를 생성한 다음 돌아와서 이 단계를 완료합니다.
그림 3. 업로드 키로 앱에 서명
다음을 클릭합니다.
다음 창에서(그림 4 참고) 서명된 앱의 대상 폴더를 선택하고 빌드 유형을 선택한 다음 적용되는 경우 제품 버전을 선택합니다.
APK를 빌드하고 서명하는 경우 앱에서 지원하려는 서명 버전을 선택해야 합니다. 자세한 내용은 앱 서명 체계를 참고하세요.
만들기를 클릭합니다.
그림 5. 팝업에서 링크를 클릭하여 App Bundle을 분석하거나 검색합니다.
Android 스튜디오가 서명된 앱 빌드를 마치고 나면 팝업 알림의 적절한 옵션을 클릭하여 앱을 검색하거나 분석할 수 있습니다(그림 5 참고).
이제 앱을 Play 앱 서명에 등록하고 출시를 위해 앱을 업로드할 준비가 되었습니다. 앱 게시 과정을 잘 모르겠다면 출시 개요를 참고하세요. 잘 알고 있다면 Play Console에 앱을 업로드하는 방법에 관한 페이지로 계속 진행하세요.
Play 앱 서명 사용
이 페이지의 앞부분에서 설명한 것처럼 Play 앱 서명을 구성해야 Google Play를 통해 배포할 앱에 서명할 수 있습니다. 단, 2021년 8월 이전에 만들어진 앱은 예외로 자체 서명 APK를 계속 배포할 수 있습니다. 밟아야 할 단계는 앱이 아직 Google Play에 게시되지 않았는지 또는 앱이 이미 기존 앱 서명 키로 서명되어 2021년 8월 이전에 게시되었는지에 따라 다릅니다.
새 앱 구성
아직 Google Play에 게시되지 않은 앱의 서명을 구성하려면 다음 단계를 따르세요.
- 아직 업로드 키를 생성하지 않았다면 업로드 키를 생성하고 이 업로드 키로 앱에 서명합니다.
- Play Console에 로그인합니다.
- 버전을 준비 및 출시하기 위한 단계에 따라 새 버전을 생성합니다.
- 출시 트랙을 선택한 후 다음과 같이 App signing 섹션에서 앱 서명을 구성합니다.
- Google Play에서 대신 앱 서명 키를 생성하여 앱에 서명하는 데 사용하려면 어떤 작업도 실행하지 않아도 됩니다. 첫 번째 버전에 서명할 때 사용한 키가 업로드 키가 되며 차후 버전에 서명할 때도 이 키를 사용해야 합니다.
- 개발자 계정의 다른 앱과 같은 키를 사용하려면 Change app signing key > Use the same key as another app in this account를 선택하고 앱을 선택한 후 Continue를 클릭합니다.
- 앱에 서명할 때 Google이 사용할 자체 서명 키를 제공하려면 Change app signing key를 선택하고 비공개 키와 공개 인증서를 안전하게 업로드할 수 있는 Export and upload옵션 중 하나를 선택합니다.
App Bundles 섹션에서 Browse files를 클릭하여 업로드 키로 서명한 앱을 찾아 업로드합니다. 앱 출시에 관한 자세한 내용은 버전 준비 및 출시를 참고하세요. Play 앱 서명을 구성한 후 앱을 출시하면 Google Play에서 앱의 서명 키를 생성(기존 키를 업로드한 경우 제외)하고 관리합니다. Google Play에 향후 앱 업데이트를 업로드하기 전에 앱의 업로드 키를 사용하여 업데이트에 서명하세요.
앱의 새 업로드 키를 생성해야 하는 경우 분실했거나 도용된 비공개 업로드 키 재설정 방법을 안내하는 섹션으로 이동하세요.
기존 앱 선택
기존 앱 서명 키를 사용하여 이미 Google Play에 게시한 앱을 업데이트하는 경우 다음과 같이 Play 앱 서명을 선택할 수 있습니다.
- Play Console에 로그인하여 앱으로 이동합니다.
- 왼쪽 메뉴에서 출시 > 설정 > 앱 서명을 클릭합니다.
- 해당하는 경우 서비스 약관을 검토하고 동의를 선택합니다.
- Google Play에 업로드하려는 서명 키를 가장 잘 설명한 옵션을 선택하고 표시되는 안내를 따릅니다. 예를 들어 서명 키에 Java 키 저장소를 사용하는 경우 Upload a new app signing key from Java Keystore를 선택하고 안내에 따라 PEPK 도구를 다운로드하여 실행한 다음 생성된 파일을 암호화된 키와 함께 업로드합니다.
- Enroll을 클릭합니다.
이제 앱의 서명 및 업로드 인증서를 자세히 설명하는 페이지가 표시됩니다. 이제 Google Play는 사용자에게 앱을 배포할 때 기존 키로 앱에 서명합니다. 그러나 Play 앱 서명의 가장 중요한 이점 중 하나는 Google Play에 업로드하는 아티팩트에 서명하는 데 개발자가 사용하는 키와 Google Play에서 사용자에게 배포할 앱에 서명하는 데 사용하는 키를 구별하는 기능입니다. 그러므로 다음 섹션의 단계를 따라 별도의 업로드 키를 생성하고 등록해 보세요.
업로드 인증서 생성 및 등록
업로드 키로 서명하지 않은 앱을 게시하면 Google Play Console에서 앱의 향후 업데이트를 위해 키를 등록할 수 있는 옵션을 제공합니다. 이는 선택사항이지만 Google Play가 사용자에게 앱을 배포하는 데 사용하는 것과는 다른 키로 앱을 게시하는 것이 좋습니다. 이렇게 하면 Google에서 서명 키를 안전하게 보호하며, 개발자는 분실했거나 도용된 비공개 업로드 키를 재설정할 수 있습니다. 이 섹션에서는 업로드 키를 생성하고 여기에서 인증서를 업로드하며 향후 앱 업데이트를 위해 Google Play로 인증서를 등록하는 방법을 설명합니다.
다음과 같은 경우 Play Console에서 업로드 인증서를 등록할 수 있는 옵션이 표시됩니다.
- 서명 키로 서명한 새 앱을 게시하고 Play 앱 서명에 등록하는 경우
- 이미 Play 앱 서명에 등록되었지만 자체 서명 키로 서명된 기존 앱을 게시할 준비가 된 경우
이미 Play 앱 서명에 등록되어 있는 기존 앱의 업데이트를 게시하지 않고 업로드 인증서를 등록하려면 아래 단계를 완료하고 분실했거나 도용된 비공개 업로드 키 재설정 방법을 안내하는 섹션으로 진행하세요.
아직 업로드 키 및 키 저장소를 생성하지 않았다면 업로드 키 및 키 저장소를 생성하세요.
업로드 키와 키 저장소를 생성한 후 다음 명령어와 함께 keytool
을 사용하여 업로드 키에서 공개 인증서를 생성해야 합니다.
$ keytool -export -rfc -keystore your-upload-keystore.jks -alias upload-alias -file output_upload_certificate.pem
이제 업로드 인증서가 생성되었으므로 Play Console에 메시지가 표시되거나 업로드 키를 재설정할 때 Google에 등록하세요.
앱 서명 키 업그레이드
기존 앱 서명 키를 변경해야 하는 경우도 있습니다. 예를 들면 암호화가 더 강력한 키가 필요하거나 서명 키가 도용될 수 있습니다. 하지만 업데이트가 동일한 서명 키로 서명된 경우에만 사용자가 앱을 업데이트할 수 있으므로 이미 게시된 앱의 서명 키를 변경하는 것은 어렵습니다.
앱을 Google Play에 게시하는 경우 Play Console을 통해 게시된 앱에 맞게 서명 키를 업그레이드할 수 있습니다. 새로운 키는 Android 13 이상에서 설치 및 앱 업데이트에 서명하는 데 사용되고 기존 앱 서명 키는 이전 버전의 Android 사용자를 위한 업데이트에 서명하는 데 사용됩니다.
자세한 내용은 앱 서명 키 업그레이드를 참고하세요.
분실했거나 도용된 비공개 업로드 키 재설정
비공개 업로드 키를 분실했거나 비공개 키가 도용됐다면 새 키를 만들고 Play Console에서 업로드 키 재설정을 요청하면 됩니다.
앱에 자동으로 서명하도록 빌드 프로세스 구성
Android 스튜디오에서 서명 구성을 생성하고 이 구성을 출시 빌드 유형에 할당하여 빌드 프로세스 중에 앱의 출시 버전에 자동으로 서명하도록 프로젝트를 구성할 수 있습니다. 서명 구성은 키 저장소 위치, 키 저장소 비밀번호, 키 별칭 및 키 비밀번호로 구성됩니다. Android 스튜디오를 사용하여 서명 구성을 생성하고 이 구성을 출시 빌드 유형에 할당하려면 다음 단계를 완료하세요.
- Project 창에서 앱을 마우스 오른쪽 버튼으로 클릭하고 Open Module Settings를 클릭합니다.
- 왼쪽 패널의 Modules 아래에 있는 Project Structure 창에서 서명하려는 모듈을 클릭합니다.
- Signing 탭을 클릭한 후 Add