The Android Developer Challenge is back! Submit your idea before December 2.

앱 서명

Android는 모든 APK가 기기에 설치되거나 업데이트되기 전에 인증서로 디지털 서명을 하도록 요구합니다. Android App Bundle을 사용하려면 Play Console에 App Bundle을 업로드하기 전에 App Bundle에만 서명하면 되고, 나머지는 Google Play 앱 서명에서 처리합니다. Google Play 및 다른 앱 스토어에 업로드하는 앱에 직접 서명할 수도 있습니다.

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

다음은 새 앱에 서명하고 새 앱을 Google Play에 게시하기 위해 따라야 하는 단계의 대략적인 개요입니다.

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

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

  1. 서명 키앱에 서명한 다음 서명 키를 암호화하고 내보내는 옵션을 선택합니다.
  2. 앱 서명 키를 업로드하여 Google Play 앱 서명을 선택합니다.
  3. (권장) 향후 앱 업데이트를 위해 업로드 인증서를 생성하고 등록합니다.
  4. Google Play에 앱을 업로드합니다.
  5. 앱 버전을 준비 및 출시합니다.

이 페이지에서는 앱을 다른 앱 스토어에 업로드할 때 자체 키를 관리하는 방법도 알아봅니다. Android 스튜디오를 사용하지 않거나 명령줄에서 앱에 서명하려는 경우 apksigner 사용 방법을 알아보세요.

Google Play 앱 서명

Google은 Google Play 앱 서명으로 개발자 대신 앱의 서명 키를 관리하고 보호하면서 이 키를 사용하여 배포할 APK에 서명합니다. App Bundle은 APK를 Google Play 스토어에 빌드하고 서명하는 것을 지연시키므로 App Bundle을 업로드하기 전에 Google Play 앱 서명을 선택해야 합니다. 이렇게 하면 다음과 같은 이점이 있습니다.

  • Android App Bundle을 사용하고 Google Play의 Dynamic Delivery를 지원할 수 있습니다. Android App Bundle을 사용하면 앱 크기가 훨씬 작아지고 릴리스가 더 간단해지며 동적 기능과 인스턴트 환경을 구현할 수 있습니다.
  • 서명 키의 보안을 강화하고 별도의 업로드 키를 사용하여 Google Play에 업로드하는 App Bundle에 서명할 수 있습니다.

Google Play 앱 서명은 앱 서명 키업로드 키라는 두 가지 키를 사용합니다. 키 및 키 저장소 섹션에서 자세한 설명을 참조하세요. 업로드 키는 개발자가 보관하다가 앱을 Google Play 스토어에 업로드하기 위해 서명할 때 사용합니다. 별도의 업로드 키를 사용하면 키가 훼손되었거나 분실했을 때 업로드 키 재설정을 요청할 수 있습니다. 반면 Google Play 앱 서명을 선택하지 않은 상태에서 앱 서명 키를 분실하면 앱을 업데이트할 수 없습니다.

게시할 준비가 되면 Android 스튜디오를 사용하여 앱에 서명하고 Google Play에 업로드합니다. 앱에 서명한 키가 앱의 업로드 키가 됩니다. Google이 업로드 인증서를 사용하여 신원을 확인하고, 배포를 위해 앱 서명 키로 APK에 서명합니다(그림 1 참조).

아직 앱 서명 키가 없는 경우 등록 프로세스 동안 하나를 생성할 수 있습니다.

그림 1. Google Play 앱 서명으로 앱에 서명

서명 키는 Google에서 자체 키를 저장하는 데 사용하는 인프라와 동일한 인프라에 저장되며, 이 인프라는 Google의 키 관리 서비스로 보호됩니다. Google의 기술 인프라에 관해 자세히 알아보려면 Google Cloud 보안 백서를 참조하세요.

Google Play 앱 서명 사용 시 업로드 키를 분실하거나 키가 손상된 경우 Google에 연락하여 이전 업로드 키를 취소하고 새 키를 다시 생성할 수 있습니다. 앱 서명 키는 Google에 의해 보호되므로, 업로드 키를 변경하더라도 원래 앱 업데이트로 새로운 앱 버전을 계속 업로드할 수 있습니다. 자세히 알아보려면 분실했거나 도용된 비공개 업로드 키 재설정을 참조하세요.

