티스토리 뷰

Hobby/Book

[Book] Embedded Android

생각많은 소심남 2015. 5. 2. 22:56

한달동안 읽어봤던 책에 대해서 감상평을 적어보고자 한다.



 아마 안드로이드하면 기술에 대해서 모르는 사람도 "아 폰에 있는 그거?" 하면서 알 것이다. 지금 우리가 쓰고 있는 스마트폰 형태로 나오기 이전에는 지능을 가진 로봇의 형태 라는 의미를 지녔던 안드로이드라는 단어가 이제는 스마트폰을 사용하는 사람이라면 누구나 사용하고 있을 법한 운영체제를 지칭하고 있다. 뚀 요즘에는 단순히 스마트폰에만 분야를 국한한게 아닌, wearable device나 embedded system의 운영체제로써 다양한 활용 형태를 보여준다. 물론 이 운영체제가 실제로 상용화되기 이전까지는 수많은 어려움이 있었지만 막상 구글에 의해서 나온 지금은 엄청난 파급 효과를 가져왔다.

 그러면 삼성이나 LG 같은 회사는 "어떡하면 이 안드로이드 플랫폼을 자사 상품군에 대응시킬 수 있을까" 하는 고민을 하게 된다. 대다수의 사용자가 사용하고 있는 이 운영체제를 다른 상품, 예를 들어서 로봇, 세탁기, 냉장고 같은데 쓸 수있게 되고, 그걸 하나의 기기에서 제어할 수 있게 된다면, 정말 삶은 편리해질 것이고, 그걸 구현한 회사는 수익을 창출할 수 있을 것이다. 물론 요즘에는 종속성이다 뭐다 해서 자사만의 운영체제를 개발하고 있지만, 아직까진 안드로이드의 영향이 큰 것을 부정할 수 없다.

 아무튼 그러면 그런 삼성이나 LG에 속한 엔지니어가 이런 운영체제를 그런 폰이 아닌 제품군에 적용시키기 위해서는 어떤 작업을 해야 할까? 우선 내가 생각하는 방법은 가장 선행되어야 할 부분이 Porting이라고 생각한다. 우리가 생활상에서 볼 수 있는 전자 제품들은 대부분 마이크로프로세서를 내장하고, 그에 따른 시스템을 내장하고 있다. 물론 그 종류가 각각 다르기 때문에 여기에 특화된 운영체제를 개발해야 한다. (물론 현재는 단순한 기능만 제공하기 때문에 지금과 같은 안드로이드를 그대로 그런 전자 제품에 올리려는 시도 자체가 시기 상조인듯 하다...) 결국 어떤 시스템에 안드로이드를 적용하는 Porting, extending, customizing 작업 자체가 우리같은 엔지니어가 해야 될 일이 될 것이다. 이번 포스트에서 소개하는 Embedded Android 도 그런 욕구를 가진 사람들의 지적 호기심을 충족시킬만 책인 듯 하다.

 

 참고로 책의 사진을 찍을때 일부러 Raspberry PI2와 같이 놓고 찍었다. 물론 자랑하려는 의도도 포함되어 있긴 했지만, raspberry PI 자체도 어쩌면 이런식으로 안드로이드를 포팅할 수 있는 좋은 embedded system 중 하나이다. 


 이 것도 크기가 일반 컴퓨터에 비해서 크기가 작을 뿐이지, 실제로는 Broadcom에서 만들어진 Arm 기반의 쿼드코어와 램, 그리고 Display가 내장된 작은 컴퓨터다. 또한 sd카드에 올라간 os 이미지를 읽고 부팅하는 형식이 되기 때문에 이 시스템의 환경에 맞는 운영체제, 안드로이드도 porting 하면 실행해볼 수 있다. (궁금한 사람은 여기를 참고해보길) 문제는 그 작업이 쉽지 않다는 것이다. 

 나도 사실 석사때 나름 운영체제 분야에도 걸쳐서 연구했기 때문에 뭔가를 포팅하고 직접 돌려보는 것에 관심이 많은데, 막상 시작하려고 하면 어디서 봐야할지 모르겠다. 물론 안드로이드는 이미 linux kernel을 차용해오고, 내부적인 구조도 어느정도 구현이 되 있기 때문에 뭔가 시작점만 알 수 있다면 할 수 있을거 같은데, 그걸 찾는게 어려운 것이다. 

 사실 그거에 대한 어느정도의 답은 이 책에서 제공하고 있다. 이 책이 다루는 부분은 우리가 보통 소스코드라고 부르는 Android Open Source Platform을 repo 명령어를 통해서 동기화하고 빌드하는 과정부터 시작해서, 실제로 개발이 완료되었을 때 daemon 같은 것을 통해서 debugging하는 방법에 대한 내용들을 담고 있다. 내가 속한 부서에서도 안드로이드가 적용된 폰 상에서 테스트를 하고 그 결과를 뽑아오는 작업을 많이 하는데, 이 책을 참조하면서 모르는 부분들을 찾아볼 수 있어서 좋았다. 아마 안드로이드를 직접 개발하는 시스템 개발자들은 알겠지만, 이렇게 한글로 잘 번역된 안드로이드 시스템 관련 책이 거의 없다. 시중에 나와있어봤자 대부분의 책이 안드로이드 어플리케이션을 어떻게 개발하냐를 주로 다뤘지만, 그 부분은 이렇게 뭔가를 포팅해야 하는 엔지니어의 관점과는 조금 거리가 멀다고 생각한다.(적어도 나는 그렇게 생각했다.) 약간 시스템 내에서 low level을 다뤄야 할 사람들한테는 이 책이 정말 도움이 될 듯 하다.


 무엇보다도 이책이 좋았던 부분은 내가 느끼기론 크게 3가지로 요약할 수 있을 거 같다.

 - 우선 글의 내용 자체가 하드웨어와 소프트웨어를 모두 포괄하는 내용이다. 앞에서도 잠깐 소개했지만 빌드 시스템에 대한 소개 내용, 기본적으로 적용되는 하드웨어의 기초와 실제 포팅시 고려해야 될 부분에 대한 설명, 그리고 실제로 debugging시 사용해야할 adb나 logcat의 사용법, 또 실제 부팅시 실행되는 필수 daemon들과 사용자가 만든 daemon을 어떻게 service 형식으로 적용할 수 있는지에 대한 설명이 담겨져 있다. 조금 길게 쓰긴 했지만, 아마 이책을 완벽히 이해했다면, 자신만의 기기에 자신만의 안드로이드를 올리고, 자신만의 서비스를 돌릴 수 있을 거 같단 생각이 들었다. 하드웨어와 소프트웨어에 대한 지식을 쌓으면서 말이다. 


 - 글의 진행 방식이 가상으로 직접 구현해보고 설명하는 방식으로 소개되어 있다. 이 책에서는 coyotePad라는 임의의 태블릿에다가 안드로이드를 포팅해야 할 경우, 어떤 과정을 거쳐야 할지를 순서대로 나열하면서 설명하고 있다. 물론 우리 주변에 coyotePad라는게 실제로 존재하는 device는 아니지만, 적어도 내가 포팅하고 싶은 게 있다면, 왠지 이 책에서 coyotePad에 안드로이드를 포팅하는 방식대로 해보면 괜찮을거 같다는 생각을 해보았다.


