Foundation/Android

[Android] Platform Architecture (플랫폼 아키텍처)

개발왕 금골드 2021. 8. 16. 16:10
반응형

안녕하세요 골드입니다.

오늘은 안드로이드 플랫폼 아키텍처에 관해서 간단하게 살펴보도록 하겠습니다.


안드로이드는 다양한 기기 환경에서 작동할 수 있도록 제작된 Linux 기반 오픈소스 소프트웨어 스택입니다. 안드로이드 플랫폼은 몇 개의 계층으로 나누어져 있습니다. 제일 위에 시스템 앱(System Apps)이 우리가 사용하는 애플리케이션입니다.

 

출처 : https://developer.android.com/guide/platform

 - 시스템 애플리케이션(System Apps)

시스템 앱은 안드로이드와 함께 제공되는 기본 구성 애플리케이션입니다. 달력, 시계, 주소록, 카메라 등은 일반적인 안드로이드에 설치되어 있는 앱입니다. 이러한 앱이 시스템 앱입니다. 시스템 앱과 사용자가 설치하는 앱 사이에 구별되는 특징은 없습니다. 따라서 삼성 같은 경우 삼성 UI를 적용할 수 있고 마찬가지로 타사에서 제공한 앱이 기본 웹브라우저가 될 수도 있고 키보드 스킨을 바꿀 수도 있습니다. 또한 시스템 앱은 개발자에게 주요 기능을 제공하는 역할도 갖고 있습니다. 카메라를 사용하는 앱을 만드는 경우 카메라의 기능을 직접 빌드할 수도 있지만, 이미 설치되어 있는 카메라 앱을 호출하여 사용자에게 제공할 수 있습니다.

 

 - Java API 프레임워크

Android OS의 전체 기능은 Java로 작성된 API를 통해 접근할 수 있습니다. 안드로이드 스튜디오에서 Java, Kotlin 상관없이 결국 Java로 컴파일되어 빌드됩니다. API는 안드로이드 애플리케이션을 제작하는 데 필요한 다양한 기능을 제공합니다. 우리가 사용하는 대다수의 기본 기능들은 다 Java API에서 제공한다고 생각하면 됩니다.

  • View
  • Resource 
  • Activity
  • Content Provider

 

 - Native C/C++ Library

때로는 기본 API로 부족한 경우가 있습니다. 안드로이드 시스템 구성요소는 네이티브 코드를 기반으로 빌드되었습니다. Java API를 통해 이러한 기능의 일부를 노출시키지만, 그 이상이 필요할 경우 개발자는 Android NDK를 사용하여 네이티브 라이브러리에 접근이 가능합니다.

 

 - ART(Android Runtime)

안드로이드 런타임은 안드로이드 프로젝트를 위해 제작된 런타임입니다. 런타임(혹은 런타임 라이브러리)는 프로그램을 관리하기 위해 컴파일러나 가상 머신이 사용하는 기본 코드의 라이브러리나 프로그램을 말합니다. 즉, 안드로이드 애플리케이션 프로세스를 관리하기 위한 컴파일러나 가상 머신이 사용하는 코드 집합체입니다.  초기의 안드로이드는 DVM이라는 달빅 가상 머신을 사용했었으나 안드로이드 5.0부터 ART를 사용하기 시작했습니다. 안드로이드 애플리케이션을 실행하는 경우 각 앱이 프로세스 내에서 자체 ART 인스턴스를 실행합니다. ART는 DEX파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행할 수 있습니다. 여기서 DEX파일은 안드로이드용으로 설계된 바이트코드입니다. 최소 메모리 공간에 맞게 최적화되어 있습니다. ART의 주요 기능은 이러합니다.

  • AOT(Ahead-Of-Time) 컴파일 :  ART는 앱 성능을 개선할 수 있도록 AOT 컴파일을 사용합니다. AOT 컴파일은 일부 코드는 프로세스를 실행할 때 컴파일한다는 뜻입니다. 먼저 중간 언어 형태로 배포한 후 해당 시스템에서 인터프리터나 JIT 컴파일러를 통해 기계어 번역을 실행하여 실행되는 중간에 해당 시스템아 맞는 기계어로 번역하는 것입니다. 이렇게 했을 경우 오직 실행 시에만 얻을 수 있는 프로그램 분석 정보를 활용할 수 있어, 더 높은 성능을 제공한다는 장점이 존재합니다. 또한, 기존에 사용했던 JIT(Just-In-Time) 컴파일의 경우 앱을 다운로드할 때, 모든 코드를 컴파일하였다면 AOT는 실행 중에 컴파일하기 때문에 다운로드 시간이 줄어듭니다. 반면에 실행 시 프로그램 분석과 컴파일을 함께 수행하기 때문에 추가적으로 메모리와 CPU 사이클이 필요하다는 단점이 존재합니다.

 

출처 : https://ko.wikipedia.org/wiki/안드로이드_런타임

  • 가비지 컬렉션 개선 : 가비지 컬렉션은 리소스 집약적이므로 앱 성능을 저하시켜 화면 끊김, UI 응답 부족 등의 문제를 유발할 수 있습니다. ART에서는 이러한 가비지 컬렉션의 성능을 개선하였습니다.
    • 안드로이드 8.0에서 동시 압축 가비지 컬렉터를 제공합니다. 기존과 다르게 가비지 컬렉터(GC)가 실행될 때마다 힙을 압축합니다. 항상 힙을 압축하기 때문에 안드로이드 7.0보다 평균 힙 크기가 32% 더 작습니다.
    • GC는 앱이 실행 중인 동안에는 스레드 루트를 처리하기 위해 한 번만 짧게 일시중지합니다. 일시중지 시간이 안드로이드 7.0 GC보다 85% 더 짧습니다. 일시중지 시간이 일정하고 더 이상 힙 크기에 비례해 길어지지 않기 때문에 앱에서 버벅거림에 관한 걱정이 줄었습니다.
  • DEX 형식 파일 간소화 : 안드로이드 9 이상 기기에서 AOT 컴파일러가 앱 패키지에 있는 DEX 파일을 더 콤팩트한 표시로 변환하여 압축된 DEX 형식 파일을 더욱 최적화합니다. 이러한 변경사항은 디스크 공간과 RAM 소비를 줄일 수 있습니다.

 

 - HAL(하드웨어 추상화 계층)

하드웨어 추상화 계층에서 Java API에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공합니다. 그러므로 카메라, 블루투스 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 하드웨어 추상화 계층에서 구현합니다. Java API가 기기 하드웨어에 접근하기 위해 호출을 수행했다면 안드로이드 시스템이 해당 하드웨어에 대한 라이브러리 모듈을 로드합니다. 이는 안드로이드에서 하위 수준의 드라이버를 구현하지 않아도 되게 해주는 시스템입니다.

 

 - Linux 커널

안드로이드는 리눅스 커널 기반입니다. 예를 들어, 로우 레벨의 메모리 관리와 같은 기능에 리눅스 커널을 사용합니다. 


 

여기까지 골드였습니다.

감사합니다.

 

본문 출처 및 참고자료 : https://developer.android.com/guide/platform

 

플랫폼 아키텍처  |  Android 개발자  |  Android Developers

Android is an open source, Linux-based software stack created for a wide array of devices and form factors. The following diagram shows the major components of the Android platform. The foundation of the Android platform is the Linux kernel. For example…

developer.android.com

반응형