다음 섹션에서는 앱 서명 키 및 보안과 관련된 몇 가지 중요한 용어와 개념을 설명합니다. 다음 섹션을 건너뛰고 Google Play 스토어에 업로드하기 위해 앱을 준비하는 방법을 알아보려면 출시할 앱에 서명을 참조하세요.

키, 인증서, 키 저장소

앱에 서명할 때는 아래에서 설명하는 개념 및 정의를 알아야 합니다.

인증서

디지털 인증서 또는 ID 인증서라고 알려진 공개 키 인증서(.der 또는 .pem 파일)에는 공개/비공개 키 쌍의 공개 키와 해당 비공개 키를 보유하고 있는 소유자를 식별하는 기타 메타데이터(예: 이름, 위치)가 포함되어 있습니다.

앱에 서명할 때 서명 도구가 앱에 인증서를 첨부합니다. 인증서는 개발자와 해당 비공개 키에 APK 또는 App Bundle을 연결합니다. 이렇게 하면 Android가 나중에 원래 게시자가 제공한 신뢰할 수 있는 업데이트인지 확인할 수 있습니다. 이 인증서를 만드는 데 사용되는 키를 앱 서명 키라고 합니다.

Play Console의 앱 서명 페이지에서 앱 서명 키의 인증서와 업로드 키를 다운로드하여 API 제공업체에 키를 등록할 수 있습니다. 인증서는 다른 사람과 공유할 수 있으며 비공개 키는 공개 키 인증서에 포함되지 않습니다.

모든 앱은 사용자가 새 버전을 앱 업데이트로 설치할 수 있도록 전체 기간 동안 같은 인증서를 사용해야 합니다. 앱 수명 동안 모든 앱에 동일한 인증서를 사용함으로써 얻을 수 있는 이점에 대한 자세한 내용은 아래의 서명 고려 사항을 참조하세요.

인증서 지문은 짧고 고유한 인증서 표현식으로 API 제공업체가 패키지 이름과 함께 요청하는 경우가 많습니다. 앱을 제공업체 서비스에 등록하는 데 사용됩니다. 업로드 및 앱 서명 인증서의 MD5, SHA-1 및 SHA-256 지문은 Play Console의 앱 서명 페이지에서 찾을 수 있습니다. 같은 페이지에서 원본 인증서(.der)를 다운로드함으로써 다른 지문을 계산할 수도 있습니다.

알고 있어야 하는 여러 유형의 키와 키 저장소는 다음과 같습니다.

  • 앱 서명 키: 사용자의 기기에 설치된 APK에 서명하는 데 사용하는 키입니다. Android의 보안 업데이트 모델에 포함된 서명 키는 앱의 수명 주기 동안 변경되지 않습니다. 앱 서명 키는 공개해서는 안 되며 반드시 기밀로 유지해야 합니다. 하지만 앱 서명 키를 사용하여 생성한 인증서는 공유할 수 있습니다.
  • 업로드 키: Google Play 앱 서명에 업로드하기 전에 App Bundle이나 APK에 서명하는 데 사용하는 키입니다. 업로드 키는 반드시 기밀로 유지해야 합니다. 하지만 업로드 키를 사용하여 생성된 인증서는 공유할 수 있습니다. 다음 방법 중 하나로 업로드 키를 생성할 수 있습니다.

    • Google에서 앱 서명 키를 대신 생성하도록 선택할 경우 출시할 앱에 서명할 때 사용하는 키가 업로드 키로 지정됩니다.
    • 신규 또는 기존 앱을 선택할 때 Google에 앱 서명 키를 제공할 경우 보안 강화를 위해 선택 단계에서 또는 나중에 새로운 업로드 키를 생성할 수 있습니다.
    • 새로운 업로드 키를 생성하지 않으면 앱 서명 키를 업로드 키로 계속 사용하여 각 릴리스에 서명하게 됩니다.

    도움말: 키를 안전하게 보관하려면 앱 서명 키와 별도로 업로드 키를 만드는 것이 좋습니다.

  • Java keystore(.jks 또는 .keystore): 인증서와 비공개 키의 저장소 역할을 하는 바이너리 파일입니다.

  • PEPK(Play Encrypt Private Key) 도구: 이 도구를 사용하여 Java Keystore에서 비공개 키를 내보내고 암호화하여 Google Play로 전송할 수 있습니다. Google에서 사용할 앱 서명 키를 제공할 때 Export and upload a key from a Java keystore 옵션을 선택하고 안내에 따라 도구를 다운로드 및 사용하세요. 또는 Export and upload a key (not using a Java keystore) 옵션을 선택하여 PEPK 도구의 오픈 소스 코드를 다운로드, 검토 및 사용하세요.

