앱인벤터 파일 스코프(Scope)에 대해 알아보기

이 글은 읽는데 약 5분이 걸립니다.

이번 nb187 릴리즈로 목록뷰 컴포넌트에 많은 변화가 생겼습니다.
이번에 업데이트된 파일 컴포넌트의 스코프(Scope)에 대해 알아보겠습니다.

참고로 nb187 릴리즈의 다른 업데이트 내역은 아래 글에 정리해두었습니다:
https://m.blog.naver.com/edisondl/222481250756


파일 스코프란?

먼저 파일 스코프란 도대체 무엇인가에 대해서 알아보겠습니다.
안드로이드는 버전 11부터 새로운 저장소 정책을 강제합니다. 10 때도 적용됐었지만 개발자의 선택에 의해 임시로 무시하고 기존 방식을 사용할 수 있었습니다.
여기서 기존 방식이란 /sdcard/file.txt 식으로 경로와 파일 이름을 이용하여 저장하는 방식이었습니다.

그러나 이 방식은 권한만 있다면 어떤 앱이든 일부 루트 경로를 제외한 외부 저장소(External Storage, 탈착 가능한 외장 SD카드가 아닌, 일반적으로 사용자가 접근할 수 있는 휴대폰의 내장 메모리 카드의 영역입니다)에 있는 파일을 모두 읽고 쓰고 심지어 삭제할 수 있는 문제점이 발생합니다.
이를 해결하기 위해 안드로이드 6부터는 몇몇 위험 권한은 다이얼로그를 띄어 사용자가 명시적으로 권한을 허용해 주게 했습니다.
그러나 이번 정책 변경으로 더 엄격해져서 이제 앱은 기본적으로 자신의 전용 저장 공간에만 파일을 저장하고, 타 앱의 저장 공간에는 접근할 수 없게 되었습니다.
이로 인해 기존에 경로를 직접 지정하여 내장 메모리에 파일을 저장하던 앱들은 안드로이드 11부터 먹통이 됩니다.

이런 정책에 대응하여 앱인벤터는 이번에 파일 스코프라는 속성을 도입하여 파일을 읽고 쓸 영역을 개발자가 직접 지정하게 할 수 있도록 하였습니다.

안드로이드 11부터의 새로운 저장소 정책은 아래 구글의 공식 문서를 읽어보세요:
https://developer.android.com/about/versions/11/privacy/storage?hl=ko



파일 스코프의 종류

앱인벤터는 총 6개의 스코프를 제공하며, 각각의 이름과 기능은 다음과 같습니다:

이름

설명

App

/sdcard/Android/data/패키지명/files/

폴더에 파일을 저장합니다.

해당 앱만 접근 가능합니다.

Asset

앱인벤터에 포함된 에셋 파일(앱인벤터 상에서 업로드한 미디어 파일 등)의 영역입니다.

Cache

/data/data/패키지명/cache/

Legacy

기존 방식입니다.

/파일명 -> /sdcard/파일명

안드로이드 11 이상에서 작동하지 않습니다.

Private

/data/data/패키지명/files/

Shared

공유 저장소에 저장합니다.

그러나 현재 파일 컴포넌트로 공유 저장소에 접근할 수 없습니다.

App

/sdcard/Android/data/패키지명/files/ 폴더 내부입니다.
이 경로는 안드로이드 11 이전에서는 사용자가 파일 탐색기로 접근할 수 있습니다.
11 이상에서는 기본 파일 탐색기 앱으로는 data 폴더 안이 보이지 않는 경우가 있는 것 같습니다. 다른 파일 탐색기 앱으로 해결 가능합니다.

11 이전에서는 타 앱이 경로를 이용하여 여기에 접근 가능합니다.
11 이상에서는 오직 해당 앱만 접근 가능합니다.

Asset

앱인벤터에 빌드 전 미디어로 업로드 한 이미지 파일 등이 저장되는 공간입니다.
오직 읽기만 가능하며, 추가로 이곳에 파일을 저장할 수는 없습니다.
모든 안드로이드 버전에서 해당 앱만 접근 가능하며, 루트 경로이기 때문에, 루팅 된 기기가 아닌 이상 사용자도 접근할 수 없는 곳입니다.

파일 이름만으로 가져올 수 있습니다.
또는 스코프와 관계없이 파일명 앞에 //를 붙이면 에셋 영역의 파일에 접근 가능합니다.
ex) //image.png

Cache

/data/data/패키지명/cache/ 폴더 내부입니다.
임시로 파일을 저장하는 곳이며, 시스템에 의해 삭제될 수 있습니다.
앱을 삭제 시 같이 삭제됩니다.

모든 안드로이드 버전에서 해당 앱만 접근 가능하며, 루트 경로이기 때문에, 루팅 된 기기가 아닌 이상 사용자도 접근할 수 없는 곳입니다.

Legacy

안드로이드 11 이전의 저장소 정책대로 작동합니다.
즉, /sdcard/ 식의 경로로 파일에 접근이 가능합니다.

다만 새 저장소 정책이 강제되는 11 이후부터는 작동하지 않습니다.

Private

/data/data/패키지명/files/ 폴더 내부입니다.
앱이 파일을 저장해야 하나 다른 앱이나 사용자가 접근해서는 안 되는 데이터를 저장할 때 사용합니다.

모든 안드로이드 버전에서 해당 앱만 접근 가능하며, 루트 경로이기 때문에, 루팅 된 기기가 아닌 이상 사용자도 접근할 수 없는 곳입니다.

Shared

Pictures, Music 폴더 등 공유 저장소로 지정되어 읽기/쓰기 권한 없이 모든 앱이 접근 가능한 공간입니다.
다만 앱인벤터 FAQ에 따르면 현재 파일 컴포넌트로는 이곳에 접근할 수 없습니다.
대신 TaifunFile 확장 기능으로는 가능하다고 합니다. 자세한 것은 해당 FAQ를 참고해 주세요.

댓글

제목과 URL을 복사했습니다