https://developer.android.com/guide/components/fundamentals#Components

 

안드로이드 운영체제는 

스마트폰의 입출력장치(네트워크, 디스플레이, 저장소 등)를

제어한다.

 

안드로이드 앱은

운영체제가 제공하는 프레임워크를 사용해 이런 입출력 장치를

사용 할 수 있다.

 

안드로이드 앱은 안드로이드 운영체제가 정하는 방식에 따르지 않고는

동작할 수 없다.

 

안드로이드 운영체제는 기본적으로

애플리케이션 간에 정보나 데이터 접근을

차단하고 있다.

 

하지만 시스템이 알지 못하는 접근에 대해서 앱을 보호하기 위해

차단하는 것이지 다른 어떤 운영체제들보다도

앱 간에 서로 협동하고 정해진 규칙에 따라 데이터를 공유하여

사용자에게 서비스를 제공할 수 있는 환경을 제공한다.

 

운영체제를 국가로 본다면 개인의 보호 차원에서

서로에게 허락 없이 접근하거나 정보를 가져가서는 안 되지만

서로 협의하고 국가에서 정해진 규칙에 따른다면 

서로 간의 상호작용을 적극 권장하는 것이다.

 

컨텐트 프로바이더에 대한 생각을 정리하기 전에 서론이 너무 긴 것 같다.

 

애플리케이션에서 데이터를 공유하는 방법

앱은 안드로이드 운영체제에서 하나의 사용자이다.

 

사용자들에겐 별도의 독립적인 저장소가 제공된다.

여기에는 누구도 접근할 수 없다.

 

각 앱엔 별도의 VM이 제공된다.

각 사용자에게 별도의 컴퓨터가 제공되는 것과 같다.

 

이는 더욱 다른 앱에 접근하는 방법을 차단한다.

default가 보안 100%가 적용된 상태라고 본다.

 

앱을 개발하다보면 다른 앱의 데이터가 반드시 필요한 경우가 있다.

 

대표적으로 연락처 앱에 있는 연락처들이 필요하거나,

사진 앱에저장되어 있는 사진 데이터를 필요로 할 경우가 있다.

 

이렇게 하나의 앱에서 관리하는 데이터를 다른 앱에서도 사용할 수 있는

기능을 구현하고자 할 경우 ContentProvider를 사용한다.

 

앱 내부에 있는 데이터를 공유할 수도 있고,

내 앱에서만 사용하는 API를 사용해 서버에 있는 데이터를 전달 할 수도 있다.

 

컴포넌트, 진입점

안드로이드에는 4개의 컴포넌트가 있고

이 중의 하나가 ContentProvider 이다.

 

다른 앱에서는 내 앱의 정보에 접근할 수 없기 때문에

반드시 컴포넌트를 통해 원하는 정보를 전달 받아야 한다.

 

그리고 그 원하는 기능은 내 앱의 특정 컴포넌트를 통해서만

원하는 정보를 얻어 낼 수 있다.

 

정보를 얻어 내기 위해서는 현재 시스템에서 나에게 쥐어준 제어권을

그 다른 앱의 컴포넌트에 넘겨줘야 한다.

 

앱들은 각자의 로봇에 앉아 로봇을 제어하지만

전기(제어권)는 오로지 하나의 로봇에만 주어진다고 볼 수 있다.

 

이 제어권이 넘어올 때 컴포넌트 입장에선 나의 진입점에 들어왔다고 볼 수 있다.

진입점에 들어오는 순간 컴포넌트는 시스템과 상호작용(내 저장소에 있는 데이터를 요청하거나, 네트워크를 요청하는 등) 할 수 있다.

 

컨텐트 프로바이더는 제어권을 얻게 되면 Intent를 통해

어떤 데이터를 필요로 하는지 확인하고

데이터를 얻으면 그 데이터를  Intent에 담아 제어권과 함께

다시 되돌려보낸다.

 

Content Provider을 통해서 편리하고 안전하게 데이터를 공유할 수 있다.

(물론 안전하게 제공하는 것은 앱의 몫이다. 운영체제는 함부로 접근하는 것만 막아줄 뿐..)

 

 

 

+ Recent posts