디버그 빌드 서명

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에 앱을 게시하면 Google Play 앱 서명도 선택해야 합니다. 이 섹션에서는 출시할 앱에 서명하고 Google Play 앱 서명을 선택하는 방법을 설명합니다.

업로드 키 및 키 저장소 생성

아직 Google Play 앱 서명을 선택할 때 사용할 업로드 키가 없는 경우 다음 단계에 따라 Android 스튜디오에서 하나를 생성할 수 있습니다.

  1. 메뉴 바에서 Build > 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: 키 저장소를 생성할 위치를 선택합니다.
    • Password: 키 저장소에 사용할 보안 암호를 생성하고 확인합니다.
    • Alias: 키를 식별할 수 있는 이름을 입력합니다.
    • Password: 키에 사용할 보안 암호를 생성하고 확인합니다. 이 암호는 키 저장소용으로 선택한 암호와 달라야 합니다.
    • Validity (years): 키가 유효하게 유지되는 기간(년)을 설정합니다. 키가 최소 25년 동안 유효하게 유지되어야 앱 수명 동안 같은 키로 앱 업데이트에 서명할 수 있습니다.
    • Certificate: 인증서에 사용할 본인 관련 정보를 입력합니다. 이 정보는 앱에 표시되지 않지만 APK의 일부로 인증서에 포함됩니다.
  6. 양식을 작성하고 나면 OK를 클릭합니다.

  7. 업로드 키를 사용하여 앱을 빌드하고 서명하려면 다음 섹션에서 업로드 키로 앱에 서명하는 방법을 참조합니다. 키와 키 저장소만 생성하려면 Cancel을 클릭합니다.

비공개 키로 앱에 서명

이미 업로드 키가 있다면 이 키를 사용하여 앱에 서명하세요. 앱이 이미 기존 앱 서명 키로 서명되어 Google Play 스토어에 게시되어 있다면 이 키를 사용하여 앱에 서명하고 암호화한 후 내보내서 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. 기존 앱 서명 키로 App Bundle에 서명하고 나중에 Google Play 앱 서명에 앱을 등록하려면 Export encrypted key 옆의 체크박스를 선택하고 경로를 지정하여 서명 키를 암호화된 *.pepk 파일로 저장합니다. 그런 다음 암호화된 앱 서명 키를 사용하여 Google Play 앱 서명에 기존 앱을 등록합니다.

  6. Next를 클릭합니다.

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

  8. APK를 빌드하고 서명하는 경우 앱에서 지원하려는 서명 버전을 선택해야 합니다. 자세히 알아보려면 APK Signature Scheme v2를 참조하세요.

  9. Finish를 클릭합니다.

    그림 4. 선택한 제품 버전에 대하여 앱의 서명된 버전 생성

그림 5. 팝업에서 링크를 클릭하여 App Bundle을 분석 또는 검색하거나 내보낸 서명 키 검색

Android 스튜디오가 서명된 앱 빌드를 마치고 나면 팝업 알림의 적절한 옵션을 클릭하여 앱을 검색하거나 분석할 수 있습니다. 서명 키를 내보내는 옵션을 선택한 경우, 팝업의 오른쪽 하단 드롭다운 화살표를 클릭하여 펼친 다음 그림 5와 같이 Show Exported Key File을 클릭하면 서명 키로 빠르게 이동할 수 있습니다.

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

Google Play 앱 서명 선택

