간만에 포스팅하네요.
Android 교육을 5일가량 받았습니다. 그 교육을 받고 Android에 대해 이해하고 느낀점을 좀 정리하고자 합니다.

보통 교육이란게 대충 간보는 수준인데,
kandroid.org 운영자께서 강의한 이번 교육은 Android를 깊숙히 이해하는 계기를 마련해 주었습니다.
너무 재미있고, 흥미로운 교육이었습니다.
강사께서 실무경험도 굉장히 많고, Android 내부 메커니즘 피쳐와 구조를 잘 알고 있어서
이해가 잘 되게 가르쳐 주시더군요.
Android에 관심있으신 분이라면 꼭 강추하고 싶은 교육입니다.

Android를 접하고나서 느껴지는 부분은 Google표 Linux 배포판 같다라는 점입니다.
Android 자체가 하나의 완전한 OS입니다.
우선 Android가 사용하는 Linux Kernerl은 표준 커널(이른바 바닐라 커널)과 다릅니다.
임베디드 환경에 맞게 몇가지 커스터마이징이 되어 있는데요.
예를 들어 바닐라 커널이 사용하는 표준 C library를 경량화시킨 bionic 이라는 라이브러리를 만들어 사용하고 있습니다.
또한 프로세스간 통신 최적화를 위해 Binder를 제공합니다.
그리고 중요한 점은 Android 커널이 공식 지원하는 칩셋이 ARM 코어(툴체인은 ARMv5~ARMv6까지만 제공)입니다.
x86을 지원하기 위해서는 커널을 수정해야겠죠. (Android 넷북 출시하려고 아수스에서 이 작업을 하고 있습니다.)
커널 상위 프레임워크는 C/C++ 코드로 짜여진 라이브러리를 JNI로 호출하는 Java 코드들로 구성되어 있습니다.
속도 문제 해결과 동시에 Java 개발자들을 포섭하기 위한 전략으로 보여집니다.
그리고 특이하게도 Java VM이 아닌 Dalvik VM이 사용되는데, sun사의 라이선스 우회와 더불어 Java 코드의 최적화를 위해 VM을 직접 만든 것으로 보입니다.
따라서, javax.* 라이브러리 및 RMI 지원이 안됩니다. RPC 메커니즘으로 AIDL이라는 자체 스펙이 제공되는데.. 이것이 정확히 분산환경에서 사용될 수 있는지는 아직 확인 못 해봤습니다.
Android 응용 어플리케이션 데모 코드를 몇개 만들어본 결과… 마치 Eclipse 플러그인 만드는것과 유사하다는 느낌입니다.
메시지 전달 메커니즘과 콜백 함수 호출 등… Java UI 개발에서 사용하는 기본적 사상이 그대로 적용된거 같습니다.
그렇기 때문에 커널을 제외한 App 개발에 많은 Java 개발자들이 금방 익숙해질것 같군요.
그대신 몇가지 독특한 개념이 존재하는데… 화면 네비게이션 스택을 관리하는 Task, 이벤트와 비슷한 Intent, 프로세스 풀과 비슷한 Zygote는 개념 등이 특이합니다.
또 한가지…
보통 임베디드쪽은 개발 환경이 열악한데, Android는 개발 환경이 정말 잘 만들어져 있다는 것이 강점입니다.
개발 환경인 Eclipse의 플러그인이 버전 0.9임에도 불구하고 편리성과 완성도가 높습니다.
특히 제공되는 에뮬레이터가 가상화 기반이어서, 리얼 타겟과 같은 수준의 환경이 제공됩니다. (에뮬레이터 가상화 이미지를 그대로 리얼 타켓으로 이식해도 된다고 합니다.)
에뮬레이터가 linux 가상 머신으로 작동하기 때문에 터미널 접속이 됩니다.
하지만, 무엇보다 이 모든 것이 오픈소스라는 게 제일 큰 강점이겠죠
교육 중 데모로 해봤던 것이…
화면 UI 개발(이벤트 주고, 받기), 네트웍에 의한 제어, SQLite DB 및 file I/O, 비디오/오디오 플레이, OpenGL에 의한 3D 디스플레이, 구글맵 네비게이션, 중력 센서 인식 등 입니다.
로봇, PMP 하시는 분들도 Android에 관심이 많으시더군요… 요즘 임베디드 대세는 Android인 듯.
여튼, 임베디드에 성큼 다가갈 수 있었던 재미있는 교육이었습니다.
Android 계속 해야겠지요?