본문 바로가기

Software for Life

구글의 안드로이드(Android)에 대한 짧은 생각들

지난 10회 자바 컨퍼런스에서 "Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석"이란 주제로 안드로드이에 관한 세션을 들었습니다.

예전에 모바일 관련 어플리케이션을 개발한 경험이 있는 관계로 임베디드 환경에 상당히 많은 관심을 가지고 있었습니다. 지금은 오래된 일이지만, 아직도 임베디드 환경에서 개발하던 예전 시절을 생각하며, 임베디드 환경에 맞는 어플리케이션을 개발하고 싶은 꿈을 가지고 있었습니다.

마침 들풀이란 닉네임으로 유명하신 양정수님께서 자바 컨퍼런스에서 구글(Google) 안드로이드(Android)의 핵심이라고 볼 수 있는  "Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석"에 관한 세션을 진행하셔서 안드로이드에 관한 좋은 설명을 듣게 되었습니다.

역시 구글의 정밀함과 기술력을 확실히 알 수 있는 좋은 세션이었습니다. 몇가지 감명깊에 들은 이야기를 정리하면 다음과 같습니다.



안드로이드의 사상입니다. 모든 플랫폼에서 가장 중요한 것이 사상인것 같습니다. 사상이 바르고 공정해야 그 플랫폼 위에서 움직이는 어플리케이션이 바르고 안정적으로 움직일 수 있습니다.

안드로이드가 뛰어난 플랫폼이라고 생각되는 부분이 바로 이 바르고 공정한 플랫폼이라는 점입니다.
모든 어플리케이션은 동일하다. 안드로이드는 폰의 기본 어플리케이션이나 제3자의 어플리케이션을 차별하지 않는다. 그것이 다이얼하는것이든 또는 홈 스크린이든 교체가 가능하다.
All applications are equal. Android does not differentiate between the phone's basic and third-party applications -- even the dialer or home screen can be replaced.

출처: http://adamac.blogspot.com/2007/12/replacing-android-home-screen.html

안드로이드를 처음 구동하면 홈 스크린(Home Screen)이란 것을 구동합니다. 즉 바탕화면 관리자 정도 되나요? 여튼, 이 홈 스크린을 통하여 다른 어플리케이션에 접근할 수 있습니다. 바탕화면에서 아이콘을 통하여 자신이 원하는 어플리케이션에 접근하는 개념이란 동일하죠..

헌데, 이 홈 스크린도 구글이 제공해주는 것을 사용할 수도 있고, 여러분들이 만든 것을 사용할 수 있습니다.

출처: http://www.jco.or.kr/c?mc=conference&sc=pds 중 "[2009, 10회] Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석" 에서


이 스크린 샷이 컨퍼런스에서 본 화면인데요~ 잘 보시면 홈을 선택하게 되어 있습니다. 홈 스크린은 나름대로 중요한 위치에 있는 어플리케이션입니다. 홈 스크린이 고정되어 있다면, 사실 여러분들이 쓰고 싶지 않은 어플리케이션도 홈 스크린에 존재한다는 이유로 써야할 수 있습니다.

대표적으로 원도우스(Windows)에 기본 탑재되었던 인터넷 익스플로러(Internet Explorer)입니다. 이 인터넷 익스플로어는 제 기억에 분명히 넷스케이프보다 성능이 떨어지는 웹 브라우져 어플리케이션이었습니다. 하지만 성능이 떨어져도 기본 탑재되어 있기 때문에 자연스럽게 사용하기 시작했습니다. 넷스케이프는 다시 깔아서 써야 했기 때문이죠. 그 덕분에 인터넷 익스플로러가 세계에서 가장 많이 사용되는 웹 브라우져가 된 것입니다.

홈 스크린에 어플리케이션을 자연스럽게 껴서 넣는다면 자연스럽게 어플리케이션 사용율이 높아질 것이고 해당 분야에 세계 최고의 어플리케이션이 될 수도 있는 것입니다.

하지만, 구글은 역시 구글답게 홈 스크린도 선택하도록 하였습니다. 여러분들이 좋아하는 어플리케이션을 구동하기 쉽도록 재 구성한 홈 스크린을 사용할 수 있다는 것입니다. 아... 얼마나 구글다운 오픈 마인드(Open Mind)입니까?

