콘텐츠로 건너뛰기

자주 방문한 페이지

최근 방문한 페이지

navigation

권한 및 사용자 데이터

권한은 기기에 있는 중요한 정보를 보호하며, 여러분의 앱 작동에 꼭 필요한 정보에 액세스할 때만 권한을 사용해야 합니다.

이 문서에서는 여러분이 요청하는 권한에 대해 더 나은 정확한 결정을 내릴 수 있도록, Android에서 권한이 어떻게 작동하는지에 대해 개괄적으로 설명합니다. 이 문서의 정보는 사용 사례가 아니며, 기본 코드에 대한 복잡한 설명은 하지 않습니다.

권한 관리 방법에 대한 구체적인 권장 사항은 앱 권한 모범 사례를 참조하세요. Android에서 고유 식별자 사용에 대한 모범 사례는 고유 식별자 모범 사례를 참조하세요. 여러분의 코드에서 권한 사용 방법에 대한 자세한 내용은 시스템 권한 사용을 참조하세요.

소개

모든 Android 애플리케이션에는 매니페스트 파일이 있어야 하며, 이 파일은 앱에 대한 필수 정보를 Android 시스템에 표시합니다. Android 시스템에서는 또한 앱이 중요한 기기나 사용자 정보에 액세스하려는 경우 이 앱이 권한을 요청해야 하며, 이러한 요청은 앱 매니페스트에 미리 기록되어 있어야 합니다. 또한 중요한 정보에 액세스할 경우 사용자 동작에 영향을 미칠 수 있으므로, 해당 정보가 여러분의 앱 작동에 꼭 필요할 때만 권한 요청을 수행하는 것이 중요합니다.

권한 그룹

Android에서 권한은 permission groups로 구성되며, 기기의 성능 또는 기능에 관련된 권한을 구성하고 그룹화합니다. 이 시스템에서는 그룹 레벨에서 권한 요청이 처리되며, 단일 권한 그룹은 앱 매니페스트에서 여러 개의 권한 선언에 해당합니다. 예를 들어, SMS 그룹에는 READ_SMSRECEIVE_SMS 선언이 둘다 포함됩니다.

이러한 배치는 더 단순하고 사용자에게 더 많은 정보를 제공합니다. 그룹에 대한 액세스 권한이 앱에게 부여되면, 이 앱은 해당 그룹 내에서 API 호출을 사용할 수 있습니다. 자동 업데이트가 활성화된 사용자는 이미 해당 그룹에 대한 액세스 권한을 부여받았기 때문에 추가적인 권한을 요청받지 않습니다. 이런 방식으로 권한을 그룹화하면, 사용자가 복잡하고 기술적인 권한 요청에 휘둘리지 않고도 보다 정확하고 의미있는 선택을 수행할 수 있습니다.

또한 특정 API 호출에 액세스를 요청하는 경우나 권한을 넘어 콘텐츠 제공자에게 쿼리를 수행하는 경우, 특정 API 호출이 아닌 전체 그룹에 권한을 부여하는 요청이 사용자에게 표시됩니다. 예를 들어, 여러분이 WRITE_CALL_LOG 권한을 요청하면, PHONE 그룹(API 레벨 23 이상의 경우)에 대한 액세스 권한을 부여하라고 사용자에게 요청합니다. 이 요청은 READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIPPROCESS_OUTGOING_CALLS 권한과 모든 연결된 메서드로 구성됩니다.

권한 그룹화로 인해 발생하는 한 가지 결과는, 여러분의 앱 내에서 단일 API 호출을 수행할 경우 이 앱이 요청하는 권한의 수가 늘어날 수 있다는 것입니다.

  1. API 호출 →
  2. 특정한 권한 그룹 액세스 요청을 트리거 →
  3. 그룹의 모든 권한에 대한 액세스를 부여하는 성공적인 요청(자동 업데이트가 활성화된 경우) →
  4. 각 권한은 해당 권한 아래 있는 모든 API에 대한 액세스를 부여

또 다른 예로, 여러분의 애플리케이션이 다음과 같은 하나 이상의 TelephonyManager 메서드를 사용한다고 가정해 봅니다.

TelephonyManager.getDeviceId()
TelephonyManager.getSubscriberId()
TelephonyManager.getSimSerialNumber()
TelephonyManager.getLine1Number()
TelephonyManager.getVoiceMailNumber()

이 메서드를 사용하려면 READ_PHONE_STATE 권한을 앱 매니페스트에 선언해야 하며, 연결된 권한 그룹인 PHONE이 사용자에게 노출될 것입니다. 이것이 중요한 이유는, 관련 그룹과 이에 연결된 모든 권한 및 API 호출에 대해 권한을 부여하라고 사용자에게 요청하기 때문입니다(여러분이 요청하는 특정 API 호출에 대한 요청이 아님).

권한과 이에 연결된 권한 그룹 사이의 전체적인 매핑에 대해서는, 아래의 버전별 문서를 참조하세요.

권한 요청 및 앱 다운로드