이 페이지의 앞부분에서 설명한 것처럼 Google Play 앱 서명은 Google Play를 통해 앱을 배포하기 위해 권장되는 앱 서명 방식입니다. 앱을 등록하기 위해 실행해야 하는 단계는 앱의 Google Play 출시 여부나 기존 앱 서명 키로 앱을 서명 및 게시했는지 여부에 따라 다릅니다.

새로운 앱 선택

아직 Google Play에 게시되지 않은 앱을 선택하려면 다음 단계를 따르세요.

  1. 아직 업로드 키를 생성하지 않았다면 업로드 키를 생성하고 이 업로드 키로 앱에 서명합니다.
  2. Play Console에 로그인합니다.
  3. 버전을 준비 및 출시하기 위한 단계에 따라 새 버전을 생성합니다.
  4. 출시 트랙을 선택한 후 Let Google create and manage my app signing key 아래에서 앱 서명을 설정합니다.
    • Google Play에서 대신 앱 서명 키를 생성하여 앱에 서명하는 데 사용하게 하려면 Continue를 선택합니다. 첫 번째 버전에 서명할 때 사용한 키가 업로드 키가 되며 차후 버전에 서명할 때도 이 키를 사용해야 합니다.
    • 개발자 계정에서 서로 다른 앱에 동일한 키를 사용하려면 Advanced options > Use the same key as another app in this account를 선택하고 앱을 선택한 다음 Continue를 클릭합니다.
    • 앱에 서명할 때 Google이 사용할 서명 키를 제공하려면 Advanced Option을 선택하고 비공개 키와 공개 인증서를 안전하게 업로드하는 옵션 중 하나를 선택합니다.

Android App Bundles and APKs to add 섹션에서 Browse files를 클릭하여 업로드 키로 서명한 앱을 찾아 업로드합니다. 앱 출시에 대한 자세한 내용은 버전 준비 및 출시를 참조하세요. Google Play 앱 서명에 앱을 등록한 후 출시하면 Google Play에서 출시한 앱 서명 키를 생성하여 관리합니다. Google Play에 향후 앱 업데이트를 업로드하기 전에 앱의 업로드 키를 사용하여 업데이트에 서명하세요.

앱의 새 업로드 키를 생성해야 하는 경우 분실했거나 도용된 비공개 업로드 키 재설정 방법을 안내하는 섹션으로 이동하세요.

기존 앱 선택

기존 앱 서명 키를 사용하여 이미 Google Play에 게시한 앱을 업데이트하는 경우 다음과 같은 방법으로 Google Play 앱 서명에 등록할 수 있습니다.

  1. 기존 앱 서명 키로 앱에 서명하고 Export encrypted key 옆의 체크박스를 선택하여 서명 키를 암호화된 *.pepk 파일로 저장합니다. 이 파일은 이후 단계에 필요합니다.
  2. Play Console에 로그인하여 앱으로 이동합니다.
  3. 왼쪽 메뉴에서 Release management > App signing을 클릭합니다.
  4. 해당하는 경우 서비스 약관을 검토하고 Accept를 선택합니다.
  5. Google Play에 업로드하려는 서명 키에 해당하는 옵션을 선택하고 표시되는 안내를 따릅니다. 예를 들어 이 페이지에서 설명한 것처럼 Android 스튜디오를 사용하여 앱 서명 키를 내보낸 경우, Upload a key exported from Android Studio를 선택하고 *.pepk 키 파일을 업로드합니다.
  6. Enroll을 클릭합니다.

이제 앱의 서명 및 업로드 인증서를 자세히 설명하는 페이지가 표시됩니다. 이제 Google Play는 사용자에게 앱을 배포할 때 기존 키로 앱에 서명합니다. 하지만 Google Play 앱 서명의 가장 중요한 장점은 Google Play에 업로드하는 아티팩트에 서명할 때 사용하는 키와 Google Play가 사용자에게 앱을 배포할 때 앱 서명에 사용하는 키를 구분한다는 것입니다. 그러므로 다음 섹션의 단계를 따라 별도의 업로드 키를 생성하고 등록해 보세요.

업로드 인증서 생성 및 등록

