앱 MVP Android 부분 미디어 접근: 포토 피커·재선택·URI 만료를 나누는 5가지 기준
앱 MVP Android 부분 미디어 접근: 포토 피커·재선택·URI 만료를 나누는 5가지 기준
Android에서 사진을 받는 MVP는 ‘사진 권한을 받았다’는 한 줄로 끝나지 않습니다. 사용자가 한 장만 고르는 흐름인지, 앱이 라이브러리를 탐색해야 하는지, 전체가 아니라 일부 사진만 허용했는지, 나중에 다시 고르게 해야 하는지에 따라 구현과 안내가 달라집니다.
Android 14의 Selected Photos Access는 사용자가 전체 라이브러리 대신 특정 사진·동영상만 앱에 제공하도록 할 수 있습니다(C001). 이 글은 포토 피커로 한정 선택을 받는 경우와 자체 갤러리를 유지하는 경우를 분리해, MVP에서 확인할 기준을 정리합니다. 어떤 기기나 앱에서의 동작을 보장하지 않습니다.
먼저 답하기: ‘사진 선택’과 ‘라이브러리 접근’은 다른 결정입니다
한 장의 프로필 사진이나 첨부 파일만 받는 기능이라면, Android의 포토 피커가 선택한 미디어만 공유하는 내장 흐름을 제공합니다(C002). 포토 피커가 없을 때 Activity 계약이 ACTION_OPEN_DOCUMENT로 폴백하는지도 공식 문서에 안내돼 있습니다(C002). 반대로 앱 안에서 정렬·검색·여러 항목 관리를 직접 해야 한다면, 자체 갤러리와 부분 접근의 상태를 다뤄야 합니다.
결정 | 확인 질문 | 통과로 오해하기 쉬운 신호 |
|---|---|---|
선택 방식 | 한정 선택이면 포토 피커로 충분한가 | 개발 기기에서 한 장 업로드됨 |
접근 범위 | 전체·부분·거부 중 현재 상태는 무엇인가 | 처음 권한을 허용함 |
재선택 | 사용자가 스스로 범위를 바꾸는 버튼이 있는가 | 설정 화면만 존재함 |
URI 처리 | 만료·삭제·변경된 항목을 실패로 처리하는가 | URI 문자열을 저장함 |
기준 1: 한정 선택이면 포토 피커를 먼저 검토합니다
포토 피커는 날짜순 미디어 라이브러리에서 사용자가 고른 사진·동영상만 앱과 공유하는 UI입니다(C002). 따라서 앱이 모든 사진을 목록으로 보여 줄 이유가 없다면, 전체 저장소 읽기 권한을 먼저 요청하는 대신 사용자가 필요한 항목을 고르는 흐름이 적합한지 검토할 수 있습니다.
다만 ‘포토 피커가 있다’는 사실만으로 업로드 완료나 서버 보관이 증명되지는 않습니다. 선택 결과 URI 수신, 파일 읽기, 업로드 성공·실패, 사용자가 취소했을 때의 화면을 각각 기록하세요. 포토 피커의 가용성과 폴백은 대상 기기에서 별도 QA가 필요합니다.
기준 2: 자체 갤러리는 부분 접근을 별도 상태로 봅니다
자체 갤러리를 운영하고 Android 14 이상에서 재선택을 앱이 제어하려면 `READ_MEDIA_VISUAL_USER_SELECTED`를 포함한 권한 구성을 검토해야 합니다(C003). 공식 문서는 전체 접근, 부분 접근, 거부를 구분해 UI를 갱신할 것을 설명합니다(C004). 그러므로 ‘READ_MEDIA_IMAGES가 없다’는 상태를 곧바로 오류나 빈 라이브러리로 표시하면 안 됩니다.
화면에는 현재 보이는 항목이 ‘사용자가 선택해 준 일부’인지, 다시 선택할 수 있는지, 전체 라이브러리 탐색이 필요한 기능인지 분명히 나누어 보이게 하세요. 재선택은 사용자가 누른 버튼에서 요청해야 하며, 예고 없이 시스템 대화상자를 반복해 띄우지 않아야 합니다(C003).
기준 3: 저장한 권한 상태보다 현재 상태를 확인합니다
Android 문서는 권한 상태를 SharedPreferences나 DataStore에 영구 저장하지 말고 실제 권한을 확인하라고 안내합니다(C004). 사용자는 설정에서 전체 접근을 부분 접근으로 바꿀 수 있고, 그 변경은 앱을 닫지 않아도 onStart와 onResume 사이에 일어날 수 있습니다(C004).
따라서 체크리스트에는 앱 진입·복귀 시 권한 재확인, 부분 접근일 때의 목록 새로고침, 권한 거부 시 필요한 기능 안내를 각각 둡니다. 앱 시작과 동시에 권한을 요구하기보다 기능 수행에 필요한 때 요청하는 것도 Android 권한 안내의 원칙입니다(C006).
기준 4: URI는 영구 보관 약속이 아닙니다
부분 선택으로 제공된 URI 접근은 결국 만료될 수 있으므로, 어떤 URI도 항상 읽을 수 있다고 가정하면 안 됩니다(C005). 이전에 선택했던 썸네일이 목록에 남아 있어도 실제 파일을 읽는 시점에 실패할 수 있습니다. URI 문자열이 남아 있다는 관찰과 실제 접근 가능 상태를 분리해야 합니다.
재시도 화면에는 ‘다시 선택’으로 돌아갈 수 있는 경로를 두고, 읽기 실패를 사용자 파일이 삭제됐다는 단정으로 바꾸지 마세요. 오류 로그에는 기기·OS·권한 상태·선택 시점·실패 단계처럼 확인 가능한 정보만 남기면 다음 검수에 도움이 됩니다.
관련 글 앱 MVP 사진 선택: 포토 피커·전체 권한·선택 취소를 나누는 기준은 선택 흐름 자체를 다룹니다. 이번 글은 자체 갤러리에서 부분 접근·재선택·상태 변화를 처리하는 경계에 집중합니다.
기준 5: 출시 QA는 세 가지 접근 범위를 모두 남깁니다
최소한 전체 접근, 일부 선택, 거부 상태를 분리해 시험하세요. 일부 선택에서는 선택한 항목만 보이는지, 앱을 다른 화면으로 보냈다 돌아온 뒤 목록을 새로 읽는지, 다시 선택 버튼이 예상한 시스템 흐름을 여는지 확인합니다. 전체 접근에서는 앱이 실제로 필요한 미디어 유형만 요청하는지도 확인합니다(C001).
이 결과는 특정 빌드와 기기에서의 관찰입니다. OS 업데이트, target SDK, 제조사 설정, 사용자의 권한 변경에 따라 달라질 수 있으므로, ‘모든 사용자의 사진을 안전하게 처리한다’는 일반화 대신 시험 조건과 미확인 범위를 함께 기록하세요.
자주 묻는 질문
포토 피커를 쓰면 저장소 권한이 항상 필요 없나요?
포토 피커는 사용자가 고른 미디어만 앱과 공유하는 흐름을 제공합니다. 다만 앱의 실제 기능이 자체 갤러리 탐색을 요구하는지, 대상 기기에서 포토 피커가 가능한지는 별도로 확인해야 합니다.
부분 접근이면 사진 목록이 비어 있는 오류인가요?
아닙니다. Android 14에서는 사용자가 선택한 일부 사진·동영상만 접근하게 할 수 있습니다. 현재 상태를 확인하고, 일부 선택에 맞는 목록과 재선택 경로를 제공해야 합니다.
이전에 받은 URI를 계속 사용할 수 있나요?
항상 그렇지 않습니다. Android 문서는 부분 선택으로 받은 URI 접근이 결국 만료될 수 있다고 설명합니다. 읽기 실패와 다시 선택 흐름을 설계해야 합니다.
권한은 언제 요청해야 하나요?
Android 권한 안내는 앱 시작 시점이 아니라 기능 수행에 필요할 때 권한을 요청하라고 권장합니다. 사용자가 왜 필요한지 이해할 수 있는 화면과 함께 요청 범위를 검토하세요.
공식 출처
Android Developers: Grant partial access to photos and videos — 2026-09-26 직접 확인
Android Developers: Photo picker — 2026-09-26 직접 확인
Android Developers: Request runtime permissions — 2026-09-26 직접 확인
발행일: 2026-09-26 · 작성: 유인어스 정책자금·정부지원사업 인사이트