Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

콘텐츠 제공자

콘텐츠 제공자는 애플리케이션이 자체적으로 저장된 데이터, 다른 앱이 저장한 데이터에 대한 액세스 권한을 관리하도록 돕고 다른 앱과 데이터를 공유할 방법을 제공합니다. 데이터를 캡슐화하고, 데이터 보안을 정의하는 데 필요한 메커니즘을 제공합니다. 콘텐츠 제공자는 한 프로세스의 데이터에 다른 프로세스에서 실행 중인 코드를 연결하는 표준 인터페이스입니다. 콘텐츠 제공자를 구현하면 많은 장점을 누릴 수 있습니다. 가장 중요한 장점으로는 콘텐츠 제공자를 구성하여 다른 애플리케이션이 앱 데이터에 안전하게 액세스하여 이를 수정할 수 있도록 허용할 수 있다는 사실입니다(그림 1 참조).

콘텐츠 제공자가 저장소에 대한 액세스를 관리하는 방법의 개요 다이어그램.

그림 1. 콘텐츠 제공자가 저장소에 대한 액세스를 관리하는 방법의 개요 다이어그램.

데이터를 공유할 계획이라면 콘텐츠 제공자를 사용하세요. 데이터를 공유할 계획이 없더라도 추상화 기능이 괜찮으니 이를 사용해도 좋지만, 꼭 사용해야 하는 것은 아닙니다. 이 추상화를 사용하면 데이터에 대한 액세스 권한에 의존하는 다른 기존 애플리케이션에 아무런 영향을 미치지 않고 본인의 애플리케이션 데이터 저장소 구현을 수정할 수 있습니다. 이 경우 콘텐츠 제공자만 영향을 받고 여기에 액세스하는 애플리케이션에는 아무 영향이 없습니다. 예를 들어 SQLite 데이터베이스를 다른 저장소로 바꿀 수 있습니다(그림 2 참조).

콘텐츠 제공자 저장소를 마이그레이션하는 모습.

그림 2. 콘텐츠 제공자 저장소를 마이그레이션하는 모습.

ContentProvider 클래스를 사용하는 다른 클래스는 다음과 같이 여러 가지가 있습니다.

이러한 클래스를 사용하는 경우 애플리케이션에 콘텐츠 제공자도 구현해야 합니다. 동기화 어댑터로 작업하는 경우 대신 스텁 콘텐츠 제공자를 만들 수도 있습니다. 이 주제에 대한 자세한 내용은 스텁 콘텐츠 제공자 생성을 참조하세요. 또한 다음과 같은 경우에는 자체적인 콘텐츠 제공자가 필요합니다.

  • 애플리케이션에 맞춤 검색 추천을 구현하고자 하는 경우
  • 애플리케이션 데이터를 위젯에 노출하기 위해 콘텐츠 제공자를 사용해야 하는 경우
  • 복잡한 데이터나 파일을 자신의 애플리케이션에서 다른 애플리케이션으로 복사하여 붙여넣고자 하는 경우

Android 프레임워크에는 오디오, 동영상, 이미지 및 개인 연락처 정보 등의 데이터를 관리하는 콘텐츠 제공자가 포함되어 있습니다. 그중 몇 가지를 나열한 것을 android.provider 패키지에 대한 참조 문서에서 확인할 수 있습니다. 이와 같은 제공자에는 일부 제한 사항이 있지만, 어느 Android 애플리케이션에나 액세스할 수 있습니다.

콘텐츠 제공자는 다양한 데이터 저장소 소스에 대한 액세스를 관리하는 데 사용할 수 있습니다. 여기에는 SQLite 관계형 데이터베이스와 같은 구조화된 데이터도, 이미지 파일과 같은 비구조화된 데이터도 모두 포함됩니다. Android에서 사용 가능한 저장소 유형에 대한 자세한 내용은 저장소 옵션데이터 저장소 설계를 참조하세요.

콘텐츠 제공자의 장점

콘텐츠 제공자는 데이터 액세스 권한에 대한 세분화된 제어 기능을 제공합니다. 애플리케이션 내에서만 콘텐츠 제공자에 액세스하도록 제한하거나, 다른 애플리케이션에서 데이터에 액세스하도록 포괄적인 권한을 부여하거나, 데이터 읽기 및 쓰기에 다른 권한을 구성할 수 있습니다. 안전하게 콘텐츠 제공자를 사용하는 방법에 대한 자세한 내용은 데이터 저장에 대한 보안 팁콘텐츠 제공자 권한을 참조하세요.

콘텐츠 제공자를 사용하여 애플리케이션에서 여러 가지 데이터 소스에 액세스하기 위한 세부 정보를 추상화할 수 있습니다. 예를 들어 애플리케이션이 SQLite 데이터베이스에 동영상 및 오디오 파일과 함께 구조화된 기록을 저장할 수 있습니다. 애플리케이션에 이 개발 패턴을 구현한다면 콘텐츠 제공자를 사용하여 이 데이터에 모두 액세스할 수 있습니다.

또한 CursorLoader 객체는 콘텐츠 제공자를 사용하여 비동기식 쿼리를 실행한 다음, 애플리케이션의 UI 계층에 결과를 반환합니다. CursorLoader를 사용하여 백그라운드에서 데이터를 로드하는 방법에 대한 자세한 내용은 CursorLoader로 쿼리 실행을 참조하세요.

다음 주제에서는 콘텐츠 제공자에 대해 좀 더 자세히 설명합니다.

콘텐츠 제공자 기본 사항
기존 콘텐츠 제공자를 사용하여 데이터를 업데이트하고 이에 액세스하는 방법입니다.
콘텐츠 제공자 생성
직접 콘텐츠 제공자를 설계하고 구현하는 방법입니다.
캘린더 제공자
Android 플랫폼의 일부인 캘린더 제공자에 액세스하는 방법입니다.
연락처 제공자
Android 플랫폼의 일부인 연락처 제공자에 액세스하는 방법입니다.

이 페이지와 관련된 샘플 코드는 기본 동기화 어댑터 샘플 애플리케이션을 참조하세요.