참고: 이 페이지에 설명된 기능은 현재 일부 Play 파트너에게만 제공됩니다.
Google Play의 자동 보호는 무단 수정 및 재배포의 형태로 무결성을 저해하는 행위로부터 앱과 게임을 보호하는 서비스입니다. 자동 보호는 데이터 연결 없이도 앱에서 작동합니다. Play Console에서 클릭 한 번으로 사용 설정할 수 있습니다. 아울러 테스트하기 전에 개발자의 작업이 필요하지 않으며 백엔드 서버 통합도 필요하지 않습니다.
운영 방식
자동 보호는 앱 코드에 런타임 검사를 추가하여 수정 및 재배포를 제한한 다음 고급 난독화 및 리버스 엔지니어링 방지 기술을 사용해 런타임 검사를 삭제하기 어렵게 합니다. 설치 프로그램 검사를 통과하지 못하면 사용자에게 Google Play에서 앱을 다운로드하라는 프롬프트가 표시됩니다. 수정 검사를 통과하지 못하면 앱이 실행되지 않습니다. 이렇게 하면 앱의 수정된 버전에 표시되는 유해한 콘텐츠로부터 사용자를 보호할 수 있습니다.
자동 보호는 다음을 목표로 설계되었습니다.
- 승인되지 않은 수정 방지: 자동 보호는 앱이 수정되지 않게 보호해 주기 때문에 결제 삭제, 광고 추가, 광고 소유자 ID 변경, 멀웨어 추가 등의 변경된 행동이 포함된 비공식 사본을 배포하기 어려워집니다.
- 유료 앱 불법 복제 방지: 자동 보호는 비공식적인 출처를 통해 수정되지 않은 Play 버전의 앱을 받은 사용자에게 Google Play에서 앱을 구매하라는 프롬프트를 표시함으로써 불법 복제를 방지합니다. 이 프롬프트는 선택사항이며, 자동 무결성 보호 구성 페이지에서 'Play를 통한 설치 요구'를 선택 해제하여 사용 중지할 수 있습니다.
- 공식 업데이트를 수신하는 사용자 증가: 자동 보호를 사용하면 수정되지 않은 Play 버전의 앱을 사이드로드한 사용자에게 앱을 Play 라이브러리에 추가하여 지속적인 앱 업데이트를 받으라는 프롬프트를 표시할 수 있습니다. 이 프롬프트는 선택사항이며, 자동 무결성 보호 구성 페이지에서 'Play를 통한 설치 요구'를 선택 해제하여 사용 중지할 수 있습니다.
자동 보호 설정하기
아래 단계에서는 자동 보호를 사용하기 위해 수행해야 하는 작업을 설명합니다. 섹션을 클릭하여 펼칩니다.
특정 앱에 자동 보호를 사용 설정하면 기기에 배포할 수 있는 버전을 만들 때마다 Google Play에서 자동으로 보호 기능을 추가합니다. 보호 기능을 사용하려면 Google Play에서 수정된 APK를 만들고 개발자를 대신하여 서명해야 하므로 개발자는 다음과 같은 조치를 취해야 합니다.
- Play 앱 서명 사용하기
- Android App Bundle로 게시
- 최소 API 수준 23 이상 타겟팅
다음 제약 조건을 고려해야 합니다.
- 자동 보호는 Android 6.0 Marshmallow(API 수준 23) 이상에서만 지원됩니다. Android M은 2015년에 출시되었으며, 2023년 기준으로 midSDKVersion를 버전 23 이상으로 타겟팅하면 활성 Android 기기의 97% 이상을 타겟팅할 수 있습니다.
- 자동 보호는 x86, x86_64, armeabi-v7a, arm64-v8a ABI를 지원합니다. 앱의 타겟팅된 ABI를 업데이트하려면 Gradle 설정을 업데이트합니다. 활성 Android 기기에서 사용하지 않는 다른 ABI는 앱의 가용성에 영향을 주지 않으면서 타겟팅에서 삭제될 수 있습니다.
- 자동 보호는 오프라인에서도 작동합니다. 하지만 기기의 Play 스토어 앱이 장시간 오프라인 상태인 경우, 'Play를 통한 설치 요구'를 사용 설정하려면 주기적으로 데이터를 연결해야 합니다.
- 앱에서 이미 Play 라이선스를 사용하고 있다면 'Google Play를 통한 설치 요구'를 사용 중지해야 합니다.
- 앱을 내부 앱 공유에 업로드할 때는 보호 기능이 적용되지 않습니다. 신뢰할 수 있는 팀 구성원에게만 내부 앱 공유 링크를 공유하고 보호되지 않은 버전은 외부에 공유하지 않도록 주의를 기울이세요.
- 무결성 보호에는 코드 수정이 포함되므로 자동 보호는 App Bundle의 코드 투명성과 호환되지 않습니다. 자동 보호가 사용 설정된 경우 코드 투명성을 사용해 업로드된 App Bundle은 거부됩니다.
- 인스턴트 환경은 보호되지 않습니다. 보호 기능을 사용하려면 출시 트랙의 App Bundle이 인스턴트 지원되지 않아야 합니다. 보호 대상인 App Bundle은 출시 트랙에 업로드하고, 인스턴트 지원 App Bundle은 보호되지 않는 인스턴트 전용 트랙에 업로드하는 것도 가능합니다.
버전 준비 및 출시 1단계에 설명된 것과 같이 버전을 만듭니다.
버전 준비 및 출시의 2단계에 설명된 대로 버전을 만들 때 보호 기능을 사용 설정할 수도 있고 개발자가 의도한 방식대로 사용자가 앱과 게임을 경험하도록 도와주는 무결성 및 서명 서비스가 포함된 앱 무결성 페이지(
테스트 및 출시
> 앱 무결성)에서 보호 기능을 사용 설정할 수도 있습니다.버전을 준비할 때 무결성 보호 또는 무결성 보호 관리라고 표시된 버튼이 표시됩니다. 그런 다음 '자동 보호'에서 예, 사용 설정합니다를 클릭하여 무결성 보호를 사용 설정할 수 있습니다. 그러면 Google Play에서 무단 변경 및 배포 관련 악용을 막기 위해 버전에 서명하고 무결성 보호를 추가합니다. 이는 자동 보호가 사용 설정되었다는 의미입니다.
버전 준비를 완료하고 변경사항을 저장합니다.
각 테스트 트랙을 사용하여 보호된 앱 버전을 테스트하고 사용자 환경이나 성능에 예상치 못한 영향을 미치지 않는지 확인하세요.
검토할 때 다음 작업을 포함하는 것이 좋습니다.
- 게임 출시를 테스트하면서 실행 시 비정상 종료가 발생하거나 시작 시간에 속도가 느려지지 않는지 확인합니다.
- 광고, 로깅, 소셜 통합, 인증 또는 권한 처리와 같은 Android 관련 기능과 같이 네이티브 코드(C/C++)를 Java로 다시 호출(자체 코드 또는 서드 파티 라이브러리)하는 시점을 테스트합니다.
테스트 프로세스 중에 문제가 발생하면 이전 버전에서 이미 사용되었을 이전 버전의 자동 보호로 되돌리거나 자동 보호를 사용 중지할 수 있습니다. 하지만 보호되지 않은 버전을 공개 트랙 또는 프로덕션으로 게시하는 것은 권장하지 않습니다.
개별 버전에서 무결성 보호를 사용 중지하려면 다음 단계를 따르세요.
- 버전을 준비할 때 무결성 보호 관리를 클릭합니다.
- '자동 보호'에서 이전 보호 또는 이 버전에 보호 사용 중지를 선택합니다.
- 변경사항을 저장합니다. 변경사항이 이 버전에 적용됩니다. 다음번에 출시 버전을 업로드하면 이 버전에는 가장 강력한 최신 버전의 보호 기능이 다시 적용됩니다.
준비되면 Play Console에서 프로덕션 트랙으로 버전을 출시하여 선택한 국가의 모든 Google Play 사용자가 보호된 앱을 사용하도록 설정할 수 있습니다.
사용자가 무결성 보호 대화상자를 통해 방문할 때 표시되는 스토어 등록정보 맞춤설정하기
자동 보호는 비공식적으로 앱을 받은 사용자에게 Google Play에서 앱을 다운로드하라는 프롬프트를 표시할 수 있습니다. 사용자가 대화상자를 탭하면 스토어 등록정보로 리디렉션되며, 설치(또는 구매 또는 업데이트) 버튼을 탭하면 Play에서 앱을 다운로드할 수 있습니다. 그러면 앱이 사용자의 Play 라이브러리에 추가됩니다.
무결성 보호 대화상자를 탭한 방문자에 맞게 앱 이름, 아이콘, 설명, 그래픽 저작물 등 스토어 등록정보 애셋을 맞춤설정할 수 있습니다. 사용자가 무결성 보호 대화상자를 통해 방문할 때 표시되는 스토어 등록정보를 맞춤설정하려면 다음 단계를 따르세요.
- Play Console을 열고 앱 무결성 페이지(
테스트 및 출시
> 앱 무결성)로 이동합니다. - 'Play Integrity API' 섹션으로 스크롤합니다.
- 설정을 클릭합니다.
- '스토어 등록정보 맞춤설정' 섹션으로 스크롤합니다.
- 등록정보 만들기를 클릭합니다.
- 맞춤 스토어 등록정보 만들기 페이지의 안내를 따르고 저장을 클릭합니다.
또는 맞춤 스토어 등록정보 페이지에서 직접 무결성 보호 대화상자를 위한 맞춤 스토어 등록정보를 만들 수 있습니다.
- Play Console을 열고 맞춤 스토어 등록정보 페이지(사용자 늘리기 > 맞춤 스토어 등록정보)로 이동합니다.
- 등록정보 만들기를 클릭하고, 새 등록정보를 만들지 또는 기존 등록정보를 복제할지 선택한 후 다음을 클릭합니다.
- '등록정보 세부정보' 섹션에서 공유 대상 그룹으로 스크롤합니다.
- URL 사용을 선택하고 텍스트 상자에 'playintegrity'를 입력합니다.
- 다른 세부정보를 모두 입력하고 저장을 클릭합니다.
도움말: URL 매개변수 'playintegrity'는 무결성 딥 링크용으로 예약된 특수 키워드이므로 맞춤 스토어 등록정보를 설정할 때 그대로 정확하게 입력해야 합니다.
권장사항
보호되지 않은 앱 버전을 출시하지 마세요
보호되지 않은 버전을 공개 트랙에 게시하거나 Google Play 외부의 채널을 통해 게시하는 경우 앱 보호가 더 이상 작동하지 않습니다. 앱의 무결성 보호를 유지하려면 앱의 보호된 버전만 공개 트랙 및 프로덕션 트랙에 게시해야 합니다.
여러 조작 방지 솔루션을 함께 사용할 때 주의할 점
자동 보호는 다른 런타임 조작 방지 솔루션과 호환되지 않을 수 있으며, 다른 솔루션과 함께 사용하려고 하면 사용자 문제가 발생하기도 합니다. 이미 앱에 Play 라이선스를 구현하고 있다면 'Google Play를 통한 설치 요구'를 사용 중지해야 합니다. 앱에서 다른 런타임 검사를 실행하는 경우 보호된 앱을 공개 트랙에 출시하기 전에 앱에 문제가 있는지 철저히 테스트해야 합니다.
보호되는 앱 테스트하기
Google Play는 내부 테스트, 비공개, 공개, 프로덕션 등 모든 트랙에서 자동으로 보호된 빌드를 제공합니다. 이러한 버전도 평소와 같이 철저히 테스트해야 합니다.
앱의 빌드를 내부 앱 공유에 직접 업로드하면 Google Play에서 보호 기능을 추가하지 않습니다. 이는 개발자가 내부 앱 공유를 사용하여 디버그 빌드 및 다른 유사한 빌드를 업로드할 수 있게 하기 위함입니다.
App Bundle 탐색기에서 보호된 앱 버전의 내부 앱 공유 링크에 액세스하면 빌드가 Google Play에서 처리한 상태 그대로 공유됩니다. 앱 버전이 테스트 트랙에 업로드되어 있고 보호 기능이 적용되는 경우 App Bundle 탐색기의 내부 앱 공유 링크에서 보호된 버전을 제공하세요. App Bundle 탐색기의 세부정보 탭에서 보호 상태를 확인할 수 있습니다.
비정상 종료 모니터링하기
앱에 보호 기능이 적용된 결과로 비정상 종료 횟수가 증가할 수 있습니다. 이는 자동 보호가 의도한 대로 작동함을 의미할 가능성이 높습니다. 공격자가 앱을 수정하지 못할 경우 런타임 검사가 앱 실행을 중단시키며, 주로 앱이 비정상 종료됩니다.
Google Play에서 기인하지 않는 비정상 종료는 Android vitals 안정성 측정항목에 영향을 미치지 않습니다. Crashlytics와 같은 다른 도구를 사용하여 비정상 종료를 분석하고 있으며 설치 소스별로 필터링할 패키지 이름이 필요한 경우 Google Play 스토어의 패키지 이름은 'com.android.vending'입니다.
비정상 종료가 증가하는 상황에 대해 우려가 된다면 최대한 구체적인 세부정보를 Google에 신고해 주세요. 팀에서 조사하겠습니다. 비정상 종료가 보호 기능과 관련된 것으로 판단되면 Google에서 신고에 대한 답변을 제공합니다.
앱의 손상된 버전 신고
손상된 버전이란 앱이 수정되었거나 또는 개발자가 Google Play 설치를 요구했지만 Google Play 외부에서 설치된 경우에도 여전히 작동하는 버전의 앱을 말합니다.
앱의 손상된 버전을 확인한 경우 Google에 신고해 주시기 바랍니다.
조작 방지 개선
익명 처리된 환경 및 성능 데이터와 같은 앱 원격 분석을 Google Play와 공유하면 조작 방지 기능의 복원력과 성능을 개선하는 데 도움이 됩니다. 자동 보호 설정 페이지(
테스트 및 출시
> 앱 무결성 및 자동 보호로 스크롤)에서 'Google과 앱 원격 분석 공유'를 사용 중지하여 앱 원격 분석 공유를 선택 해제할 수 있습니다. Google 서비스 개발에 데이터가 사용되는 방식에 대해 자세히 알아보세요.관련 콘텐츠
- 자동 보호에 관한 동영상을 시청하세요.
- Play Console의 무결성 및 서명 서비스를 알아보세요.
- Android 개발자 사이트의 무결성 및 서명 서비스를 알아보세요.