안드로이드 애플리케이션은 무엇일까?
앱, APP, 모바일 앱, 애플리케이션, 응용프로그램 모두 같은 말입니다.
응용프로그램을 알아보기 앞서 운영체제의 두 가지 기본적인 기능이 있습니다. 하드웨어(기기)의 자원의 효과적으로 이용하고, 응용프로그램 개발 환경을 제공하는 것입니다.
응용프로그램이 동작하기위해서는 운영체제와 같은 시스템 소프트웨어가 반드시 필요합니다. 각 운영체제마다 개발하는 방법이 달라 개발자는 보통 이중에 한가지만 개발합니다(하는 것이 좋습니다.)
다시 돌아와 안드로이드 애플리케이션에 대해 무엇인지 생각해보면
안드로이드 운영체제 위에서 동작하는 응용프로그램이라고 할 수 있을 것 같습니다.
![](https://blog.kakaocdn.net/dn/Arhlu/btrCak1BKeH/IY4Dg13oNe7XS05eYeZATk/img.jpg)
앱의 기초
안드로이드 앱의 기초는 안드로이드 기기에 앱을 만들고 설치하고 동작하는데 있어 가장 기본적인 개념을 알려줍니다.
![](https://blog.kakaocdn.net/dn/ELWco/btrB67iGoon/ezZF0bRyWVeADJQB0ZTsXK/img.jpg)
1. 코드작성
개발자하면 화면에 영어로 가득찬 뭔가를 작성하는모습을 주로 상상할 것 같습니다. 그만큼 개발자라면 코드작성이 가장 기본적인부분이고 애플리케이션을 개발하는데도 코드작성은 아주 기본적인 부분이라고 할 수 있겠습니다. 안드로이드는 Java, Kotlin, C++ 코드로 작성 할 수 있습니다. C++는 일반적인 개발에는 사용하지 않는다고 생각합니다.
2. 코드 실행
위에 언급한 코드작성 후에는 실제 기기또는 에뮬레이터에서 동작하고 싶을 것입니다. 안드로이드 기기나 에뮬레이터에서 동작시킬 수 있는 파일을 만들어야 하는데요. 이때 컴파일을 해야합니다. 컴파일은 해석기의 역할로 개발자가 작성한 코드를 기계가 이해할 수 있는 코드로 변경해줍니다. 안드로이드에서는 SDK(Software Development Kit)을 제공하는데 여기에 포함되어있는 툴을 사용하여 프로젝트를 컴파일 할 수 있습니다.
컴파일이 완료되었다면 .apk파일 또는 .aab 확장자 파일이 생성됩니다. apk파일은 안드로이드 기기에 바로 설치해서 사용 할 수 있는 파일입니다. aab파일은 바로 설치 할 수 없습니다. 안에 추가적인 메타데이터가 있어 안드로이드 기기에 맞게 필요한 리소스를 조합해서 설치 할 수 있는 환경을 제공합니다(스토어에서 다운로드 시 용량을 매우 아낄 수 있습니다)
3. 앱의 실행환경과 보안
위의 1. 코드작성과 2. 코드 실행과정을 거치면 이제 안드로이드 기기에서 내가 만든앱을 실제로 동작 시킬 수 있게됩니다. 이제 앱이 시스템에서 실행되는 환경에대한 약간의 이해를 하면 개발하는데 많은 도움이 될 수 있습니다.
안드로이드 기기안에서 다른사람이 만든 앱과 내앱이 있는데 만약 이 앱들이 서로의 영역을 마음대로 침범한다면 내앱의 데이터를 조작하는등의 심각한 보안상에 문제가 발생 할 수 있을 것입니다. 안드로이드 시스템에서 이러한 문제점을 어떻게 해결하였는지 알아보겠습니다.
![](https://blog.kakaocdn.net/dn/cgLDmj/btrCjFFLcL0/IXdtLBDGLkgK2xoc0kpDq0/img.jpg)
안드로이드 운영체제는 리눅스기반이며 여러 계정을 사용 할 수 있는 환경입니다. 앱마다 각 각 계정이 하나씩 주어집니다. 시스템은 이 계정에 고유의 ID를 부여합니다. (앱은 이 고유의 ID를 알지 못함. 시스템만 알고있음) 앱은 오로지 자신의 ID로 권헌이 설정된 파일만 접근 할 수있는 보안환경이 설정됩니다.
각 앱의 프로세스는 자신의 가상머신을 가지고 있습니다. (예를들어 우리가 윈도우에서 가상머신을 여러개 띄워서 실행한다고 할 때 하나의 머신은 운영체에서 제공해준 리소스 안에서만 동작하고 외부에 무엇이 있는지 아무것도 알 수 다고 생각했습니다.) 앱코드는 다른 앱과 독립적으로 동작합니다.
기본적으로 모든앱은 자신의 리눅스 프로세스에서 동작합니다. 안드로이드 시스템은 앱의 어떠한 컴포넌트가 실행이 필요한 경우 이 프로세스를 실행하며, 컴포넌트의 역할이 끝나 더이상 사용되는 컴포넌트가 없다면 메모리를 회수하려고 프로세스를 종료시킵니다.
4. 안드로이드 시스템의 최소 권한의 원칙
안드로이드 앱은 사용자가 잘못 설치했다가는 스마트폰에 있는 대부분의 정보에 접근 할 수 있습니다. 하지만 이를위해서는 사용자가 각 권한에 대해서 허용을 해줘야만이 앱에서 접근이 가능합니다. 앱이 설치되자마자 마음대로 시스템에 있는 정보에 접근하면 많은 문제가 발생할 수 있으므로 대부분의 운영체제에서는 프로그램에서 주요 자원에대해 바로 접근 할 수 있도록 차단하고있습니다. 이것이 안드로이드에서도 최소 권한의 원칙을 적용하는 이유라고 할 수 있습니다. 앱은 오직 자신의 컴포넌트에 접근함으로서 실행 할 수 있습니다. 이 컴포넌트라는것은 나중에 좀 더 자세히배우게됩니다. 각 컴포넌트는 자신에게 주어진 작업만을 하도록 구현합니다. 앱이 현재 실행된 컴포넌트만 들여다 볼 수 있는것입니다. 컴포넌트를 통해 시스템에 권한을 얻어야만 시스템의 자원에 접근이 가능하며, 다른 컴포넌트로 이동하면 접근이 다시 불가능해질수도 있습니다.
하지만 예외는 있습니다. 두 앱사이 데이터를 공유하거나, 앱이 시스템서비스에 접근하는 방법이 있습니다.
- 두 앱이 똑같은 리눅스 계정 ID를 갖게하는 방법입니다. 앱을 컴파일할 때 서명을 하게되는데 이 서명하는 인증서를 같은것을 사용하면됩니다. 그러면 이 두앱은 같은 프로세스와 같은 가상머신에서 실행되며 각종 데이터 공유가 가능해집니다.
- 시스템 서비스에 접근하는 방법은 사용자에게 명확하게 시스템권한에 접근하도록 요청 할 수 있으며 사용자가 허용시에 앱은 실행되는동안 언제든지 해당 권한에 시스템 리소스를 자유롭게 사용 할 수 있습니다.