안드로이드에 대해서 관심없어 하다가 공부 시작.. ^^;; 3년이 지난동안 무관심했음.. 하하~

(임베디드 개발 경험담, 배경)
기존의 임베디드 자바인 j2me(cldc, cdc포함), pJava 에서는 가장 큰 문제는 성능이슈와 UI 였다.
느린 동작 그리고, UI 프레임웍은 허접해서 개발자가 많은 것을 해야 했다. 그러다 보니, 어플개발자(UI 개발자)가 상당히 능력자였어야 했다. 성능 이슈를 어플 개발자가 책임져야 했다.
jvm 자체가 운영체제 위에서 포팅되다 보니 멀티 플랫폼은 되었지만, 성능은 native 보다 훨씬 느릴 수 밖에 없었다. 경쟁사는 특정 플랫폼에 포팅시켜 (다른 플랫폼에 포팅할 수 없는) jvm 자체를 선보이며 빠르다고 홍보했다. 멀티플랫폼 지원 jvm은 혁신이 필요했지만... 단일 프로세스로 동작하는 jvm은 한계가 있었다..

다른 프로젝트를 시작하였다.
jni을 많이 사용하고 c/c++쪽으로 로직이 많이 들어가게 하고, 껍데기만 java쪽으로 두게 했다. 성능은 조금 나아진 듯 했으나 쉽지 않았다. 메모리 관리도 사람손을 타게 했지만, 역시나 쉽지 않았다.
임베디드 자바는 한계가 들어났다.

기존의 j2me 어플들은 어플 시작과 함께 jvm이 시작되었다. 이 때문에 로딩시간이 꽤 길어졌다. 그리고, 어플이 종료하면 jvm이 종료되었다. 어플에서의 메모리릭을 해소시킬 수 있는 장점이었지만, 긴 로딩시간을 사용자가 참아낼 수 없었다.
계속 jvm을 띄우는 셋탑박스 미들웨어의 경우는 어플에서 잘못 관리한 메모리릭때문에 jvm까지 죽는 현상이 발생되었다. 이런 것들을 해결하기 위해서 private api를 만들어서 관리했어야 했다.

wipi라는 한국 표준 플랫폼이 나왔다. AOT 라는 기술을 사용했고, 기술적으로는 속도를 빨리 해줄 수 있었지만, 어플 개발자들이 통신사를 통해서 무엇인가를 해야 하는 환경에 대한 불편함, 개발에 대한 불편함이 존재했다.

자바가 좋긴 하지만, 임베디드 환경에서는 꽤나 고전이었다.
어쩌면 개발 플랫폼, 라이브러리, API, JVM 모든 부분에서 뜯어고쳐야 할 상황이었다.

안드로이드 내부구조를 살펴보니, 딱이었다. 단순히 UI API (UI Layout도 많이 고민했었어.) 만 풍성한것 뿐 아니라 저용량 달빅 vm, 리눅스 커널과 리눅스의 장점을 가진 내부 구조, IPC 기반으로 만들어 적절하게 모듈화하여 개념을 깔끔히 정리한 점에서 아주 훌륭한 솔루션이라고 생각이 들었다.

안드로이드 어플을 짜면서, 이렇게 쉽게 개발이 가능한가 할 정도로 잘만든.. 것들..
얘들아.. 에뮬레이터때문에 짜증난다고 하지마라... 초창기에 비하면 정말 꿈인것을.. 이정도만 해도 진짜 잘하고 있다는 것을..

초창기때는 메모리(foot print)도 잘 인지 하지 못하고 그냥 짜는 개발자도 있었다. 그 중에 나도 하나였고, 그냥 개발에만 집중했었다. 아무도 핸드폰이나 셋탑박스에 대한 메모리 구조를 설명해주는 사람도 없었다. 그냥 모두 아무 상관없이 개발했다. 특정 어플때문에 문제 생기면 한군데 모아놓고, 해결하라는 모 회사 회의실..
지금은 안드로이드가 알아서 죽여준다.. 이런 시스템이 어디에 있나..^^;;
진짜 잘 만든 안드로이드. 구글 너희들은 참 머리가 좋아.. 인정..


=================================================



* 안드로이드 어플 개발 공부를 4일 정도 한 상태 (기본 개념은 알고 상태)

* 인사이드 안드로이드 - 위키 북스 책을 보았다. 이틀에 걸쳐 반정도는 정독, 나머지는 속독했다.
책이 훌륭하다. 약간 내용이 서로 맞지 않는 부분을 제외하고는 많은 공을 들인 책이다.
이 책 보고 나니, 안드로이드 내부 구조와 관련된 PPT는 눈에 쏙쏙~~


* 2008 Google I/O : Anatomy & Physiology of an Android
PPT 자료
http://sites.google.com/site/io/anatomy--physiology-of-an-android/Android-Anatomy-GoogleIO.pdf?attredirects=0
동영상 자료
http://sites.google.com/site/io/anatomy--physiology-of-an-android


* 2008 Google I/O : Inside the Android Application Framework
PPT자료
https://docs.google.com/present/view?id=ddfdgz6g_2464vthp5cdc
동영상 자료
http://sites.google.com/site/io/inside-the-android-application-framework


* 2008 Google I/O : Dalvik Virtual Machine Internals
PPT자료
http://www.imamu.edu.sa/dcontent/IT_Topics/java/2008-05-29-presentation-of-dalvik-vm-internals.pdf
동영상 자료
https://www.youtube.com/watch?v=ptjedOZEXPM&feature=player_embedded#at=108


* 칸드로이드 자료
http://www.kandroid.org/board/data/board/history/file_in_body/1/kandroid_for_jco_20090228_final.pdf
http://www.kandroid.org/board/data/board/history/file_in_body/1/kandroid_for_kiise_final_pt1.pdf
http://www.kandroid.org/board/board.php?board=history&command=body&no=21


* 안드로이드 소스
http://android.git.kernel.org/


* 안드로이드 개발자 싸이트
http://developer.android.com/index.html
Posted by 김용환 '김용환'