KIT라는 곳에서 2010년도에 발표된 Analysis of the Android Architecture에 대해 번역을 한 글입니다.
원본은 http://os.ibds.kit.edu/downloads/sa_2010_braehler-stefan_android-architecture.pdf이며, 중간중간 개인적인 주석은 () / *로 처리하겠습니다.
간단하게 아키텍쳐를 이해하는데 도움을 얻으려 번역을 하고 공유하려 합니다.
(일부 오역 및 의도가 잘못 전달 되었을 수도 있습니다. 양해부탁드립니다)
1. 안드로이드 소개 및 개요
스마트폰과 태블릿은 점점 더 인기가 많아지고 있으며, OS의 중요성은 점점 중요해지고 있다.
안드로이드와 같은 OS는 배터리에 의해 돌아가는 기기에 탑재가 됩니다. GPS, 카메라, 플래시, 회전센서, WIFI와 전화 등의 기능을 탑재하고 있으며 터치스크린이 가능합니다. 모든 OS가 그렇듯 안드로이드는 어플리케이션을 위와 같은 하드웨어 특성을 이용해 어플리케이션의 제작이 가능합니다.
애플의 iOS, 팜의 webOS나 심비안 등 다른 모바일 운영체제와 다른 점은 안드로이드는 Java를 프로그래밍 언어로 사용하며 가상머신에서 돌아간다는 것입니다. 안드로이드는 Dalvik 가상 머신에서 동작을 하며 어플리케이션은 Byte Code로 변환되어 실행되게 됩니다. Dalvik은 핵심적인 부분이며 모든 안드로이드의 어플리케이션 프레임워크는 Java 언어를 사용해 Dalvik에서 실행이 되게 됩니다. 다른 플랫폼과 마찬가지로 안드로이드 앱은 '안드로이드 마켓'에서 다운받을 수 있습니다. (현재는 안드로이드 마켓에서 구글플레이로 변경되었습니다.)
* 플랫폼에 대한 정의
플랫폼이란 방대하고 뭉떵그려 이야기가 되는 만큼, 사람마다 정의가 다를 수 있으며 '딱 이거다'라고 말하기가 어려운 부분이라, 간단하게 부연설명을 붙입니다. (이 부분은 어느 컨퍼런스에서 들은 말을 기초로 잡아 제 나름대로 정의를 잡은 플랫폼에 대한 정의입니다.) 플랫폼이란 말은 하드웨어와 개발환경(툴을 포함) 그리고 소프트웨어입니다. 위키피디아에서는 간단히 정의해 소프트웨어가 돌아가기 위한 기반이라고 설명을 하고 있지만, 정확하게 이야기해 위 세가지를 모두 포함이 되어 소프트웨어가 돌아가게 되는 것에 필요한 것이라고 정의를 내립니다. (소프트웨어가 돌아갈 수 있는 하드웨어, 소프트웨어를 개발하기 위한 IDE, 라이브러리 등 총체적인 개발환경, 그리고 최근에는 소프트웨어도 플랫폼화 되어가기 떄문에 위 세개로 정의를 내렸습니다.)
안드로이드는 Android Inc에 의해 만들어진 플랫폼이며 Android Open Source Project(AOSP)는 2007년 구글이 인수했습니다. 78개의 회사들이 Open Handset Alliance (OHA)가 함께 개발을 하고 안드로이드에 공헌을 했습니다. 안드로이드는 무료이며, BSD와 아파치에 의해 라이센스가 획득되어 있습니다.
안드로이드의 개발은 굉장히 빠르게 진행되었으며 몇달사이에 대표적인 OS로 자리매김했습니다. 이러한 상황을 주도하게 된건 플랫폼에 대한 정보를 쉽고 빠르게 얻을 수 있었으며 소스에 대한 책과 기사들이 개발환경을 빠르게 구축했기 때문입니다. 방대하지만 정리가 잘되어있는 SDK문서와 코드에 대해 적어놓은 전문적인 블로그들이 많은 힘이 되었습니다.
1.1. 구조
안드로이드 Software stack은 다음 그림과 같이 다섯개의 레이어로 구성되어 있습니다.
Kernel과 low level tool, native libraries, android runtime, framework layer로 구성이 되어 있으며 가장 상단에서 앱이 구동되게 됩니다.
초록색 부분은 C/C++로 작성된 Library들입니다. 파란 부분은 Java로 짜여졌으며 Dalvik VM에서 구동됩니다.
Kernel부분은 Linux 2.6을 사용하며, (2010년도 당시 안드로이드는 최초 2.6version에서 제작이 되었으며, Android 4.0 Ice Cream sandwich 버전부터는 3.x대 버전을 사용했다고 합니다. 혹여나 이 커널의 업데이트가 속도상승의 주요원인이였는지는 조금도 공부해봐야 될것 같습니다) 전력관리, 메로리관리와 runtime 환경을 제공합니다.
안드로이드의 목적은 main memory의 점유율을 적게 하고, 전력의 효율을 높이며, 기기에 최적화된 (특히 민감한) CPU와 GPU에 대한 라이브러리를 이용해 Device에서 구동하는 것입니다. Basic libraries like the libc or libm were developed especially for low memory consumption and because of licensing issues on Android.
이 레이어에서는 surface manager가 framework layer으로부터 받는 터치를 Window manager를 통해 핸들링합니다.
1.2 버전 History
안드로이드는 발표되지 얼마되지 않았지만, 개발속도가 매우 빠릅니다. 새로운 버전이 매달마다 발표되었습니다.
(이 부분은 이제 더 이상 해당되지 않는 이야기겠네요. 현재는 거의 매년마다 새로운 버전을 발표하고 있으며, 버전업데이트를 따라가기 버거운 제조사의 요청과 안드로이드의 기기에 대한 파편화 때문이라는 말도 있긴 하지만, 그동안 구글 내에서 안드로이드 진영과 크롬 진영이 묘한 분위기를 보이고 있으며, 아마 업데이트 속도가 점점 더 느려지지 않을까 합니다.)
버전 History에 대한 내용은 논문에 빈약하게 설명이 되어 있어, 따로 위키피디아의 링크를 겁니다. (http://en.wikipedia.org/wiki/Android_version_history)
'옛글 > 번역본' 카테고리의 다른 글
프로그래밍 Design Pattern 이해하기 - 1 스트래티지패턴 (0) | 2014.07.29 |
---|---|
Java Generic Programming Guide #1 (0) | 2013.11.14 |
안드로이드 아키텍쳐 (Analysis of the Android Architecture) #2-2 안드로이드 구조 (3) | 2013.10.25 |
Object-Oriented Programming Concepts 객체지향의 컨셉 (0) | 2013.10.18 |
안드로이드 아키텍쳐 (Analysis of the Android Architecture) #2-1 안드로이드 구조 (0) | 2013.10.15 |