IT/Mobile Platforms | Posted by 철규님(최규철) 2011.04.08 00:34

Android Architecture Overview


Android Architecture Overview
Written by GyuCheol Choi on April 08, 2011



플랫폼? OS? 프레임워크?

안드로이드에 대한 설명에 앞서서, 필요한 몇 가지 용어를 정의하고 시작하려고 한다. 크게 중요하게 느껴지지 않을지도 모르는 용어 정의이지만 다른 개발자, 특히 외국 개발자와의 명확한 의사 소통을 위해서는 용어의 정확한 뜻, 정확한 사용법 등을 아는 것이 많은 도움이 된다(고 필자는 생각한다).

스마트폰이 보급되에 스마트폰용 어플리케이션 작성에 대한 관심이 어느 때보다 높아지고 있는 최근, 개발을 시작하려고할 때에 가장 먼저 듣게 되는 용어를 뽑으라면 '운영체제(OS)', '프레임워크', '플랫폼' 등일 것이다. 이 용어들에 대해 간단하게 알아보자.


운영체제(operating system)

운영체제는 CPU, 메모리, I/O 장치, 저장장치 등의 하드웨어 자원을 직접 관리할 뿐만아니라, 응용 프로그램이 이들 하드웨어 자원을 손쉽게 사용할 수 있도록하는 추상화 계층을 제공하는 시스템 소프트웨어를 말한다. 또한 응용 프로그램이 하드웨어의 CPU에서 직접 수행될 수 있도록하는 역할도 한다. 멀티태스킹을 지원하는 운영체제의 경우에는 동시에 실행되고 있는 여러 개의 응용 프로그램에 대한 자원 관리나 스케줄링 등의 기능도 지원한다.

대표적인 PC 운영체제로는 Microsoft Windows, Linux, Max OSX 등이 있다.


프레임워크(framework)

프레임워크는 정확한 의미를 가장 알기 힘든 용어 중의 하나라고 생각된다. 응용 프로그램 개발 과정을 살펴보면 각종 응용 프로그램에서 유사한 형태의 기능을 사용하는 경우가 많은데, 이 경우 개발자의 부담을 덜어주기 위해 프레임워크에서는 해당 기능에 필요한 API들을 묶어서 제공한다. 일반적으로는 이러한 API 집합 들을 프레임워크라고 본다. 물론 정확한 의미를 따지면 단순히 API 뿐만 아니라 코딩 패턴 등을 포함하기도 한다.

개발자의 입장에서는 라이브러리와 유사하다고 느낄 수도 있지만, 프레임워크는 그 프레임워크를 사용하는 응용 어플리케이션의 틀과 구조를 결정하며, 라이브러리와는 반대로 개발자의 코드를 직접 제어할수 도 있다.


플랫폼(platform)

