데이터 및 파일 저장소 개요

Android는 다른 플랫폼의 디스크 기반 파일 시스템과 유사한 파일 시스템을 사용합니다. 시스템에서 제공되는 앱 데이터 저장 옵션은 다음과 같습니다.

  • 앱별 저장소: 내부 저장소 볼륨 내의 전용 디렉터리 또는 외부 저장소 내의 다른 전용 디렉터리에 앱 전용으로 사용되는 파일을 저장합니다. 다른 앱이 액세스해서는 안 되는 민감한 정보는 내부 저장소 내의 디렉터리에 저장합니다.
  • 공유 저장소: 미디어, 문서, 기타 파일을 비롯하여 앱이 다른 앱과 공유해야 하는 파일을 저장합니다.
  • 환경설정: 비공개 프리미티브 데이터를 키-값 쌍으로 저장합니다.
  • 데이터베이스: Room 지속성 라이브러리를 사용하여 구조화된 데이터를 비공개 데이터베이스에 저장합니다.

이러한 옵션의 특성은 다음 표에 요약되어 있습니다.

콘텐츠 유형 액세스 방법 권한 필요 다른 앱이 액세스할 수 있나요? 앱 제거 시 파일이 삭제되나요?
앱별 파일 앱 전용으로 사용되는 파일 내부 저장소에서 getFilesDir() 또는 getCacheDir()

외부 저장소에서 getExternalFilesDir() 또는 getExternalCacheDir()
내부 저장소에 필요하지 않음

Android 4.4(API 수준 19) 이상을 실행하는 기기에서 앱 사용 시 외부 저장소에 필요하지 않음
아니요
미디어 공유 가능한 미디어 파일(이미지, 오디오 파일, 동영상) MediaStore API Android 11(API 수준 30) 이상에서 다른 앱의 파일에 액세스할 때 READ_EXTERNAL_STORAGE

Android 10(API 수준 29)에서 다른 앱의 파일에 액세스할 때 READ_EXTERNAL_STORAGE 또는 WRITE_EXTERNAL_STORAGE

Android 9(API 수준 28) 이하에서 모든 파일에 권한 필요
예, 하지만 다른 앱에 READ_EXTERNAL_STORAGE 권한 필요 아니요
문서 및 기타 파일 다운로드한 파일을 비롯하여 다른 유형의 공유 가능한 콘텐츠 저장소 액세스 프레임워크 없음 예, 시스템 파일 선택기를 통해 가능 아니요
앱 환경설정 키-값 쌍 Jetpack 환경설정 라이브러리 없음 아니요
데이터베이스 구조화된 데이터 Room 지속성 라이브러리 없음 아니요

선택하는 솔루션은 다음과 같은 특정 요구에 따라 달라집니다.

데이터에 필요한 공간이 얼마나 되나요?
내부 저장소에는 앱별 데이터를 위한 공간이 제한되어 있습니다. 상당한 양의 데이터를 저장해야 한다면 다른 유형의 저장소를 사용하세요.
데이터 액세스는 얼마나 안정적이어야 하나요?
앱을 시작할 때 등 앱의 기본 기능에 필요한 특정 데이터라면 내부 저장소 디렉터리 또는 데이터베이스 내에 배치합니다. 일부 기기의 경우 사용자가 외부 저장소에 해당하는 실제 기기를 제거할 수 있으므로 외부 저장소에 저장된 앱별 파일에 액세스하지 못하게 될 수도 있습니다.
어떤 종류의 데이터를 저장해야 하나요?
앱에만 의미 있는 데이터가 있다면 앱별 저장소를 사용합니다. 공유 가능한 미디어 콘텐츠의 경우 다른 앱이 콘텐츠에 액세스할 수 있도록 공유 저장소를 사용합니다. 구조화된 데이터의 경우 환경설정(키-값 데이터일 때)이나 데이터베이스(열이 3개 이상 포함된 데이터일 때)를 사용합니다.
데이터가 앱에만 공개되어야 하나요?
민감한 정보, 즉 다른 앱에서 액세스해서는 안 되는 데이터를 저장할 때는 내부 저장소, 환경설정 또는 데이터베이스를 사용합니다. 내부 저장소를 사용하면 사용자에게 데이터가 숨겨진다는 추가적인 이점이 있습니다.

