PhoneGap Vs. Appspresso
Hybrid Mobile Web App을 개발하기 위해서는 개별(iPhone, Android) 플랫폼에서 제공되는
WebBrowser Component에 해당하는 WebView를 이용하면 Native API를 제공하도록 구성하면
웹기술을 이용하여 Device API까지 지원하도록 개발 할 수 있습니다.
하지만, 이와 같은 작업을 모두 개별적으로 진행하는 것 보다 더 좋은 방법은 이미 필요한 만큼의 기능을 제공하는
Hybrid Framework/Library를 이용하는 것입니다.
이런 Hybrid Framework에는 전 세계적으로 가장 유명한 Phonegap(Cordova)가 있고, 국내의 Appspresso가 있습니다.
이번에 이 두개의 Framework를 비교해 볼까합니다.
구력과 지명도
우선 이름값은 Phonegap이 높습니다.
Mobile Web Framework/Library로 유명한 SenchaTouch와 jQueryMobile 사이트의 문서에도 PhoneGap이라는 단어는
아주 쉽게 찾을 수 있을 만큼 사람들에게 많이 노출되어 있습니다.
게다가 작년 하반기 웬만한 사람은 다 아는 Adobe사에 흡수 합병되기도 했으니 그 유명새와 이름값은 더 높아 졌습니다.
오픈소스로 운영되기 위해 Apache 프로젝트에 흡수되어 Cordova라는 인큐베이션이 시작되기도 했습니다.
그에 반해 국내의 KTH(KT Hitel)이라는 회사에서 개발 및 배포하고 있는 Appspresso는 국내에서 조차도 그 지명도가
아직 상대적으로 높지 않습니다. 외국에서는 말할 나위가 없을 것입니다.(물론 뒷받침 할 만한 수치는 없습니다.)
당연히 그 시작에서 시기적으로 많은 차이가 있습니다.
Phonegap은 Nitobi(니토비)라는 회사에서 2009년 초에 시작했는데, Smart Phone이 지금 처럼 주류로 취급되기 전 부터
준비하고 시작했다는 면에서 대단한 이력이라고 할 만합니다.
그에 반해 Appspresso는 1.0 버전을 출시한지는 채 1년도 되지 않았습니다.
그 만큼 이름을 알릴 시간적 기회가 적었다고 봐야 할것입니다.
지원하는 플랫폼
Phonegap은 iOS/Android/BlackBery/WebOS/Symbian/WP7/Bada 등 7개의 플랫폼을 지원한다고 합니다.
물론, 모든 플랫폼에 지원 API가 전부 동일한 것은 아니며, 주류 API는 iOS와 Android에 치중해 있으니,
쓸모있는 지원 범위는 사실상 iOS와 Android라고 해도 과언이 아닐겁니다.
이에 반해 Appspresso는 오직 iOS와 Android에 한정하고 있습니다.
오히려 주류 플랫폼에 올인하는 것이 좋아 보이기는 합니다만,
플랫폼에서 제공하는 내장 API인 WebView를 이용한 접근으로의 한계를 너무 솔직하게 대하는 것인지 모르겠다는 생각이 들기도 합니다.
API의 다양성과 안정성
어찌됐든 한번의 개발로 2개 이상의 플랫폼을 커버한다는 측면에서 결국 주류 플랫폼을 겨냥한다면
둘 중의 승자는 과연 얼마나 많은 Device API를 제공하고 쓸모있는 API를 제공하는가가 중요한 요소가 될것입니다.
결론을 먼저 말하자면 Appspresso의 우월한 승리입니다.
사실 PhoneGap의 API는 그 유명새에 비하면 초라하기 그지 없습니다.
소문난 잔치집에 먹을것이 없다는 속담도 있던가요?
하지만, 그에 반해서 Appsopresso의 API는 Phonegap의 부실함 때문인지 상대적으로 풍부합니다.
예를 들자면, Device의 진동을 울리게 하는 Vibrate API에서 PhoneGap은 오로지 vibrate(msec)라는 함수 밖에 없습니다.
그에 반해 Appspresso는 startVibrate(), stopVibrate() 등 시작과 종료를 제어 할 수 있는데다가,
진동 패턴과 진동 후 callback 함수도 지정할 수 있습니다.
그 밖에도 카메라의 뷰파인더를 웹페이지에 직접 보이게 하는 등의 우월한 API의 구현 수준과 숫적 강세를 보이고 있습니다.
그 뿐만이 아니라 Appspresso에서는 PDK(Plugin Development Kit)라는 것을 이용해서 지원 API에서 부족한 Device API가 있다면
개발자가 직접 부족함을 메꿀 수 있도록 하는 방법까지 제공하고 있습니다.
안정성에 대해서는 사실 그 둘간의 우열을 논하기가 쉽지 않습니다.
iOS 든 Android든 버전간의 안정성이 매우 차이가 나기 때문입니다.
게다가 Android는 제조사와 제품간의 작은 차이들에 대해 안정성과 차별화 코드가 필요하기 때문입니다.
안정성에 대해서는 사용되는 플랫폼과 API에 따라 개발자간의 경험에 따른 호불호가 갈릴 수 밖에 없을것 같습니다.
개발의 편의성
Phonegap은 개발을 위한 환경을 따로 제공하지 않습니다.
iOS를 개발하기 위해서는 XCode에서 개발해야 하고, Android를 위해서는 Eclipse에서 개발해야 합니다.
2개의 플랫폼을 위해서는 2개의 플랫폼에 종속적인 개발환경을 구성하고 각각 빌드해야 합니다.
반면 Appspresso는 Eclipse 플러그인으로 자체적인 개발환경을 제공하고 있습니다.
iOS와 Android의 개발을 위한 SDK만을 별도로 구성하고 나면 개발은 Appspresso Studio라는 플러그인이 설치된
Eclipse에서 개발하고 빌드까지 할 수 있습니다.
게다가 Appspresso는 OnTheFly라는 디버깅 도구와 Chrome Plugin을 이용해서 Re-Build없이 Web Contents의 수정을
Hot-Deploye(핫 디플로이) 하고 데스크탑의 Chrome 개발자 도구로 실행 화면을 디버깅 할 수 있습니다.
하지만, Appspresso에도 단점은 있습니다.
이와 같은 디버깅 기능을 위해서 인지 Device에서 동작되는 WebView는 로칼 자원이 아닌, 별도의 WebServer(카라칸)를 띄워서
그로 부터 Request/Response를 받아 렌더링 시키는 메카니즘을 사용하고 있습니다.
그러다 보니 로칼 웹서버를 기동 시키는데 필요한 시간적 갭으로 초기 실행에 딜레이가 느껴지거나,
당연히 로칼에서 읽을 수 있을 것이라고 기대하던 데이타를 읽지 못하여 우회하는 방법을 써야 한다거나 하는 불편함이 생깁니다.
또, Eclipse에서 각 SDK에서 요구하는 Build과정을 ant로 만들어서 돌리다 보니,
매번 SDK에서 요구하는 프로젝트 구조를 만들고 다시 빌드해서 에뮬레이터/시뮬레이터에 올려 동작하는 과정을 거치면서
빌드 타임이 심각하게 길어 지고 있으며, 빌드 과정에서 오류가 발생하면 그 오류를 선명하게 개발자에게 알리기 어렵게 됩니다.
빌드가 두렵고 싫어 지게 하는 치명적인 문제가 있으며, 이것은 해결하기 어려워 보입니다.
문서화의 완성도
Phonegap은 문서화가 아주 잘되어 있습니다.
세세하게 모든 API에 심플 예제와 전체 예제가 하나씩 달려 있습니다.
무엇보다 읽기가 쉽습니다.
Appspresso 또한 문서화가 국내의 어떤것과 비교했을 때 상당히 잘 되어 있습니다.
하지만, API의 뒷쪽으로 갈 수록 설명은 아주 성실성이 떨어지고, 어떤 경우에는 더 성의 없는 영문만 한 줄만 있는 경우도 있습니다.
물론, API마다 샘플코드가 달려 있어서 유추하여 사용할 수는 있습니다.
하지만, 문서화는 샘플코드로 유추하게 하는 것을 목적으로 하는 것은 아닙니다.
조금더 분발했으면 하는 마음에 아쉬움이 남습니다.
Appspresso는 플러그인을 beta 딱지를 떼고 배포하면서 이클립스의 모든 메뉴를 한글화 하였던것이 인상 깊었습니다.
하지만, 왜 그 리소스를 문서화에 쓰지 않았는지 이해하기 어려웠습니다.(아! 갑자기 까고 있는 느낌이군요 ^^);
끝으로 PhoneGap은 여전히 오픈소스로 운영되고 있으며, Appspresso는 그냥 무료일 뿐 오픈 소스는 아닙니다.