티스토리 뷰

데이터 및 파일 저장소 개요(내부 저장소 / 외부 저장소)

  • 내부 파일 저장소 : 기기 파일 시스템에 앱 전용 파일을 저장한다.
  • 외부 파일 저장소 : 공유된 외부 파일 시스템에 파일을 저장한다. 이것은 일반적으로 사진과 같은 공유된 사용자 파일용이다.
  • 공유 기본 설정 : 전용 원시 데이터를 키-값 쌍으로 저정한다. (SharedPreferences)
  • 데이터베이스 : 전용 데이터베이스에 구조화된 데이터 저장

외부 저장소에 있는 일부 유형의 파일을 제외하고, 이런 모든 옵션은 앱 전용 데이터용이다. 이 데이터는 기본적으로 다른 앱에서 액세스할 수 없다. 다른 앱과 파일을 공유하고자하는 경우, FileProvider API를 사용해야한다.

앱의 데이터를 다른 앱에 노출하고자하는 경우, ContentProvider를 사용한다. 콘텐츠 제공자는 데이터에 대해 선택한 저장 장치와 관계없이 다른 앱에서 사용가능한 읽기/쓰기 엑세스를 완전히 제어할 수 있게 권한을 허용한다.

내부 저장소

기본적으로 내부 저장소에 지정된 파일은 해당 어플리케이션의 전용 파일이며 다른 어플리케이션은 해당 파일에 엑세스할 수 없다. 따라서 내부 저장소는 사용자가 직접 액세스할 필요가 없는 내부 앱 데이터를 저장하기에 좋다. 시스템이 파일 시스템에서 각 앱의 전용 디렉토리를 제공하므로 여기에 앱에 필요한 모든 파일을 정리하면 된다.

사용자가 앱을 삭제하면 내부 저장소에 저장된 파일이 삭제된다. 내부 저장소에는 사용자가 앱과 관계없이 유지되기를 예상하는 파일을 저장하는데 사용하면 안된다. 예를 들어 앱을 사용하여 사진을 캡쳐할 수 있는 경우, 사용자는 앱을 삭제한 뒤에도 그 사진에 엑세스할 수 있을 것으로 예상이 된다면 이 파일은 MediaStore API를 사용하여 적절한 미디어 컬렉션에 저장해야한다.

내부 캐시 파일

일부 데이터를 영구적으로 저장하기 보다는 임시로 보관하고자 하는 경우, 특수 캐시 디렉토리를 사용해 해당 데이터를 저장한다. 각 앱 마다 전용 캐시 디렉토리가 있고 내부 저장소 공간이 부족한 경우 캐시 파일을 삭제하여 공간을 복구한다. 사용된 캐시 공간은 1MB 이내로 유지해야 한다.

외부저장소

모든 안드로이드 기기는 파일을 저장하는데 사용할 수 있는 공유된 "외부 저장소"를 지원한다. 이 공간은 사용자가 컴퓨터에 외부 저장소 기기로 마운트할 수 있는 저장공간이며, 물리적으로 제거할 수 있다. (sd카드) 외부 저장소에 저장된 파일은 누구든지 읽을 수 있으며, 컴퓨터에서 파일을 전송하는데 usb를 사용하는 경우 사용자가 수정할 수 있다.

대부분의 경우 다른 앱에서도 액세스할 수 있어야 하는 사용자 데이터이고 사용자가 앱을 제거한 뒤에도 저장되어야 하는 데이터라면 외부 저장소를 사용하는 것이 좋다. 캡처한 사진이나 다운로드한 파일 등이 좋은 예이다. 시스템이 이런 종류의 파일을 위해 표준 공개 디렉토리를 제공하여 사용자가 사진, 벨소리, 음악 등을 모두 한곳에 보관할 수 있다.

파일 공유 : FileProvider

앱에서 한 개 이상의 파일을 다른 앱에 제공해야 할 때가 많다. 예를 들어 이미지 갤러리에서 파일을 이미지 편집기에 제공하는 등이 있다. 발신 앱에서 파일을 공유할 수 있는 한 가지 방법은 수신 앱의 요청에 응답하는 것이다.

어떤 경우라도 앱에서 다른 앱으로 파일을 안전하게 제공하는 유일한 방법은 수신 앱에 파일의 콘텐츠 URI를 전송하고 이 URI에 임시 액세스 권한을 부여하는 것이다. Android FileProvider 구성요소에서는 파일의 콘텐츠 URI를 생성할 수 있는 getUriForFile() 메서드를 제공한다. (카메라로 찍은 사진 저장할 때 사용 함)

앱 간의 소량의 텍스트, 숫자 데이터를 공유하려면 데이터가 포함된 intent를 전송해야한다.

  • Intent를 사용하여 간단한 데이터를 전송하는 방법
    • Android에서는 사용자가 두 가지 방식으로 앱 간에 데이터를 공유할 수 있다.
      1. Android Sharesheet : 주로 앱 외부나 다른 사용자에게 직접 콘텐츠를 보내도록 설계되었다. 예를 들어, 친구와 URL을 공유할 때
      2. Android 인텐트 리졸버 : 데이터를 잘 정의된 작업의 다음 단계로 전달하는 데 가장 적합하다. 예를 들어, 앱에서 PDF를 열고 사용자가 선호하는 뷰어를 선택할 수 있도록 한다.
    • 링크 : https://developer.android.com/training/sharing/send?hl=ko

기기 저장소에 파일 저장

File 개체는 대용량 데이터를 건너뛰지 않고 처음부터 끝까지 순서대로 읽거나 쓸 때 매우 효과적이다. 예를 들어 네트워크를 통해 교환되는 이미지 파일 또는 기타 항목에 적합하다.

파일을 저장할 수 있는 정확한 위치는 기기마다 다를 수 있으므로 절대 파일 경로를 사용하는 대신 이 페이지에 설명된 메서드를 사용하여 내부 및 외부 저장소 경로에 액세스해야한다.

기기에서 파일을 보려면 File.getAbsolutePath()와 같은 메서드에 의해 제공된 파일 위치를 로깅한 후 Android Studio의 Device File Explorer를 사용해 기기의 파일을 탐색할 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함