저장 위치 카테고리

Android는 두 가지 유형의 실제 저장소 위치, 즉 내부 저장소외부 저장소를 제공합니다. 대부분의 기기에서 내부 저장소는 외부 저장소보다 작습니다. 그러나 내부 저장소는 모든 기기에서 항상 사용할 수 있으므로 앱 작동의 기반이 되는 데이터를 더 안정적으로 보관할 수 있는 저장 위치입니다.

SD 카드와 같은 이동식 볼륨은 파일 시스템에 외부 저장소의 일부로 표시됩니다. Android는 /sdcard와 같은 경로를 사용하여 이러한 기기를 표시합니다.

앱 자체는 기본적으로 내부 저장소에 저장됩니다. 그러나 APK 크기가 매우 크다면 다음과 같이 앱의 매니페스트 파일 내에 환경설정을 지정하여 내부 저장소 대신 외부 저장소에 앱을 설치할 수 있습니다.

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

외부 저장소 사용 권한 및 액세스 권한

Android에서 정의하는 저장소 관련 권한은 READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE입니다.

이전 버전의 Android에서는 앱이 외부 저장소의 앱별 디렉터리 외부에 있는 파일에 액세스할 수 있도록 READ_EXTERNAL_STORAGE 권한을 선언해야 했습니다. 또한 앱별 디렉터리 외부의 파일에 쓸 수 있도록 WRITE_EXTERNAL_STORAGE 권한도 선언해야 했습니다.

최신 버전의 Android는 앱이 지정된 파일에 액세스하고 파일에 쓰는 기능을 결정하는 데 파일의 위치보다 용도에 더 많이 의존합니다. 특히 앱이 Android 11(API 수준 30) 이상을 타겟팅한다면 WRITE_EXTERNAL_STORAGE 권한은 앱의 저장소 액세스에 영향을 미치지 않습니다. 이 용도 기반 저장소 모델을 사용하면 앱이 실제로 사용하는 기기의 파일 시스템 영역에만 액세스할 수 있게 되므로 사용자 개인 정보 보호가 향상됩니다.

Android 11에서는 앱별 디렉터리와 MediaStore 외부의 파일에 대한 쓰기 액세스를 제공하는 MANAGE_EXTERNAL_STORAGE 권한을 도입했습니다. 이 권한에 관해 학습하고 대부분의 앱에서 사용 사례를 처리하기 위해 이를 선언하지 않아도 되는 이유를 알아보려면 저장소 기기에서 모든 파일을 관리하는 방법에 관한 가이드를 참고하세요.

범위 지정 저장소

사용자에게 더 많은 파일 제어 권한을 제공하고 파일이 복잡해지지 않도록 하기 위해 Android 10(API 수준 29) 이상을 타겟팅하는 앱에는 기본적으로 외부 저장소로 범위가 지정된 액세스 권한 또는 범위 지정 저장소가 부여됩니다. 이러한 앱은 외부 저장소의 앱별 디렉터리와 앱에서 만든 특정 유형의 미디어에만 액세스할 수 있습니다.

앱이 앱별 디렉터리 외부 및 MediaStore API가 액세스할 수 있는 디렉터리 외부에 저장된 파일에 액세스해야 하는 경우가 아니면 범위 지정 저장소를 사용하세요. 앱별 파일을 외부 저장소에 저장하면 이러한 파일을 외부 저장소의 앱별 디렉터리에 배치함으로써 범위 지정 저장소를 더 쉽게 채택할 수 있게 됩니다. 이렇게 하면 범위 지정 저장소가 사용 설정되었을 때 앱이 해당 파일에 대한 액세스 권한을 유지합니다.

범위 지정 저장소용으로 앱을 준비하려면 저장소 사용 사례 및 권장사항 가이드를 참고하세요. 범위 지정 저장소로 해결되지 않는 다른 사용 사례가 앱에 있으면 기능 요청을 제출하세요. 범위 지정 저장소 사용을 일시적으로 선택 해제할 수 있습니다.

기기에서 파일 보기

기기에 저장된 파일을 보려면 Android 스튜디오의 Device File Explorer를 사용합니다.

추가 리소스

데이터 저장소에 관한 자세한 내용은 다음 리소스를 참조하세요.

동영상