본문 바로가기

Flutter-플러터/플러터 공부

Flutter Path_Provider. 데이터 저장소

반응형

돌아오는 목요일이 초급 스터디 발표날입니다. 

발표자료를 준비하면서 파일로 데이터를 저장하는 방법인 Path_Provider를 공부해보았습니다. 

 

책에서 나온 사용방법으로는 도저히 이해가 안되어서 Path_Provider 관련 배경지식을 쌓을 겸

 

Flutter의 데이터가 안드로이드와 IOS에 각각 어떻게 저장 사용되는지 공부해보았습니다. 

 

https://velog.io/@phs811/Flutter-저장소-폴더-구조

Flutter 저장소 폴더 구조 (velog.io)

 

위 링크에 도움을 받았습니다. 

 

 앱의 저장소 이해하기

 

Path Provider를 통해서 안드로이드 IOS 사용 유무표가 아래에 있는데 이게 가장 중요한 부분이다. 

 

 

위 사용 유무 표에 나와있는 관련 함수

아래의 함수들을 통해 일반적인 앱이 접근하여 사용하는 저장공간에 해당하는 파일 시스템상의 위치 정보를 얻을 수 있다.

 

getApplicationDocumentsDirectory()

  • /data/user/0/패키지명/app_flutter

getApplicationSupportDirectory()

  • /data/user/0/패키지명/files

 

여기까지 내부 저장소


 

 

 

getExternalCacheDirectories()

  • '/storage/SDcard/Android/data/패키지명/cache'

getExternalStorageDirectories({StorageDirectory type })

  • '/storage/SDcard/Android/data/패키지명/files'

getExternalStorageDirectory()

  • /storage/emulated/0/Android/data/패키지명/files

 

여기까지 외부저장소

 


 

 

getTemporaryDirectory()

  • '/data/user/0/패키지명/cache'

임시데이터 저장소

 


getApplication, getExternal차이점 = 사용자가 접근가능한 폴더에 접근 유무, 즉 앱 내의 저장소이냐. 앱 밖의 저장소이냐가 핵심

 

 

 

 

  1. 안드로이드
  • Internal 내부
  • 모든 안드로이드 기기에 포함되는 저장공간
  • 앱 설치시 앱을 위해 별도의 공간이 만들어진다.
  • 앱 삭제시 같이 삭제 된다.
  • 데이터 저장경로 /data/user/0/패키지이름
  •  
  • External (외부)
  • 앱 삭제 여부와 상관없이 영구적으로 파일을 저장한다
  • 사용하려면 manifest에서 권한을 받아야 한다.
  •  

manifest란?

manifest는 앱에 관한 필수정보를 설명하는 곳으로 다음과 같은 정보가 들어가 있다.

  1. 앱의 패키지 이름
  2. 앱의 구성요소
  3. 앱의 권한 요청
  4. 기기간의 호환 google play

Path prvoider에서는 3번 External 권한을 요청하면 된다.

// 저장공간 permission 허용

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"

tools:ignore="ScopedStorage" />

사용하는 예로는 특정한 어플을 깔았을 때 앱이 처음 실행될 때

“기기의 카메라, 갤러리, 파일에 대한 권한을 허락하시겠습니까??”


IOS

 

  1. IOS 저장소에 대해

모든 IOS어플은 Sandbox 과 DataCotnaier를 가지고 있다.

어플에 기록되는 모든 데이터들은 DataCotainer에 저장된다.

  1. Documents
  • 유저가 생선한 파일, 다운로드 파일을 저장합니다. iCloud에 백업이 가능

import 'package:path_provider/path_provider.dart';

  • Directory supportDirectory = await getApplicationDocumentsDirectory();
  1. Library
  • 어플을 구동하기 위해 필요한 데이터, 예를 들어 어플을 사용하는 유저에 대한 정보, 앱 설정 데이터 , 유저에게 공개하기에는 민감한 데이터가 저장

import 'package:path_provider/path_provider.dart';

Directory supportDirectory = await getApplicationSupportDirectory();

  1. Temp
  • 시간이 지나면 사라지는 임시 저장공간

import 'dart:io';

Directory tmpDirectory = Directory.systemTemp;

 

 

 

즉 Path_Provider로 데이터 저장소 접근 방식이 플랫폼에 따라 다르다. 

안드로이드는 manifest를 통해 앱 외부 저장소의 권한을 얻어서 사용가능 

IOS는 외부저장소는 사용불가, 내부 저장소만 사용가능 

 

 

 

결론

 

Path_Provider로는 아래 함수 2가지만 사용하면 될 듯 하다. 

getApplicationDocumentsDirectory()      --> 유저가 제작한 데이터, 다운로드한 파일 

  • /data/user/0/패키지명/app_flutter

getApplicationSupportDirectory()      --> 앱 설정이나, 유저정보, 유저가 보기에는 민감한 화면에 노출되지 않는 데이터 저장가능

  • /data/user/0/패키지명/files

 

 

 

728x90
반응형