Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

데이터 및 파일 저장소 개요

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

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

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

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

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

Android 4.4(API 수준 19) 이상을 실행하는 기기에서 앱 사용 시 외부 저장소에 필요하지 않음
파일이 내부 저장소 내 디렉터리에 있다면 아니요

파일이 외부 저장소 내 디렉터리에 있다면 예
미디어 공유 가능한 미디어 파일(이미지, 오디오 파일, 동영상) MediaStore API 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_STORAGEWRITE_EXTERNAL_STORAGE)을 정의합니다.

이전 버전의 Android에서는 앱이 외부 저장소의 앱별 디렉터리 외부에 있는 파일에 액세스할 수 있도록 이러한 권한을 선언해야 했습니다. 최신 버전의 Android는 앱이 외부 파일에 액세스할 수 있는 기능을 결정하는 데 파일의 위치보다 파일의 용도에 더 의존합니다. 이 용도 기반 저장소 모델을 사용하면 앱이 실제로 사용하는 기기의 파일 시스템 영역에만 액세스할 수 있으므로 사용자 개인정보 보호가 향상됩니다.

범위 지정 저장소

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

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

앱에 범위 지정 저장소가 적용되지 않는 다른 사용 사례가 있다면 기능 요청을 제출하고 플랫폼에서 제공하는 앱 호환성 기능을 사용하세요.

파일 작업을 위한 권장사항

이 섹션에서는 앱에서 파일을 열고 공유하기 위한 몇 가지 일반적인 권장사항을 소개합니다.

파일을 반복해서 여닫지 않음

앱 성능을 유지하려면 동일한 파일을 여러 번 열거나 닫지 마세요. 시스템이 파일을 열고 처음 파일을 읽는 데 비용이 많이 듭니다.

개별 파일 공유

개별 파일 또는 앱 데이터를 다른 앱과 공유하려는 경우 Android는 다음 API를 제공합니다.

  • 특정 파일을 다른 앱과 공유하려면 FileProvider API를 사용하세요.
  • 다른 앱에 데이터를 노출하려면 콘텐츠 제공업체를 사용할 수 있습니다. 콘텐츠 제공업체는 다른 앱에서 사용 가능한 읽기 및 쓰기 액세스 권한을 완전히 제어할 수 있게 권한을 허용합니다. 콘텐츠 제공업체를 저장 매체와 함께 사용할 수 있지만, 콘텐츠 제공업체는 데이터베이스와 함께 가장 일반적으로 사용됩니다.

기기에서 파일 보기

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

참고 자료

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

동영상