안드로이드의 저장 공간은 크게 내부 저장소와 외부 저장소로 구분됩니다. Scoped Storage는 외부 저장소에 적용되는 개념으로, 안드로이드 10(Android Q) 버전에서 보안 강화를 목적으로 등장했습니다. Scoped Storage의 등장으로 외부 저장소 관리는 Android Q 이전과는 완전히 달라지게 되었습니다.
안드로이드의 내부 저장소는 시스템과 기기에 설치된 앱들이 사용하는 공간입니다. 각 앱들은 개별적인 공간을 할당 받으며, 이 곳에 앱 동작에 필요한 파일들을 저장합니다. 또 각자의 공간은 권한 없이 접근할 수 있으나, 다른 앱의 공간엔 아예 접근할 수 없습니다. 내부 저장소는 샌드박스 구조로 되어 있기 때문에 시스템에 의해 안전하게 보호됩니다.
샌드박스(sandbox)
외부로부터 들어온 프로그램이 보호된 영역에서 동작해 시스템이 부정하게 조작되는 것을 막는 보안 형태 (출처: 위키피디아)
외부 저장소는 모든 앱들이 공유하는 하나의 공용 저장소로, 외부 저장소 접근 권한이 있다면 외부 저장소 내의 모든 파일에 접근 가능합니다. 외부 저장소 내에도 내부 저장소처럼 각 앱들을 위한 개별적인 공간이 존재하며, 이 공간 역시 권한이 있다면 마음껏 접근할 수 있습니다. 개별 공간이 공유 공간과 다른점은 해당 공간을 소유한 앱은 권한이 없어도 해당 공간에 접근할 수 있고 해당 앱이 삭제되면 할당되었던 공간이 해제된다는 점입니다.
이러한 특성을 가지고 있는 외부 저장소는 다른 앱의 파일에 쉽게 접근할 수 있다는 점에서 보안적으로 취약하다고 볼 수 있습니다.
Scoped Storage가 적용된 Android Q 이후의 외부 저장소는 Android Q 이전의 외부 저장소와 개념적으로 완전히 달라지게 됩니다.
먼저, 개별 공간은 샌드박스 구조로 바뀌었습니다. 해당 공간을 소유한 앱은 권한 없이 해당 공간에 접근할 수 있으나 그렇지 않은 앱들은 해당 공간에 직접적으로 접근할 수 없습니다.
공용 공간은 개별 공간의 파일들을 개념적으로 모아놓은 영역으로 사진 및 동영상
/ 음악
/ 다운로드
로 영역이 구분되어 있습니다. 공용 공간에는 타입에 맞는 파일만 저장할 수 있으며(다운로드는 제한 없음) MediaStore
를 통해서만 접근할 수 있습니다. 각 영역에 파일을 생성하거나 자신이 생성한 파일을 읽을 땐 추가 권한이 필요하지 않습니다. 그러나 다른 앱이 생성한 파일을 읽기 위해선 여전히 권한이 필요하고 해당 파일에 쓰는 것은 쓰기 권한이 없어졌기 때문에 불가능합니다. 앱이 삭제되도 해당 앱이 생성(소유)한 공용 공간의 파일은 삭제되지 않습니다.