2014. 8. 14. 17:37

안드로이드 오픈소스 애플리케이션 아키텍처와 블록

Android Open Source Application Architecture and Block

 

안드로이드 애플리케이션 아키텍처 (젤리빈 기준)

 

 

● Java 코어
오라클이 만든 공식 Java 라이브러리는 애플리케이션의 최하위 계층으로 사용되고 있다. 이것은 기존 Java 생태계를 잘 흡수하기 위한 포석으로 볼수 있다.

 

● Java 써드파티
Java 표준은 아니지만, 앱 개발 시 필요한 네트워크, XML 설정, 테스트 등의 라이브러리를 탑재했다.

 

● 안드로이드 플랫폼
구글이 개발한 계층으로, 안드로이드 앱 개발 시에 필요한 범용적인 컴포넌트들을 제공한다. 각각의 컴포넌트들은 다음과 같다.

- graphics : 그래픽 처리 중 저수준의 API를 제공(canvases, color filters, points, rectangles 등)
- animation : 애니메이션 처리를 쉽게 할 수 있는 기능을 제공
- view : 스크린에 표시될 레이아웃과 사용자가 상호 소통할 수 있는 화면 제공
- widget : 사용자 애플리케이션 내부에 사용될 UI의 기본적인 구성을 제공하고 사용자가 이를 변경할 수 있음
- preference : 사용자 애플리케이션에서 설정을 쉽게할 수 있는 기능과 UI 제공
- gesture : 제스쳐를 사용자가 정의할 수 있고 쉽게 사용할 수 있도록 화면을 제공
- support : API 버전 업에 따른 UI 관련 하위 호환성을 위한 기능 제공
- webkit : 웹브라우저와 관련된 다양한 기능을 제공
- speech : 말을 통해 입력하는 기능을 제공
- accounts : 안드로이드 내부의 계정관리 기능 제공
- location : 위치정보와 관련된 기능 제공
- media : 다양한 멀티미디어(오디오, 비디오) 관련 기능 제공
- renderscript : 3D나 수학적 수식을 고성능으로 처리하기 위한 저수준 API 제공
- opengl : OpenGL ES와 관련된 인터페이스 제공
- test : 안드로이드 테스트와 관련된 기능 제공
- database : 데이터베이스와 관련된 기능 제공
- net : 기본적인 자바의 java.net. API 대신 네트워크와 관련된 기능을 쉽게 사용할 수 있도록 제공
- security : 안드로이드 보안과 관련된 기능을 제공
- drm : 보편적으로 사용할 수 있는 DRM 관련 기능 제공
- sax : SAX 핸들러 기능 제공
- inputmethodservice : 입력기와 관련된 API 제공
- accessibilityservice : 접근성을 높일 수 있는 장치 개발에 필요한 API 제공
- os : OS(operating system)의 기본적인 서비스들과 내부 통신을 처리함
- app : 안드로이드 애플리케이션 모델을 추상화해 처리하고 관리함
- appwidget : 홈스크린에 표시되는 앱 위젯을 관리함
- util : 보편적으로 사용하는 유틸리티성 메소드를 제공(date/time, base64 en/decoders, XML 등)
- hardware : 하드웨어와 관련된 기능 제공(카메라, 센서 등)
- bluetooth : 블루투스 기능 제공
- nfc : NFC(Near Field Communication) 기능 제공
- telephony : 휴대전화 시스템의 기본적인 상태를 모니터링할 수 있도록 제공(통신사, 전화번호, 전화 가능 여부 등)

 

● 구글 서비스
안드로이드 표준 라이브러리는 아니지만, 앱 마켓을 이용하거나 결제할 때 필요한 헬퍼 성격의 라이브러리들을 별도로 제공한다.

- GCM(Google Cloud Messaging) : 사용자의 안드로이드 단말기와 서비스 개발사가 구축한 서버간의 메세지를 주고 받을 수 있는 서비스다(푸시).
- Google Play In-app Billing : 구글 플레이(마켓) 서비스이며, 애플리케이션 내부에 있는 디지털 컨텐츠를 판매할 수 있는 시스템이다. 다양한 컨텐츠를 판매할 수 있다(미디어 파일, 사진, 가상 게임 포인트, 레벨, 프리미엄 기능 등).
- Google Analytics : 애플리케이션 내부에서 생성되는 데이터를 쉽게 수집할 수 있도록 만든 시스템이며, 웹애플리케이션에서 사용하는 구글 분석 서비스를 안드로이드에서도 사용할 수 있다.

 

 

안드로이드 오픈소스 애플리케이션 블록

 

 

● UI
안드로이드의 화면 단편화 및 버전 단편화로 인해 버전별로 제공할 수 있는 Widget 함수와 기능들이 상이하다. 액션바의 경우 3.X 버전 때부터 안드로이드에 추가됐지만, 2.X 버전의 사용자가 전체 안드로이드 폰 사용자의 40% 이상이므로 실제 배포되는 앱에는 적용할 수 없다. 또한 안드로이드는 커스텀 유저 인터페이스 컴포넌트를 만드는 데 많은 비용이 발생한다.

 

● 네트워크
독립형 애플리케이션보다 네트워크 기능을 제공하는 애플리케이션의 중요성이(앱 내부 결제나 소셜 서비스의 연동) 갈수록 높아지고 있다. 2012년 Distimo의 조사에 따르면, 네트워크 기반 애플리케이션의 매출이 전체 앱 시장의 72%를 차지한다. 하지만 안드로이드가 제공하는 네트워크 기능은 단순해서 애플리케이션 구축 시 많은 비용이 발생하는 영역이다.

 

● 공용부
안드로이드는 구글의 폐쇄적인 정책으로 인해 시장의 요구를 재빨리 반영하지 못하고 있다. 이런 이유로 애플리케이션에 필요한 로깅, 결제 모듈, 컴포넌트 설정부 등을 별도로 제공하지 않는다.

 

● 서비스로서의 백엔드
모바일 앱을 개발할 때 구글이 제공하는 백엔드 기능(푸시, 사용자 통계, 오류 리포트)은 품질이 떨어진다. 푸시 서비스의 경우 지연이나 손실이 발생하고, 에러 리포트 기능은 제한적인 정보만 제공한다. 그 때문에 모바일 개발에 필요한 백엔드 서비스를 직접 구축해야 하는 문제가 발생한다.

 

● Testing
안드로이드는 운영체제, 디바이스, 화면 단편화에 대응하는 Testing 기법을 제공하지 않는다. 이에 테스트 자동화가 불가능한 상황이다.

 

● Release Engineering
앱 마켓마다 상이한 결제 모듈, 다양한 오픈소스를 활용해야 하지만, 이것들을 관리하거나 지원하는 방법이 존재하지 않아 마켓별로 라이브러리를 수동으로 바꾸고 일일이 빌드하는 일이 허다하다.