Contents Provider
Contents Provider
는 우리말로 내용 제공자, 콘텐츠 프로바이더라고 한다.
이 포스팅에서는 설명의 편의를 위해서 콘텐츠 프로바이더로 명칭하도록 하겠다.
정의
- 콘텐츠 프로바이더는 애플리케이션이 자신이 저장한 데이터나 다른 앱의 데이터에 대한 접근 권한을 관리하는 것을 돕고,
다른 앱과 데이터를 공유할 방법을 제공한다.
- 콘텐츠 프로바이더는 데이터를 캡슐화하고, 데이터 보안을 정의할 수 있는 메커니즘을 제공한다.
- 콘텐츠 프로바이더는 한 프로세스내의 데이터를 다른 프로세스에서 실행되는 코드와 연결시키는 표준 인터페이스이다.
(한 프로세스내의 데이터를 다른 프로세스에서 접근할 수 있도록 해준다.)
- 다양한 데이터 저장소 소스에 대한 접근을 관리하는데 사용될 수 있다.
이 데이터 저장소 소스에는 SQLite 관계형 데이터베이스와 같은 구조화된 데이터도 이미지 파일과 같은 구조화되지 않은 데이터도 포함된다.
장점
- 여러가지 장점이 존재하지만 그중에서도 가장 큰 장점은 콘텐츠 프로바이더를 정의하면, 앱이 다른 앱의 데이터에 안전하게 접근하여 수정할 수 있도록 해준다는 것이다.
- 콘텐츠 프로바이더가 저장소에 대한 접근을 관리하는 방식을 표현한 그림
- 콘텐츠 프로바이더를 사용하면 앱의 데이터에 접근권한을 가지고 있는 다른 앱은 영향을 주지 않으면서, 앱의 데이터 저장소 구현을 바꿀 수 있다.
- 다른 앱과 데이터를 공유하려면 콘텐츠 프로바이더를 사용해야 한다.
- 콘텐츠 프로바이더는 데이터에 대한 좋은 추상화를 제공하기 때문에, 데이터를 공유하지 않더라도 콘텐츠 프로바이더를 사용해도 괜찮다.
- 콘텐츠 프로바이더의 추상화를 이용하면 앱의 데이터에 대한 접근권한을 가지고 있는 다를 앱에 영향을 주지 않으면서, 앱의 데이터 저장소 구현을 수정할 수 있다.
- 이 경우 앱의 콘텐츠 프로바이더만 영향을 받고, 해당 콘텐츠 프로바이더를 접근하는 애플리케이션은 아무 영향도 받지 않는다.
- 예를 들어서 아래 그림처럼 SQLite데이터베이스를 다른 저장소로 바꿀 수 있다.
- 데이터 접근 권한에 대한 세분화된 제어 기능을 제공한다.
- 예를 들어서 애플리케이션 내에서만 콘텐츠 프로바이더에 접근하도록 할 수 있다. 이렇게 하면 앱의 데이터는 해당 앱 내부에서만 접근할 수 있다.
- 또한 다른 모든 애플리케이션에서 데이터에 접근할 수 있도록 포괄적인 권한을 부여할 수도 있으며, 데이터 읽기 및 쓰기에 다른 권한을 부여할 수 있다.
- 콘텐츠 프로바이더를 사용하여 앱의 여러 데이터에 접근하기 위한 세부정보를 추상화할 수 있다.
- 예를 들어, 앱은 SQLite 데이터베이스에 비디오, 파일과 함께 구조화된 기록(record)을 저장할 수 있다.
이 경우 콘텐츠 프로바이더를 사용하면 이 데이터 모두에 접근할 수 있다.
- 또한
CursorLoader
객체는 콘텐츠 프로바이더를 사용하여 비동기 쿼리를 실행하고 애플리케이션의 UI 계층에 쿼리 결과를 반환한다.
콘텐츠 프로바이더를 반드시 구현해야 하는 경우
1. 콘텐츠 프로바이더를 사용하는 클래스를 사용하는 경우
AbstractThreadedSyncAdapter
CursorAdapter
CursorLoader
- 이 클래스를 사용할 때는 콘텐츠 프로바이더도 구현해야 한다.
- 동기화 어댑터(SyncAdapter)를 가지고 작업하는 경우, 콘텐츠 프로바이더 대신에 스텁 콘텐츠 프로바이더를 만들 수 있다.
- 이 포스팅의 주제는 콘텐츠 프로바이더를 설명하는 것이기에 스텁 콘텐츠 프로바이더를 만드는 방법에 대해서는 다루지 않고 넘어가도록 하겠다.
혹시라도 궁금해 하실 분들을 위해 스텁 콘텐츠 프로바이더생성 방식에 관한 공식 문서 링크 를 첨부한다.
2. 기타
- 애플리케이션에 맞춤 검색 추천을 구현하고자 하는 경우
- 애플리케이션 데이터를 위젯에 노출시키기 위해 콘텐츠 프로바이더를 사용해야 하는 경우
- 복잡한 데이터나 파일을 자신의 애플리케이션에서 다른 애플리케이션으로 복사해야 하는 경우
안드로이드 프레임워크에서 제공하는 콘텐츠 프로바이더
- 안드로이드 프로엠워크는 연락처 정보, 오디오, 동영상, 이미지 등의 데이터를 관리하는 콘텐츠 프로바이더를 기본적으로 가지고 있다.
- 안드로이드 프레임워크가 제공하는 콘텐츠 프로바이더 목록은
android.provider
패키지에 대한 참조 문서에서 확인할 수 있다.
- 이 콘텐츠 프로바이더는 일부 제한사항이 있지만, 모든 앱에서 사용할 수 있다.