- 중간중간에 나오는 세부 지식과 코드와 병행된 설명 자체가 전체를 이해하고, 실제 그 위치를 AOSP 상에서 찾는데 도움이 많이 되었다. 사실 네이버에서 안드로이드 시스템에 관해서 검색해보면 연관 검색어로만 몇개 중복해서 나오지 실제로 써먹을 만한 정보가 조금 드문거 같다. 물론 이정도 개발할 위치라면 일반적으로 stackoverflow나 google등을 통해서 찾겠지만, 그래도 영어라는 장벽이 생각만큼 낮지는 않다. 그런 사람들한테는 정보를 쉽게 얻을 수 있는 통로가 될거 같다. 나같은 경우는 안드로이드 빌드시 ccache 적용하는 부분에서 실제로 우리 것을 빌드하는데 써보고 빨라지는 것을 경험했다. 물론 이부분에서 문제가 발생하기도 했었는데, 여기서 힌트를 얻고 해결한 케이스도 있었다.


 난 사실 책을 읽어볼 때 맨 앞장에 있는 추천사나 저자의 말같은 것을 읽어보고 들어가는 편인데, 읽을 때마다 사실 책을 팔기 위해서 그냥 넘겨서 하는 말이겠거니 싶었는데, 이 책의 추천사에는 공통적인 문구가 있었다. 

"임베디드 시스템 개발자가 안드로이드 시스템을 개발하는데 필요한 필독서"

이 문구 자체가 이 책의 내용을 함축적으로 담은 짧은 요약문이 아닐까 싶다. 뭔가 읽다보면 저자가 많은 시간동안 찾아놓은 기술 문서를 훔쳐서 읽는 듯한 느낌도 들고, 약방의 감초처럼 써먹을 만한 지식들(굳이 안드로이드에 국한되지 않더라도...)이 많이 포함되어 있어서, 아마 이 부분을 공부하는 사람들에게는 시스템에 대한 지식의 갈증을 해소시켜 줄수 있는 좋은 책이 될 거라고 생각한다.


(이 포스트는 한빛미디어에서 운영중인 한빛 리더스 활동의 일환으로 작성된 리뷰입니다.)

댓글