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를 사용합니다.
추가 리소스
데이터 저장소에 관한 자세한 내용은 다음 리소스를 참조하세요.