안드로이드는 어떻게 돌아갈까?

Ready for Toss #4 — 토스팀에 합류하기 위한 여정

안드로이드와 모바일 전반에 대한 풍부한 이해를 바탕으로 최적화된 인터페이스 설계를 지향하는 분이면 좋습니다.

토스팀에서 요구하는 위 조건중, “안드로이드와 모바일 전반에 대한 풍부한 이해” 를 달성하기 위해 안드로이드의 구조에 대해 공부해봤다. 근데 토스팀에서 말한게 이게 맞는진 모르겠다… 이게 아니면 그냥 공부되고 좋지 뭐~

아래에서 위로 올라가는 순서

안드로이드는 위 이미지와 같이 총 6개의 계층으로 이루어져 있습니다.

  • 리눅스 커널 계층
  • HAL(하드웨어 추상화) 계층
  • 안드로이드 런타임 계층
  • 네이티브 라이브러리 계층
  • 자바 API 프레임워크 계층
  • 어플리케이션 계층

리눅스 커널 계층

안드로이드 운영체제는 리눅스 기반으로 만들어져있어서, 커널 또한 리눅스로 이루어져 있다. 이 계층은 최하위에 존재하는 만큼 안드로이드 운영체제에서 중심역할을 담당하고 있다. 그렇다면 이 “커널” 이라는게 무엇일까?

커널

커널은 위 사진처럼 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하여 응용 프로그램이 하드웨어에서부터 오는 자원을 관리하고 사용 할 수 있게 해준다.

운영체제도 하나의 소프트웨어에 하고, 소프트웨어가 실행되기 위해선 메모리에 소프트웨어가 올라가야 한다. 하지만 운영체제와 같이 많이 큰 소프트웨어가 모두 메모리에 올라간다면 메모리 공간 낭비가 심하게 일어날 것이다. 따라서 운영체제는 항상 필요한 부분만 메모리에 올려두고, 나머지 부분은 필요할 때 메모리에 올려 사용하게 된다. 이때 메모리에 올라가있는 부분을 커널 이라고 부른다.

리눅스 커널 계층

이제 커널이 뭔지 알았으니 다시 리눅스 커널 계층으로 돌아와 이어서 설명하자면, 안드로이드 런타임은 스레드 및 메모리 관리를 이 리눅스 커널 계층에서 진행하고 있다.

HAL 계층

하드웨어들은 저급 언어들을 사용하여 만들어진다. 이러한 하드웨어를 쓰기 위해서는 어셈블리 언어와 같은 기계어들을 사용해야하는데, 이러한 과정이 너무 복잡해 이 과정을 추상화 시켜놓은 계층이 HAL 계층이다.

HAL 계층은 다음에 설명할 자바 API 프레임워크 계층에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공한다. HAL 계층은 여러 라이브러리 모듈로 구성되어 있으며, 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현돼 있다. 프레임워크 API가 기기 하드웨어에 액세스하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 HAL 계층에서 로드한다.

안드로이드 런타임 계층

안드로이드 런타임 게층은 어플리케이션 코드들을 운영체제가 실행할 수 있도록 코드를 컴파일하는 계층이다. 안드로이드 런타임으로 ART를 사용한다. 안드로이드 런타임에 관해서는 추후 자세히 아티클을 작성할 예정이다.

네이티브 라이브러리 계층

ART 런타임 및 HAL 등의 많은 핵심 Android 시스템 구성 요소와 서비스는 C/C++로 작성된 네이티브 라이브러리를 필요로 하는 네이티브 코드를 기반으로 빌드됐다. 네이티브 라이브러리 계층은 SQLite, WebKit, OpenGL 같은 안드로이드에 필수적인 네이티브 라이브러리들이 들어가 있다.

C/C++ 코드가 필요한 앱을 개발하는 경우에는 Android NDK를 사용하여 네이티브 코드에서 직접 이러한 몇몇 네이티브 라이브러리에 액세스할 수 있다.

자바 API 프레임워크 계층

Content Provider, Activity Manager, Notification Manager, Resource Manager 등등 이와 같이 안드로이드 프레임워크 사용에 필요한 API들을 이 자바 API 프레임워크 계층에서 제공하고 있다.

어플리케이션 계층

마지막 계층인 어플리케이션 계층은 사용자를 위한 앱으로도 작동하고 개발자가 자신의 앱에서 액세스할 수 있는 주요 기능을 제공하기 위한 용도로 존재한다. 우리는 이 계층을 이용해 앱 개발을 하고 있는 것이다.

안드로이드의 구조에 대해 알아봤다. 원래 1시간이면 다 쓸 글인데 딴짓하면서 쓰느라 3시간동안 쓰게 됐다…

그나저나 어제 밤샘 해커톤에 참여해서 그런지 몸에 몸살기운이 있는거 같다 ㅠㅠ 원래 어릴땐 밤새도 멀쩡했는데,,, 아직 20살밖에 안된 나지만 역시 늙은거 같다 ㅠㅜ(?!)

iOS 개발자를 꿈꾸는 토스팀 안드로이드 취준생 / github.com/jisungbin

iOS 개발자를 꿈꾸는 토스팀 안드로이드 취준생 / github.com/jisungbin