통화 시에는 미디어 플레이어를 일시 중지시키고 통화가 끝나면 재생을 다시 시작하기 위해, 현재 저는 Android에서 READ_PHONE_STATE 권한을 사용 중입니다. 이 권한은 많은 사람들에게 두려움을 주는 듯 합니다...1

연구에 따르면, 동일한 앱(예: 기능, 브랜드 인지도 등이 동일한 앱) 중에서 권한 요청이 더 적은 앱이 다운로드가 더 많았습니다. 앱의 권한 사용에 따라 앱에 등급을 부여하는 공개적으로 이용 가능한 소스가 존재하며, 이 소스를 통해 사용자는 점수별로 관련 앱을 비교할 수 있습니다. 이러한 등급은 상당수의 최신 Android 앱에 존재하며, 사용자들이 관련 순위에 상당한 관심을 갖습니다.

한 연구에 따르면2, 기능은 동일하지만 권한 요청 집합은 다른 유사한 등급의 두 가지 비브랜드 앱을 사용자에게 보여주었을 때, 권한 요청이 더 적은 앱을 사용자가 설치할 가능성이 평균 3배나 더 높았습니다. 또한 비슷한 연구에 따르면3, 권한 요청이 더 적은 애플리케이션을 사용자가 선택할 가능성이 평균 1.7배나 더 높았습니다.

마지막으로, Play 앱의 유사한 범주 내에서도 권한 사용은 균등하게 분포되지 않습니다. 예를 들어, Play 스토어에서 권한을 요청하지 않은 아케이드 게임 앱의 39.3%가 사용자에게 노출되었지만, Phone 권한 그룹을 요청한 아케이드 게임은 앱의 1.5%만이 노출되었습니다(그림 1 참조).

그림 1. 아케이드 게임 범주에서 권한 그룹 용도의 분포.

여러분의 앱을 다른 유사한 앱과 비교하는 사용자는 이 앱이 해당 범주에 대해 비정상적인 권한 요청을 수행하고 있는지를 판단할 수도 있습니다(이 경우, 아케이드 게임 앱이 Phone 권한 그룹에 액세스하려고 시도). 이 결과, 사용자는 이러한 권한 요청이 없는 유사한 앱을 설치할 것입니다.4

권한 요청이 감소하는 추세

시간의 흐름에 따른 최근의 Play 스토어 앱 분석에 따르면, 상당수 개발자들은 자신의 앱을 최초로 게시한 후 권한을 줄이는 것으로 나타났으며, 오히려 자신이 어떤 권한 그룹을 선언할지에 대해 더욱 신경을 쓰고 있다는 것을 암시합니다.

그림 2. 인기있는 권한을 사용하는 개발자가 서서히 감소하고 있음.

그림 2의 그래프는 이러한 추세를 보여줍니다. Play 스토어에서 가장 인기있는 세 가지 권한(예: READ_PHONE_STATE, ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION) 중 하나를 요청하는 개발자 앱의 평균 비율이 서서히 감소하고 있습니다. 이 결과는 사용자 동작에 반응하여 앱에 요청되는 권한을 개발자가 줄이고 있음을 나타냅니다.

결론적으로, 중요한 정보에 대한 액세스를 최소화하며 동일한 기능을 사용자에게 제공하는 것이 더 많은 앱 다운로드로 이어집니다. 이를 실현하기 위한 구체적인 권장 사항은 애플리케이션 권한 모범 사례를 참조하세요.

참조

[1] Developer quote on StackOverflow. (소스)

[2] Using Personal Examples to Improve Risk Communication for Security and Privacy Decisions, by M. Harbach, M. Hettig, S. Weber, and M. Smith. In Proceedings of ACM CHI 2014.

[3] Modeling Users’ Mobile App Privacy Preferences: Restoring Usability in a Sea of Permission Settings, by J. Lin B. Liu, N. Sadeh and J. Hong. In Proceedings of SOUPS 2014.

[4] Teens and Mobile Apps Privacy. (소스)

이 사이트는 쿠키를 사용하여 사이트별 언어 및 표시 옵션에 대한 환경설정을 저장합니다.

Google Play에서 성공을 거두는 데 도움이 되는 최신 Android 개발자 뉴스 및 도움말을 받아 보세요.

* 필수 입력란

완료되었습니다.

WeChat에서 Google Developers 팔로우하기

이 사이트를 (으)로 탐색할까요?

페이지를 요청했지만 이 사이트의 언어 환경설정은 입니다.

언어 환경설정을 변경하고 이 사이트를 (으)로 탐색할까요? 언어 환경설정을 나중에 변경하려면 각 페이지 하단의 언어 메뉴를 사용하세요.

이 클래스를 사용하려면 API 수준 이상이 필요합니다.

문서에 대해 선택한 API 수준이 이므로 이 문서가 표시되지 않습니다. 왼쪽 탐색 메뉴의 선택기로 문서 API 수준을 변경할 수 있습니다.

앱에 필요한 API 수준 지정에 관한 자세한 내용은 다양한 플랫폼 버전 지원을 참조하세요.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)