Android - 내용 제공자(콘텐츠 프로바이더, Contents Provider) 개요

Posted by RoadtoS7 on January 01, 2021 · 4 mins read

Contents Provider

Contents Provider는 우리말로 내용 제공자, 콘텐츠 프로바이더라고 한다.
이 포스팅에서는 설명의 편의를 위해서 콘텐츠 프로바이더로 명칭하도록 하겠다.


:one: 정의

  • 콘텐츠 프로바이더는 애플리케이션이 자신이 저장한 데이터나 다른 앱의 데이터에 대한 접근 권한을 관리하는 것을 돕고,
    다른 앱과 데이터를 공유할 방법을 제공한다.
  • 콘텐츠 프로바이더는 데이터를 캡슐화하고, 데이터 보안을 정의할 수 있는 메커니즘을 제공한다.
  • 콘텐츠 프로바이더는 한 프로세스내의 데이터를 다른 프로세스에서 실행되는 코드와 연결시키는 표준 인터페이스이다.
    (한 프로세스내의 데이터를 다른 프로세스에서 접근할 수 있도록 해준다.)
  • 다양한 데이터 저장소 소스에 대한 접근을 관리하는데 사용될 수 있다.
    이 데이터 저장소 소스에는 SQLite 관계형 데이터베이스와 같은 구조화된 데이터도 이미지 파일과 같은 구조화되지 않은 데이터도 포함된다.


:two: 장점

  1. 여러가지 장점이 존재하지만 그중에서도 가장 큰 장점은 콘텐츠 프로바이더를 정의하면, 앱이 다른 앱의 데이터에 안전하게 접근하여 수정할 수 있도록 해준다는 것이다.
  • 콘텐츠 프로바이더가 저장소에 대한 접근을 관리하는 방식을 표현한 그림 콘텐츠 프로바이더가 저장소에 대한 접근을 관리하는 방식을 표현한 그림
  1. 콘텐츠 프로바이더를 사용하면 앱의 데이터에 접근권한을 가지고 있는 다른 앱은 영향을 주지 않으면서, 앱의 데이터 저장소 구현을 바꿀 수 있다.
    • 다른 앱과 데이터를 공유하려면 콘텐츠 프로바이더를 사용해야 한다.
    • 콘텐츠 프로바이더는 데이터에 대한 좋은 추상화를 제공하기 때문에, 데이터를 공유하지 않더라도 콘텐츠 프로바이더를 사용해도 괜찮다.
    • 콘텐츠 프로바이더의 추상화를 이용하면 앱의 데이터에 대한 접근권한을 가지고 있는 다를 앱에 영향을 주지 않으면서, 앱의 데이터 저장소 구현을 수정할 수 있다.
    • 이 경우 앱의 콘텐츠 프로바이더만 영향을 받고, 해당 콘텐츠 프로바이더를 접근하는 애플리케이션은 아무 영향도 받지 않는다.
    • 예를 들어서 아래 그림처럼 SQLite데이터베이스를 다른 저장소로 바꿀 수 있다. SQLite 데이터이스를 다른 저장소로 바꾸는 그
  2. 데이터 접근 권한에 대한 세분화된 제어 기능을 제공한다.
    • 예를 들어서 애플리케이션 내에서만 콘텐츠 프로바이더에 접근하도록 할 수 있다. 이렇게 하면 앱의 데이터는 해당 앱 내부에서만 접근할 수 있다.
    • 또한 다른 모든 애플리케이션에서 데이터에 접근할 수 있도록 포괄적인 권한을 부여할 수도 있으며, 데이터 읽기 및 쓰기에 다른 권한을 부여할 수 있다.
  3. 콘텐츠 프로바이더를 사용하여 앱의 여러 데이터에 접근하기 위한 세부정보를 추상화할 수 있다.
    • 예를 들어, 앱은 SQLite 데이터베이스에 비디오, 파일과 함께 구조화된 기록(record)을 저장할 수 있다.
      이 경우 콘텐츠 프로바이더를 사용하면 이 데이터 모두에 접근할 수 있다.
    • 또한 CursorLoader 객체는 콘텐츠 프로바이더를 사용하여 비동기 쿼리를 실행하고 애플리케이션의 UI 계층에 쿼리 결과를 반환한다.


:three: 콘텐츠 프로바이더를 반드시 구현해야 하는 경우

1. 콘텐츠 프로바이더를 사용하는 클래스를 사용하는 경우

  1. AbstractThreadedSyncAdapter
  2. CursorAdapter
  3. CursorLoader
  • 이 클래스를 사용할 때는 콘텐츠 프로바이더도 구현해야 한다.
  • 동기화 어댑터(SyncAdapter)를 가지고 작업하는 경우, 콘텐츠 프로바이더 대신에 스텁 콘텐츠 프로바이더를 만들 수 있다.
  • 이 포스팅의 주제는 콘텐츠 프로바이더를 설명하는 것이기에 스텁 콘텐츠 프로바이더를 만드는 방법에 대해서는 다루지 않고 넘어가도록 하겠다.
    혹시라도 궁금해 하실 분들을 위해 스텁 콘텐츠 프로바이더생성 방식에 관한 공식 문서 링크 를 첨부한다.

2. 기타

  1. 애플리케이션에 맞춤 검색 추천을 구현하고자 하는 경우
  2. 애플리케이션 데이터를 위젯에 노출시키기 위해 콘텐츠 프로바이더를 사용해야 하는 경우
  3. 복잡한 데이터나 파일을 자신의 애플리케이션에서 다른 애플리케이션으로 복사해야 하는 경우

:four: 안드로이드 프레임워크에서 제공하는 콘텐츠 프로바이더

  • 안드로이드 프로엠워크는 연락처 정보, 오디오, 동영상, 이미지 등의 데이터를 관리하는 콘텐츠 프로바이더를 기본적으로 가지고 있다.
  • 안드로이드 프레임워크가 제공하는 콘텐츠 프로바이더 목록은 android.provider패키지에 대한 참조 문서에서 확인할 수 있다.
  • 이 콘텐츠 프로바이더는 일부 제한사항이 있지만, 모든 앱에서 사용할 수 있다.