업로드 키로 서명하지 않은 앱을 게시하면 Google Play Console에서 앱의 향후 업데이트를 위해 키를 등록할 수 있는 옵션을 제공합니다. 이는 선택사항이지만 Google Play가 사용자에게 앱을 배포할 때 사용하는 것과 다른 키로 앱을 게시하는 것이 좋습니다. 이렇게 하면 Google에서 서명 키를 안전하게 보호하며, 개발자는 분실했거나 도용된 비공개 업로드 키를 재설정할 수 있습니다. 이 섹션에서는 업로드 키를 생성하고 여기에서 인증서를 업로드하며 향후 앱 업데이트를 위해 Google Play로 인증서를 등록하는 방법을 설명합니다.

다음과 같은 경우 Play Console에서 업로드 인증서를 등록할 수 있는 옵션이 표시됩니다.

  • 서명 키로 서명한 새 앱을 게시하고 Google Play 앱 서명에 등록하는 경우
  • 이미 Google Play 앱 서명에 등록되었지만 자체 서명 키로 등록된 기존 앱을 게시할 준비가 된 경우

이미 Google Play 앱 서명에 등록되어 있는 기존 앱의 업데이트를 게시하지 않고 업로드 인증서를 등록하려면 아래 단계를 완료하고 분실했거나 도용된 비공개 업로드 키 재설정 방법을 안내하는 섹션으로 진행하세요.

아직 업로드 키 및 키 저장소를 생성하지 않았다면 업로드 키 및 키 저장소를 생성하세요.

업로드 키와 키 저장소를 생성한 후 다음 명령어로 keytool을 사용하여 업로드 키에서 공개 인증서를 생성해야 합니다.

    $ keytool -export -rfc
      -keystore your-upload-keystore.jks
      -alias upload-alias
      -file output_upload_certificate.pem
    

이제 업로드 인증서가 생성되었으므로 Play Console에 요청이 표시되면 Google로 등록하거나 아래 섹션을 참조하여 Google Play 지원팀을 통해 등록하세요.

앱 서명 키 업그레이드

기존 앱 서명 키를 변경해야 하는 경우도 있습니다. 예를 들면 암호화가 더 강력한 키가 필요하거나 서명 키가 도용될 수 있습니다. 하지만 업데이트가 동일한 서명 키로 서명된 경우에만 사용자가 앱을 업데이트할 수 있으므로 이미 게시된 앱의 서명 키를 변경하는 것은 어렵습니다.

앱을 Google Play에 게시하면 Play Console을 통해 게시한 앱의 서명 키를 업그레이드할 수 있습니다. 새 키는 신규 설치 및 앱 업데이트에 서명할 때 사용되며, 기존 앱 서명 키는 키를 업그레이드하기 전에 앱을 설치한 사용자가 업데이트에 서명하는 데 사용됩니다.

자세한 내용은 신규 설치에 사용되는 앱 서명 키 업그레이드를 참조하세요.

분실했거나 도용된 비공개 업로드 키 재설정

비공개 업로드 키를 분실했거나 도용당한 경우 새 키를 만들고 Google Play 지원팀에 연락하여 키를 재설정할 수 있습니다.

앱에 자동으로 서명하도록 빌드 프로세스 구성

Android 스튜디오에서 서명 구성을 생성하고 이 구성을 release 빌드 유형에 할당하여 빌드 프로세스 중에 앱의 릴리스 버전에 자동으로 서명하도록 프로젝트를 구성할 수 있습니다. 서명 구성은 키 저장소 위치, 키 저장소 암호, 키 별칭 및 키 암호로 구성됩니다. Android 스튜디오를 사용하여 서명 구성을 생성하고 이 구성을 버전 빌드 유형에 할당하려면 다음 단계를 완료하세요.

  1. Project 창에서 앱을 마우스 오른쪽 버튼으로 클릭하고 Open Module Settings를 클릭합니다.
  2. 왼쪽 패널의 Modules 아래에 있는 Project Structure 창에서 서명하려는 모듈을 클릭합니다.
  3. Signing 탭을 클릭한 후 Add 를 클릭합니다.
  4. 키 저장소 파일을 선택하고 이 서명 구성의 이름을 입력한 다음(두 개 이상 생성할 수 있으므로) 필수 정보를 입력합니다.

    그림 7. 새로운 서명 구성을 생성할 수 있는 창

  5. Build Types 탭을 클릭합니다.
  6. release 빌드를 클릭합니다.
  7. Signing Config에서 방금 생성한 서명 구성을 선택합니다.

    그림 8. Android 스튜디오에서 서명 구성 선택

  8. OK를 클릭합니다.

