앱 서명

Android에서는 인증서를 사용해 디지털 방식으로 서명된 APK만 기기에 설치하거나 업데이트할 수 있습니다. Android App Bundle을 사용하여 출시하는 경우 업로드 키로 App Bundle에 서명한 후 Play Console에 업로드해야 합니다. 그러면 Play 앱 서명이 나머지 작업을 책임집니다. Play 스토어 또는 다른 스토어에서 APK를 사용하여 앱을 배포하는 경우 업로드할 APK에 직접 서명해야 합니다.

이 페이지에서는 앱 서명 및 보안과 관련된 중요한 개념을 알아봅니다. 또한 Google Play에 출시하기 위해 Android 스튜디오를 사용하여 앱에 서명하는 방법과 Play 앱 서명을 구성하는 방법도 설명합니다.

새 앱에 서명하고 앱을 Google Play에 게시하기 위한 단계는 대략적으로 다음과 같습니다.

  1. 업로드 키 및 키 저장소 생성
  2. 업로드 키로 앱 서명
  3. Play 앱 서명 구성
  4. Google Play에 앱 업로드
  5. 앱 버전 준비 및 출시

앱이 이미 기존 앱 서명 키로 Google Play 스토어에 출시되어 있거나, Google이 앱 서명 키를 생성하게 하는 대신 새 앱의 앱 서명 키를 선택하려는 경우 다음 단계를 따르세요.

  1. 앱의 서명 키를 사용하여 앱에 서명합니다.
  2. Play 앱 서명에 앱 서명 키를 업로드합니다.
  3. (권장) 향후 앱 업데이트를 위해 업로드 인증서를 생성하고 등록합니다.
  4. Google Play에 앱 업로드
  5. 앱 버전 준비 및 출시

이 페이지에서는 앱을 다른 앱 스토어에 업로드할 때 자체 키를 관리하는 방법도 알아봅니다. 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 스튜디오를 사용하여 생성할 수 있습니다.

  1. 메뉴 바에서 Build > Generate Signed Bundle/APK를 클릭합니다.
  2. Generate Signed Bundle or APK 대화상자에서 Android App Bundle 또는APK를 선택하고 Next를 클릭합니다.
  3. Key store path 필드 아래에서 Create new를 클릭합니다.
  4. 그림 2에 표시된 것처럼 New Key Store 창에서 다음과 같은 키 저장소 및 키의 정보를 입력합니다.

    그림 2. Android 스튜디오에서 새 업로드 키 및 키 저장소 생성

  5. 키 저장소

    • Key store path: 키 저장소를 생성할 위치를 선택합니다. 또한 파일 이름은 위치 경로의 끝에 .jks 확장자와 함께 추가해야 합니다.
    • Password: 키 저장소에 사용할 보안 비밀번호를 생성하고 확인합니다.
    • Alias: 키를 식별할 수 있는 이름을 입력합니다.
    • Password: 키에 사용할 보안 비밀번호를 생성하고 확인합니다. 이 비밀번호는 키 저장소 비밀번호와 동일해야 합니다. 자세한 내용은 알려진 문제를 참고하세요.
    • Validity (years): 키가 유효하게 유지되는 기간(년)을 설정합니다. 키가 최소 25년 동안 유효하게 유지되어야 앱 수명 동안 같은 키로 앱 업데이트에 서명할 수 있습니다.
    • Certificate: 인증서에 사용할 본인 관련 정보를 입력합니다. 이 정보는 앱에 표시되지 않지만 APK의 일부로 인증서에 포함됩니다.
  6. 양식을 작성하고 나면 OK를 클릭합니다.

  7. 업로드 키를 사용하여 앱을 빌드하고 서명하려면 업로드 키로 앱에 서명하는 방법에 관한 섹션으로 계속 진행하세요. 키와 키 저장소만 생성하려면 Cancel을 클릭합니다.

키로 앱에 서명

업로드 키가 이미 있다면 그 키를 사용해 앱에 서명합니다. 앱이 이미 기존 앱 서명 키로 서명되어 Google Play 스토어에 게시되어 있다면 이 키를 사용하여 앱에 서명합니다. 나중에 Google Play로 별도의 업로드 키를 생성 및 등록하여 앱의 후속 업데이트에 서명하고 업로드할 수 있습니다.

