이노베이팅 컨설팅 신청하기 (클릭)
logo
|
Blog

    앱 MVP Android 파일 공유: ContentProvider·URI 권한을 나누는 5가지 기준

    Android 앱 MVP에서 ContentProvider·FileProvider, private storage, content URI와 임시 읽기 권한을 분리해 외부 파일 공유를 점검하는 기준입니다.
    Sep 22, 2026
    앱 MVP Android 파일 공유: ContentProvider·URI 권한을 나누는 5가지 기준

    앱에서 만든 PDF·이미지·내보낸 파일을 다른 앱으로 보내려 할 때, “공유 버튼이 열린다”는 것과 “필요한 앱만 필요한 파일을 읽는다”는 것은 다른 조건입니다. MVP에서는 파일의 실제 저장 위치, 다른 앱에 보이는 식별자, 읽기 권한의 범위, 전송 뒤 만료, 수신 앱에서의 실패 처리를 한 문장으로 묶지 않는 편이 좋습니다.

    Android Developers는 앱 간 데이터 공유가 필요할 때 ContentProvider를 사용할 수 있다고 설명합니다(C001). 반대로 앱 안에서만 저장·사용하는 데이터라면 ContentProvider가 필수는 아니라고 안내합니다(C002).

    또 파일을 다른 앱에 제공하는 안전한 방식으로 content URI와 임시 URI 권한을 제시하며, FileProvider는 그 URI를 생성하는 구성 요소입니다(C003). 이 글은 특정 앱의 보안 수준·심사 통과·사고 예방을 보장하지 않으며, 제품의 실제 데이터 흐름을 검토할 때 쓸 분리 기준을 다룹니다.

    먼저 정할 것: 다른 앱에 ‘파일’을 줄 일인지, 앱 안에서만 쓸 일인지

    사용자가 만든 영수증을 메일 앱에 첨부하거나, 앱에서 만든 보고서를 문서 뷰어로 여는 흐름처럼 다른 앱이 실제 바이트를 읽어야 한다면 공유 경로가 필요합니다. Android Developers는 ContentProvider가 다른 앱과 데이터를 공유할 때 쓰이는 표준 인터페이스라고 설명합니다(C001). 반면 데이터가 앱 내부 기능에서만 쓰인다면 저장 방식과 외부 공유 인터페이스를 굳이 같이 만들 필요는 없습니다(C002).

    기획 기록에는 먼저 수신 주체를 적으세요. 사용자가 고른 외부 앱에 한 번 전달하는지, 위젯처럼 정해진 시스템 표면에 보여 주는지, 파트너 앱이 계속 접근해야 하는지에 따라 필요한 범위가 다릅니다. “공유 기능”이라는 이름만으로 모든 파일·모든 앱·항상 접근 가능을 뜻하게 만들면 나중에 권한 설명과 오류 대응이 불명확해집니다. 파일을 보여 주는 목적, 대상 데이터, 사용자가 시작하는 시점, 전송이 끝났다고 볼 관찰값을 분리합니다.

    기준 1: 실제 파일 경로와 외부에 주는 content URI를 구분합니다

    Android의 안전한 파일 공유 안내는 다른 앱에 파일 경로 자체를 넘기는 대신 content URI를 전달하고, 그 URI에 임시 권한을 부여하는 방식을 설명합니다(C003). ContentProvider의 URI는 authority와 path로 특정 데이터에 접근할 대상을 가리킵니다(C004).

    수신 앱은 ContentResolver를 통해 접근합니다(C004). 즉 앱 내부에서 파일을 어디에 보관하는지와, 외부 앱에 어떤 URI를 제공하는지는 같은 이름으로 관리할 문제가 아닙니다.

    MVP 체크리스트에는 `원본 저장 위치`, `외부로 노출할 파일 후보`, `content URI 형식`, `허용할 MIME type`, `공유 시작 화면`을 따로 남겨 보세요. 예를 들어 사용자가 한 번 내보낸 PDF와 앱의 내부 캐시·로그·다른 사용자 파일은 같은 공유 후보가 아닙니다. URI 하나가 열렸다고 해서 파일 선택 범위나 수신 앱의 처리 결과까지 자동으로 맞았다고 판단하지 않는 것이 좋습니다.

    우리 앱 MVP의 파일 공유 범위·권한·오류 안내 점검하기

    기준 2: private storage와 Provider 권한은 서로 대체하지 않습니다

    Android Developers는 ContentProvider 권한으로 접근을 제어하려면 저장소의 파일·데이터베이스를 앱의 private 상태로 유지하라고 안내합니다(C005). 외부 저장소의 파일은 다른 API로도 읽고 쓸 수 있으므로, Provider 매니페스트 권한만으로 외부 저장소 파일을 제한할 수 없다는 설명도 함께 제공합니다(C006). 따라서 “Provider를 넣었으니 저장 위치는 상관없다”는 결론으로 건너뛰면 안 됩니다.

    실무에서는 두 질문을 따로 답합니다. 첫째, 원본 데이터는 기본적으로 어느 앱이 읽을 수 있는가. 둘째, 지금 이 파일 한 건을 다른 앱에 전달할 때 어떤 접근을 허용할 것인가.

    이 둘의 답이 문서로 분리되어야, 공유 실패가 저장소 문제인지 URI 생성 문제인지 권한 부여 문제인지 추적할 수 있습니다. 기존 공개 글 앱 MVP 파일 내보내기: 저장·공유·삭제를 나누는 기준은 사용자 흐름 관점의 범위를 다룹니다. 이 글은 Android 앱 간 공유 인터페이스와 권한 경계를 더 좁게 봅니다.

    기준 3: FileProvider의 공개 여부와 임시 URI 권한을 함께 확인합니다

    AndroidX FileProvider 문서는 FileProvider에 `android:exported="false"`를 설정하고, 파일별로 임시 접근을 부여할 수 있도록 `android:grantUriPermissions="true"`를 사용하도록 안내합니다(C007).

    Android의 파일 공유 가이드는 수신 앱에 content URI와 임시 권한을 보내는 방식을 설명하며, 이런 URI 권한은 해당 URI를 받은 앱에 적용되고 자동으로 만료된다고 설명합니다(C003).

    여기서 확인할 것은 단순히 manifest 항목의 존재가 아닙니다. 어떤 authority를 쓰는지, 어떤 디렉터리를 FileProvider paths에 포함하는지, 읽기와 쓰기 중 무엇을 부여하는지, 어느 Intent에 어느 URI가 실리는지, 수신 앱을 고르는 화면을 거친 뒤에도 같은 권한이 필요한지를 실제 흐름으로 확인하세요. 앱마다 파일 구성과 수신 동작이 달라 이 글이 그대로 붙여 넣는 설정값을 제시하지는 않습니다.

    기준 4: 일회성 공유와 계속 접근이 필요한 흐름을 섞지 않습니다

    ContentProvider 생성 안내는 Provider 전체, 특정 경로, 특정 레코드에 읽기·쓰기 권한을 다르게 둘 수 있다고 설명합니다(C008). 또한 URI 권한은 일시적인 접근을 위임하는 방식으로 소개됩니다(C009). 사용자가 선택한 앱에 한 번 문서를 보이는 흐름과, 외부 앱이 계속 데이터를 동기화해야 하는 흐름은 필요한 계약과 검증이 다릅니다.

    따라서 요구사항에는 `공유 시작`, `수신 앱 선택`, `읽기 시작`, `앱 복귀`, `권한이 더 이상 필요 없는 시점`을 별도로 적습니다. 사용자가 공유 시트를 닫은 경우, 수신 앱이 URI를 열 수 없는 경우, 파일 생성이 아직 끝나지 않은 경우도 각각 다른 실패 상태입니다. 공유 시트가 떴다는 관찰만으로 수신 앱에서 열람이 끝났다고 기록하지 말고, 필요한 수준의 확인 화면·재시도·파일 다시 만들기 경로를 제품에 맞춰 정하세요.

    기준 5: 수신 결과와 민감 데이터 노출을 출시 전 별도 검수합니다

    Android Developers는 ContentProvider가 앱 간 데이터 접근을 다루는 인터페이스이며, URI 권한·Provider 권한을 통해 범위를 제어할 수 있다고 설명합니다(C001, C004). 이는 공유 기능에 접근 범위 설계가 필요하다는 근거이지, 구현 하나만으로 모든 위험이 사라진다는 의미는 아닙니다. 파일명, MIME type, 파일 내용, 허용한 경로, 수신 앱의 오류 처리는 제품의 실제 데이터 분류와 함께 검토해야 합니다.

    출시 후보에서는 적어도 다음을 실제 기기에서 확인해 보세요. 공유할 파일 한 건이 예상한 앱 선택 화면으로 전달되는지, 허용하지 않은 내부 파일을 선택할 수 없는지, 선택한 수신 앱이 URI를 열지 못할 때 사용자가 이해할 안내가 있는지, 앱을 닫았다 다시 열었을 때 원본 데이터와 공유 기록이 어떤 상태인지입니다. 이 확인은 “보안 완료” 선언이 아니라, 앱의 의도와 관찰 결과를 맞추는 QA 기록입니다.

    출시 전 파일 공유·권한·복구 흐름을 함께 정리하기

    자주 묻는 질문

    앱 안에서만 파일을 쓴다면 ContentProvider가 필요한가요?

    아닙니다. Android Developers는 다른 앱과 데이터를 공유할 계획이 없으면 ContentProvider가 필수는 아니라고 설명합니다. 먼저 외부 앱이 실제로 읽거나 수정해야 하는지부터 구분하세요.

    다른 앱에 파일 경로를 전달해도 되나요?

    Android의 파일 공유 안내는 content URI와 임시 URI 권한을 사용하는 방식을 안내합니다. 실제 앱에서는 저장 위치, 대상 파일, 수신 Intent와 권한 범위를 함께 검토해야 합니다.

    FileProvider를 추가하면 모든 파일이 안전하게 공유되나요?

    그렇게 단정할 수 없습니다. FileProvider의 공개 여부, URI 권한 부여, 허용 경로, 실제 수신 흐름과 파일 내용은 별도 확인이 필요합니다. 구현 후에는 예상하지 않은 파일이 선택되지 않는지와 수신 실패 안내를 테스트하세요.

    공유 시트가 열리면 전달이 끝난 것인가요?

    아닙니다. 공유 시트 표시는 수신 앱을 고르는 단계일 수 있습니다. 사용자가 선택을 취소했는지, 수신 앱이 URI를 열었는지, 사용자가 다시 앱으로 돌아왔을 때 무엇을 보여 줄지는 별도 상태로 관리하는 편이 좋습니다.

    공식 출처

    Android Developers: Content providers · Create a content provider · Sharing files · AndroidX FileProvider reference — 모두 2026-09-21 확인

    발행일: 2026-09-21 · 작성: 유인어스 정책자금·정부지원사업 인사이트

    Share article
    유인어스 정책자금·혁신기업 전환 컨설팅

    유인어스는 주식회사 넥스트빌더가 운영하는 정책자금 및 혁신기업 전환 컨설팅 브랜드입니다. 기업의 업종·업력·재무상태를 진단해 적합한 정책금융기관과 준비 절차를 안내합니다.

    유인어스 홈 컨설팅 신청 RSS