이제 Android 스튜디오에서 Build > Build Bundle(s) / APK(s) 아래의 옵션을 선택하여 release 빌드 유형을 빌드할 때마다 IDE가 자동으로 앱에 서명하며, 이때 개발자가 지정한 서명 구성을 사용합니다. 서명된 APK 또는 App Bundle은 빌드하는 모듈의 프로젝트 디렉터리에 있는 build/outputs/ 디렉터리에서 찾을 수 있습니다.

서명 구성을 생성하면 서명 정보가 Gradle 빌드 파일에 일반 텍스트로 포함됩니다. 팀으로 작업하거나 코드를 공개적으로 공유하는 경우에는 빌드 파일에서 서명 정보를 삭제하고 별도로 저장하여 서명 정보를 안전하게 보호해야 합니다. 빌드 파일에서 서명 정보를 삭제하는 방법에 대한 자세한 내용은 빌드 파일에서 서명 정보 삭제에서 확인할 수 있습니다. 서명 정보를 안전하게 보호하는 방법에 대한 자세한 내용은 키 보호를 참조하세요.

각 제품 버전에 별도로 서명

앱이 제품 버전을 사용하고 각 제품 버전에 별도로 서명하려는 경우 버전별로 추가 서명 구성을 생성하여 할당할 수 있습니다.

  1. Project 창에서 앱을 마우스 오른쪽 버튼으로 클릭하고 Open Module Settings를 클릭합니다.
  2. 왼쪽 패널의 Modules 아래에 있는 Project Structure 창에서 서명하려는 모듈을 클릭합니다.
  3. Signing 탭을 클릭한 후 Add 를 클릭합니다.
  4. 키 저장소 파일을 선택하고 이 서명 구성의 이름을 입력한 다음(두 개 이상 생성할 수 있으므로) 필수 정보를 입력합니다.

    그림 10. 새로운 서명 구성을 생성할 수 있는 창

  5. 모든 서명 구성을 생성할 때까지 필요에 따라 3단계와 4단계를 반복합니다.
  6. Flavors 탭을 클릭합니다.
  7. 구성할 버전을 클릭한 후 Signing Config 드롭다운 메뉴에서 적합한 서명 구성을 선택합니다.

    그림 11. 제품 버전별로 서명 설정 구성

    추가 제품 버전을 구성하려면 이 단계를 반복합니다.

  8. OK를 클릭합니다.

Gradle 구성 파일에서 서명 설정을 지정할 수도 있습니다. 자세한 내용은 서명 설정 구성을 참조하세요.

서명 키 관리

Google Play 앱 서명에 등록하지 않고 앱 서명 키와 키 저장소를 관리할 수 있습니다. 이 경우 개발자가 이 키와 키 저장소를 보호해야 합니다. 또한 앱은 Android App Bundles와 Google Play의 Dynamic Delivery를 지원하지 않습니다.

서명 키와 키 저장소를 생성할 준비가 완료되면 먼저 키 저장소에 사용할 강력한 암호를 선택하고 키 저장소에 저장된 각 비공개 키에 별도의 강력한 암호를 선택해야 합니다. 키 저장소는 안전하고 보안이 유지되는 장소에 보관해야 합니다. 앱 서명 키를 분실하거나 도용당한 경우 Google이 대신 앱 서명 키를 복원할 수 없으며, 원래 앱 업데이트로 새로운 앱 버전을 사용자에게 출시할 수 없습니다. 자세한 내용은 아래의 키 보호를 참조하세요.

앱 서명 키와 키 저장소를 관리하는 경우, APK에 서명할 때 앱 서명 키를 사용하여 로컬로 서명하고 이 서명된 APK를 Google Play 스토어에 직접 업로드하여 배포합니다(그림 10 참조).