Android 스튜디오를 사용하여 앱에 서명하려면 다음 단계를 따르세요.

  1. 아직 Generate Signed Bundle or APK 대화상자가 열려 있지 않다면 Build > Generate Signed Bundle/APK를 클릭합니다.
  2. Generate Signed Bundle or APK 대화상자에서 Android App Bundle 또는 APK를 선택하고 Next를 클릭합니다.
  3. 드롭다운에서 모듈을 선택합니다.
  4. 키 저장소 경로와 키의 별칭을 지정하고 키 저장소 및 키 별칭의 비밀번호를 입력합니다. 아직 업로드 키 저장소와 키가 준비되지 않았다면 먼저 업로드 키와 키 저장소를 생성한 다음 돌아와서 이 단계를 완료합니다.

    그림 3. 업로드 키로 앱에 서명

  5. 다음을 클릭합니다.

  6. 다음 창에서(그림 4 참고) 서명된 앱의 대상 폴더를 선택하고 빌드 유형을 선택한 다음 적용되는 경우 제품 버전을 선택합니다.

  7. APK를 빌드하고 서명하는 경우 앱에서 지원하려는 서명 버전을 선택해야 합니다. 자세한 내용은 앱 서명 체계를 참고하세요.

  8. 만들기를 클릭합니다.

그림 5. 팝업에서 링크를 클릭하여 App Bundle을 분석하거나 검색합니다.

Android 스튜디오가 서명된 앱 빌드를 마치고 나면 팝업 알림의 적절한 옵션을 클릭하여 앱을 검색하거나 분석할 수 있습니다(그림 5 참고).

이제 앱을 Play 앱 서명에 등록하고 출시를 위해 앱을 업로드할 준비가 되었습니다. 앱 게시 과정을 잘 모르겠다면 출시 개요를 참고하세요. 잘 알고 있다면 Play Console에 앱을 업로드하는 방법에 관한 페이지로 계속 진행하세요.

Play 앱 서명 사용

이 페이지의 앞부분에서 설명한 것처럼 Play 앱 서명을 구성해야 Google Play를 통해 배포할 앱에 서명할 수 있습니다. 단, 2021년 8월 이전에 만들어진 앱은 예외로 자체 서명 APK를 계속 배포할 수 있습니다. 밟아야 할 단계는 앱이 아직 Google Play에 게시되지 않았는지 또는 앱이 이미 기존 앱 서명 키로 서명되어 2021년 8월 이전에 게시되었는지에 따라 다릅니다.

새 앱 구성

아직 Google Play에 게시되지 않은 앱의 서명을 구성하려면 다음 단계를 따르세요.

  1. 아직 업로드 키를 생성하지 않았다면 업로드 키를 생성하고 이 업로드 키로 앱에 서명합니다.
  2. Play Console에 로그인합니다.
  3. 버전을 준비 및 출시하기 위한 단계에 따라 새 버전을 생성합니다.
  4. 출시 트랙을 선택한 후 다음과 같이 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 앱 서명을 선택할 수 있습니다.

  1. Play Console에 로그인하여 앱으로 이동합니다.
  2. 왼쪽 메뉴에서 출시 > 설정 > 앱 서명을 클릭합니다.
  3. 해당하는 경우 서비스 약관을 검토하고 동의를 선택합니다.
  4. Google Play에 업로드하려는 서명 키를 가장 잘 설명한 옵션을 선택하고 표시되는 안내를 따릅니다. 예를 들어 서명 키에 Java 키 저장소를 사용하는 경우 Upload a new app signing key from Java Keystore를 선택하고 안내에 따라 PEPK 도구를 다운로드하여 실행한 다음 생성된 파일을 암호화된 키와 함께 업로드합니다.
  5. 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 스튜디오를 사용하여 서명 구성을 생성하고 이 구성을 출시 빌드 유형에 할당하려면 다음 단계를 완료하세요.

  1. Project 창에서 앱을 마우스 오른쪽 버튼으로 클릭하고 Open Module Settings를 클릭합니다.
  2. 왼쪽 패널의 Modules 아래에 있는 Project Structure 창에서 서명하려는 모듈을 클릭합니다.
  3. Signing 탭을 클릭한 후 Add