사실 전 이 사실 하나만으로도 안드로이드의 장래가 매우 밝다고 생각합니다. 모든 것을 열어놓고 시작하는 이 정신이 안드로이드의 가치를 빛나게 해줍니다.



두번째로 재미있는 개념이 Zygote란 개념입니다.

출처: http://www.jco.or.kr/c?mc=conference&sc=pds 중 "[2009, 10회] Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석" 에서



상기 그림에서도 설명이 나와 있는데요, 미리 Fork된 프로세스이지만, 마치 빈 껍대기 정도의 상태로 존재하는 프로세스입니다. 그리고 어플리케이션의 Run될때 바로 이 Zygote를 통해서 안드로이드 기반의 프로세스를 바로 실행시키는 구조입니다. 아~ 멋집니다.

미리 공통적으로 필요한 라이브러리들을 탑재한 상태로 반쯤 생성된 프로세스에 실제 핵심이 되는 어플리케이션의 로직을 태워, 해당 어플리케이션을 구동시키는 방법이라고 할 수 있습니다. 당근 어플리케이션 구동 속도가 엄청 빨라지겠죠~

사실 안드로이드에 관심있는 분이라면 한번쯤 들어보셨을 것입니다. 저도 들어는 봤었지만, 정확한 개념이해가 되지 않았는데, 이번 세션을 통하여 명확하게 이해할 수 있었습니다. 아싸~ 하나 건졌다 :-)



또 하나의 재미있는 부분이 달빅(Dalvik)이란 가상머신(Virtual Machine)에 관한 개념입니다.
달빅 자체는 매우 아래와 같은 환경을 고려한 Bytecode Interpreter입니다.
  • Slow CPU (250-500 MHz)
  • RAM Usage : Low-level : 20M, High-level : 24M (system library : 10M)
  • Little RAM (64MB) : Available RAM : 20M
  • Bus speed : 100MHz
  • Data Cache : 16~32K
  • No swap space,  Battery power

역시 혹독한 임베디드 환경을 고려하고 있네요.. 제가 모바일 어플리케이션을 작성할때 환경보다는 조금 나아졌습니다. 8 Gray 폰이나 16Gray 폰에 64Kbyte짜리 어플리케이션을 짜던 환경말이죠..

이러한 느린 CPU위에 돌아간다는 가정하에 달빅이란 가상머신을 돌리기 위한 최적화의 노력이 눈물겹습니다.


상기 Java 코드를 Bytecode로 변환하였을 경우에 Java VM과 Dalvik VM의 차이입니다.
Dalvik VM의인스트럭션이 상당히 적습니다. 즉 CPU가 처리해야 할 일이 그만큼 적다는 의미입니다.

일반적인 Java VM은 스택에 인스트럭션을 쌓아서 하나 하나씩 처리하는 반면, Dalvik VM은 ARM 프로세서에 최적화하여 인스트럭션 수를 줄였습니다. 즉 이터레이션(Iteration)을 한다는 의미인데요, 이터레이션을 할때 스택에 쌓을 것들을 변수로 처리하여, CPU의 연산횟수를 줄이는대신 인자는 늘어나게 됩니다. 결과적으로는 CPU의 처리 사이클이 줄어들게되지만, 스택대신 이터레이션을 사용하므로 Dalvik VM이 각 CPU 프로세서에 최적화되어 있어야 가능합니다.

이런 일들을 멋지게 처리해 놓았습니다. 앞으로 안드로이드의 성능도 좋을 것 같습니다.
이 외에도 여러 재미있는 이야기들을 들었습니다. 깊이있는 내용을 차근 차근히 잘 설명해주신 양정수님에게 감사드립니다.

참고로 양정수님은 Korea Adroid(http://www.kandroid.org)의 운영자이시기도 합니다.

Korea Adroid(http://www.kandroid.org) 에서 2009 제3회 Korea Android 세미나를 준비중이십니다. 이번주 금요일에 있으시니 관심있으신 분들은 언릉 신청하세요~ 저도 가고 싶은 마음은 굴뚝인데.. 회사에 매인 몸이라.. 어떻게 될지 모르겠네요~ :-)
선착순 300명에게는 구글 T셔츠도 준다고 하네요~ 아마 국내 최고의 안드로이드 관련 세미나가 될 것 같습니다.

혹시 다녀오시면 후기도 점 부탁드립니다. ;-)
감사합니다.