그림 12. 앱 서명 키를 관리하는 경우 앱에 서명

Google Play 앱 서명을 사용하는 경우, Google은 앱이 제대로 서명되었는지, 앱 수명 기간 동안 업데이트를 받을 수 있는지 확인합니다. 하지만 앱 서명 키를 직접 관리하기로 했다면 다음과 같은 몇 가지 사항을 고려해야 합니다.

서명 고려 사항

앱은 앱의 예상 수명 동안 같은 인증서로 서명해야 합니다. 그렇게 해야 하는 이유는 다음과 같습니다.

  • 앱 업그레이드: 시스템이 앱에 업데이트를 설치할 때 기존 버전의 인증서와 새 버전의 인증서를 비교합니다. 시스템은 인증서가 일치하면 업데이트를 허용합니다. 다른 인증서로 새 버전에 서명하는 경우 이 앱에 다른 패키지 이름을 할당해야 합니다. 이 경우, 사용자는 완전히 새로운 앱으로 새 버전을 설치합니다.
  • 앱 모듈성: Android는 앱이 요청할 경우 같은 인증서로 서명된 APK가 같은 프로세스에서 실행되도록 허용합니다. 그리고 시스템은 이러한 APK를 단일 앱으로 취급합니다. 이렇게 하면 모듈로 앱을 배포할 수 있고, 사용자는 각 모듈을 독립적으로 업데이트할 수 있습니다.
  • 권한을 통한 코드/데이터 공유: Android는 서명 기반의 권한 시행을 제공합니다. 그러면 앱이 특정 인증서로 서명된 다른 앱에 기능을 노출시킬 수 있습니다. 같은 인증서로 여러 APK에 서명하고 서명 기반 권한 검사를 사용하면 앱이 코드와 데이터를 안전하게 공유할 수 있습니다.

앱 업그레이드를 지원할 계획이라면 앱 서명 키의 유효 기간이 앱의 예상 수명보다 길게 설정되었는지 확인하세요. 키의 유효 기간은 25년 이상이 권장됩니다. 키의 유효 기간이 만료되면 사용자가 더 이상 앱의 새 버전으로 원활하게 업그레이드할 수 없습니다.

Google Play에 앱을 게시할 계획이라면 앱에 서명하는 데 사용하는 키의 유효 기간이 2033년 10월 22일 이후에 종료되어야 합니다. Google Play는 새 버전이 출시될 때 사용자가 앱을 원활하게 업그레이드할 수 있도록 하기 위해 이 요구사항을 시행하고 있습니다.

키 보호

Google Play 앱 서명을 선택하는 대신 앱 서명 키와 키 저장소를 직접 관리하고 보호하려면 개발자와 사용자 모두를 위해 앱 서명 키를 안전하게 보호해야 합니다. 다른 사람이 내 키를 사용할 수 있도록 허용하거나 키 저장소와 암호를 제삼자가 찾아서 사용할 수 있는 안전하지 않은 장소에 보관할 경우 작성자의 신원이 도용되고 사용자의 신뢰가 손상될 수 있습니다.

제삼자가 개발자 모르게 또는 개발자의 허가를 받지 않고 키를 취할 수 있는 경우 제삼자가 진짜 앱을 악의적으로 대체하거나 손상시키는 앱에 서명한 후 이 앱을 배포할 수 있습니다. 제삼자는 개발자의 신원을 도용하여 다른 앱이나 시스템 자체를 공격하는 앱에 서명한 후 배포할 수 있고, 사용자 데이터를 손상시키거나 훔칠 수도 있습니다.

이후에 출시되는 모든 앱 버전에 서명할 때 비공개 키가 필요합니다. 키를 분실하거나 잘못 보관하면 기존 앱에 업데이트를 게시할 수 없게 됩니다. 이전에 생성한 키는 다시 생성할 수 없습니다.