위키백과(http://ko.wikipedia.org)의 내용을 요약하면 플랫폼은 '응용 프로그램의 동작을 가능하게 하는 하드웨어 아키텍처와 소프트웨어 프레임워크'를 말한다. 구체적으로 플랫폼은 '하드웨어 아키텍처, 운영체제, 프로그래밍 언어, 런타임 라이브러리, GUI' 등을 포함한다. 즉, 안드로이드 플랫폼이라고 한다고 해서 구글에서 배포하는 '안드로이드'만을 의미하는 것이 아니라, 그 안드로이드가 동작하기 위해 필요한 하드웨어 아키텍처부터 안드로이드 응용 프로그래밍 작성을 위한 개발 환경, 안드로이드가 사용자에게 보여지는 GUI까지 모두 포함한다.

예를 들어 설명을 하면, PC 플랫폼은 Intel 또는 AMD CPU를 기반으로 하는 하드웨어 아키텍처에 윈도우나 리눅스가 운영체제 및 GUI 지원을 위해 올라가고, 윈도우 및 리눅스용 응용 프로그램 개발/실행을 위한 라이브러리나 개발 툴 등을 포함한 것이라 할 수 있다.

대표적인 휴대용 기기 플랫폼은 iOS, 안드로이드, 바다 등을 들 수 있는데, 대부분 ARM CPU를 기반으로 하는 아키텍처를 채용하고, 각각의 OS 및 SDK 등을 제공한다.


명확하게 정리되지는 않지만, 위의 내용을 토대로 운영체제, 프레임워크, 플랫폼에 대해서 정리를 해보면, 플랫폼이 운영체제와 프레임워크를 포함한다는 것을 알 수있다. '안드로이드 플랫폼'을 예로 들면, 이 '플랫폼'은 ARM CPU를 기반으로 한 하드웨어 아키텍처 위에 리눅스를 '운영체제'로 탑재하고, 응용프로그램 작성 및 실행을 위한 어플리케이션 '프레임워크'들 을 포함하고 있다.

각각의 구성 요소에 대해서는 아래에서 자세히 설명하려고 한다.





안드로이드 플랫폼 아키텍처(Android Platform Architecture)

안드로이드 플랫폼 아키텍처에 대해서는 구글 안드로이드 개발팀의 Mike Cleron이 설명한 동영상 강의가 있다. 아래 링크에서 직접 볼 수 있으며, 아래 글의 내용도 이 동영상 강의 중의 일부를 정리한 것이다.

[동영상 바로가기] Androidology - Part 1 of 3 - Architecture Overview


System architecture

전체적인 구조를 먼저 살펴보기 위해 다음 그림을 보자.


안드로이드 플랫폼은 운영체제로 Linux Kernel을 사용하고 있으며, 이 위에 Library, Android Runtime, Application Framework, Application 등을 포함하고 있다.



Linux Kernel


안드로이드 플랫폼은 Linux 2.6 커널을 기반으로 하고 있으며, 이 리눅스를 HAL(Hardware Abstraction Layer)로 사용하고 있다. 안드로이드 플랫폼에서 리눅스를 채택한 이유는 이미 각종 드라이버에 대한 지원이 충분하고, 메모리 관리, 프로세스 관리, 보안 모델, 네트워킹 등 많은 운영체제 기본 요소들이 이미 구현되어 있고 또한 충분한 시간 동안 검증을 받았기 때문이다.



Libraries

안드로이드 플랫폼에 포함된 라이브러리들은 모두 C나 C++로 작성되었다. Mike는 이 부분이 안드로이드 플랫폼의 강력함의 원천이라고 설명한다.


Surface manager: 실행되는 여러 어플리케이션이 화면에 어떻게 나타나는지를 관리한다.
OpenGL/ES, SGL: 안드로이드 플랫폼 그래픽 라이브러리의 핵심. OpenGL/ES는 3D 그래픽을 지원하며, 장치에 따라 H/W 가속 기능 또한 지원한다. SGL은 대부분의 어플리케이션이 사용하는 2D 그래픽을 위한 것이다. 안드로이드 플랫폼의 그래픽 라이브러리 특징 중 흥미로운 점은 한 어플리케이션에서 3D 그래픽과 2D 그래픽을 혼합해서 사용할 수 있다는 점이다.
Media Framework: Media Framework는 OHA(Open Handset Alliance)의 회원인 PacketVideo에서 지원되는 라이브러리로, 미디어 지원을 위한 각종 코덱을 포함하고 있다.
FreeType: Font를 그려주기 위한 라이브러리
SQLite: Data 저장
WebKit: 구글 브라우저의 코어로 사용되고 있는 오픈 소스 브라우저 엔진으로 모바일 장치의 작은 화면에서도 잘 동작하도록 수정되어 있다.



Android Runtime


Dalvik Virtual Machine: .Class, .Jar 파일을 변환(converting)해서 얻어지는 바이트코드(bytecodes)인 .dex 파일을 실행한다. .dex 파일은 저성능 프로세서(small processor)에서도 잘 동작하도록 효율적인 메모리 사용, 프로세스간 데이터 공유를 위한 자료구조 등을 지원한다. 이러한 효율성 덕분에 Dalvik Virtual Machine은 동시에 여러개의 인스턴스를 실행해서 어플리케이션을 실행할 수 있다.
Core library: Java 언어로 쓰여진 부분으로, Container, Utility, I/O 등 필수적인 기능을 제공한다.



Application Framework

Core library와 마찬가지로 Java 언어로 쓰여진 부분으로, 실제로 대부분의 어플리케이션이 사용하는 툴킷이다.


Activity manager: 어플리케이션의 Life Cycle을 관리하고, common backstack을 포함하고 있어서 다른 프로세스에서 실행 중인 어플리케이션들간의 원활한 이동(navigation)을 지원한다.
Package manager: 장치에 어떤 어플리케이션들이 설치되어 있는지, 각각의 어플리케이션이 어떤 기능을 수행하는지를 관리한다.
Windows manager: 화면에 보이는 Window를 관리하는 부분으로 Library 부분의 Surface manager에 대한 Java 추상화 모듈이라고 볼 수 있다.
Telephony manager: 전화 기능 지원을 위한 API들을 포함하고 있다.
Content provider: 안드로이드 플랫폼의 특이 사항 중 하나로, 어플리케이션간의 data 공유를 가능하게 해주는 역할을 한다. 폰의 전화번호부(contacts) 어플리케이션이 Content manager를 사용하고 있어서, 전화번호나 이름 등의 데이터를 필요로하는 어플리케이션에서는 이를 이용해서 데이터를 가져다 쓸 수 있다.
Resource manager: 지역화된 문자열, 비트맵/벡터 이미지, 레이아웃 정의 파일 등 어플리케이션에서 코드 이외의 부분을 관리한다.
View system: 버튼, 리스트 등과 같은 UI 구성 요소를 제공하며, 이벤트 dispatching, 레이아웃, 드로잉 등을 관리한다.
Location manager: GPS 등을 이용한 위치 기반 서비스에 필요한 기능을 제공한다.
Notification manager: 상단의 Notification bar를 사용할 수 있게 해준다.
XMPP service: XML을 기반으로 한 메세지 기반 미들웨어를 위한 오픈 표준 통신 프로토콜인 XMPP(eXtensible Message and Presence Protocol)을 제공한다.



Applications


전화걸기, 전화번호부 등 기본 어플리케이션 및 사용자 설치 어플리케이션이 위치하는 부분으로, 모든 어플리케이션은 바로 아래의 Application framework에서 제공하는 기능을 이용하여 만들어진다.




한두페이지의 글로 하나의 플랫폼에 대한 이해를 한다는 것은 불가능한 일이지만, 간략하게 안드로이드 플랫폼의 기본 구조에 대해서 정리해 보았다. 일반적인 사용자 어플리케이션을 작성하는 개발자라면 특별히 몰라도 되지만, 아는 만큼 더 나은 어플리케이션을 작성할 수 있지 않을까 생각한다.


댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 소혼 2011.04.20 09:09 신고

    추가로 WebOS가 뭔지 정리 부탁해도 되까? ㅋㅋ



티스토리 툴바