개발자의 평판은 앱 서명 키가 만료될 때까지 항상 이 키를 제대로 보호하느냐에 달려 있습니다. 다음은 키를 안전하게 보호하는 몇 가지 팁입니다.

  • 키 저장소와 키에 강력한 암호를 선택하세요.
  • 비공개 키를 다른 사람에게 주거나 빌려주지 마세요. 승인되지 않은 사람에게 키 저장소와 키 암호를 알려주지 마세요.
  • 비공개 키가 있는 키 저장소 파일을 안전하고 보안이 유지되는 장소에 보관하세요.

일반적으로 키를 생성, 사용 및 저장할 때 일반 상식에 따라 예방 조치를 취하기만 해도 보안을 유지할 수 있습니다.

빌드 파일에서 서명 정보 삭제

서명 구성을 생성하면 Android 스튜디오가 서명 정보를 일반 텍스트로 모듈의 build.gradle 파일에 추가합니다. 팀으로 작업하거나 코드를 오픈 소스로 제공하는 경우 이러한 민감한 정보를 빌드 파일에서 제거하여 다른 사람들이 쉽게 액세스할 수 없도록 해야 합니다. 이렇게 하려면 보안 정보를 저장할 별도의 속성 파일을 생성하고 다음과 같이 빌드 파일에서 이 파일을 참조해야 합니다.

  1. 서명 구성을 생성한 후 하나 이상의 빌드 유형에 할당합니다. 이 안내에서는 위의 앱에 자동으로 서명하도록 빌드 프로세스 구성의 설명에 따라 release 빌드 유형에 대해 하나의 서명 구성을 설정했다고 가정합니다.
  2. 프로젝트의 루트 디렉터리에 keystore.properties라는 파일을 생성합니다. 이 파일에는 다음과 같이 서명 정보가 포함되어 있어야 합니다.
        storePassword=myStorePassword
        keyPassword=mykeyPassword
        keyAlias=myKeyAlias
        storeFile=myStoreFileLocation
        
  3. 모듈의 build.gradle 파일에서 android {} 블록 앞에 keystore.properties 파일을 로드하는 코드를 추가합니다.
        ...
    
        // Create a variable called keystorePropertiesFile, and initialize it to your
        // keystore.properties file, in the rootProject folder.
        def keystorePropertiesFile = rootProject.file("keystore.properties")
    
        // Initialize a new Properties() object called keystoreProperties.
        def keystoreProperties = new Properties()
    
        // Load your keystore.properties file into the keystoreProperties object.
        keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
        android {
            ...
        }
    
        

    참고: 다른 위치에 keystore.properties 파일을 저장할 수 있습니다. 예를 들어, 프로젝트의 루트 폴더 대신 모듈 폴더에 저장하거나 지속적 통합 도구를 사용하는 경우 빌드 서버에 저장할 수 있습니다. 이 경우, 실제 keystore.properties 파일의 위치를 사용하여 keystorePropertiesFile을 올바르게 초기화하도록 위의 코드를 수정해야 합니다.

  4. keystoreProperties['propertyName'] 구문을 사용하여 keystoreProperties에 저장된 속성을 참조할 수 있습니다. 다음 구문을 사용하여 keystoreProperties에 저장된 서명 정보를 참조하도록 모듈의 build.gradle 파일에서 signingConfigs 블록을 수정합니다.
        android {
            signingConfigs {
                config {
                    keyAlias keystoreProperties['keyAlias']
                    keyPassword keystoreProperties['keyPassword']
                    storeFile file(keystoreProperties['storeFile'])
                    storePassword keystoreProperties['storePassword']
                }
            }
            ...
          }
        
  5. Build Variants 도구 창을 열고 release 빌드 유형이 선택되었는지 확인합니다.
  6. Build > Build Bundle(s) / APK(s)에서 옵션을 선택하여 release 빌드의 APK 또는 App Bundle을 빌드합니다. 빌드 출력은 모듈의 build/outputs/ 디렉터리에서 확인할 수 있습니다.

빌드 파일에 더 이상 민감한 정보가 포함되어 있지 않으므로 빌드 파일을 소스 제어에 포함하거나 공유 코드베이스에 업로드할 수 있습니다. keystore.properties 파일을 안전하게 보호해야 합니다. 보호를 위해 소스 제어 시스템에서 이 파일을 삭제해야 할 수도 있습니다.