하이브리드 앱! 이거 하나로 끝!
Apache Cordova
스마트폰의 등장은 모바일 시장에 많은 변화를 가져왔다. 과거의 모바일 환경이 음성, 메시지 등 휴대전화 본연의 기능에 충실했다면, 현대에는 하드웨어, 소프트웨어뿐만 아니라 통신망의 발전에 따라 음악, 동영상과 같은 멀티미디어와 Social Network Service 등 인터넷을 중심으로 하는 환경으로 변화하고 있다. 스마트폰과 같은 스마트 기기에는 PC에서와 같이 전용 운영체제가 탑재돼있는데, 대표적으로 Apple의 iOS와 Google의 Android가 있다. 각 운영체제는 “App”이라고 불리는, 하나의 실행 가능한 프로그램을 설치해서 사용하는데, 이종간 같은 서비스를 제공하고자 한다면, 각 운영체제마다 별도의 개발 과정은 거쳐야 한다. 즉, 두 개의 Native App을 개발하는 것과 같다고 볼 수 있다. 이러한 불편함을 해소하기 위해 개발된 기술이 “Hybrid App”이다. Hybrid App은 Native App과 Web을 결합한 형태로 HTML, CSS, Javascript 등으로 구성된 Web 페이지를 Native App처럼 사용하고, 스마트 기기의 모듈(카메라, 알림, GPS, 가속계 등)을 활용하여 다양한 기능을 구현할 수 있다. |
또한 모든 레이아웃 렌더링이 플랫폼의 Native UI 프레임워크가 아닌 Web view를 통해 수행되며 단지 Web App일 뿐만 아니라 배포를 위해 패키지화되면서 Native 기기 API에 접근할 수 있음을 의미한다. 이러한 Hybrid App 개발을 위해 다양한 프레임워크가 존재하는데, 그 중에서도 가장 많은 플랫폼을 지원하고 많이 사용되는 Hybrid 크로스플랫폼 프레임워크 Apache Cordova를 소개하고자 한다. Apache Cordova는 HTML,CSS,JavaScript로 Native 모바일 App을 개발할 수 있는 플랫폼이다. 한때 간단히 폰갭(PhoneGap)이라 불리다가 아파치 콜백(Apache Callback)으로 불렸고, 현재는 Apache Cordova로, Apache 재단의 오픈소스 프로젝트이다. 지원하는 플랫폼은 다음과 같다. 링크 |
< Cordova 5.0 지원 플랫폼 >
Web view기반의 Hybrid App의 특성상 Native App보다 다양한 기능을 구현하기 어렵다는 단점이 있다. 이런 점을 극복하기 위해 Cordova에서는 다양한 플러그인을 제공해주는데 그 수가 현재(09월23일 기준) 1113개에 이른다. 제공하는 플러그인은 다음과 같다. 링크 필요한 기능이 구현된 플러그인이 없더라도, 플러그인 개발 가이드를 통해 개발자가 필요한 플러그인을 직접 개발하는 것도 가능하다. |
아래는 우리 JBT에서 Cordova(PhoneGap)를 활용하여 개발한 Hybrid App이다. < 고용보험 민원신청 >
< 농어촌 현장조사 >
|
Cordova에서 제공해주는 플러그인과 플러그인 개발 가이드를 통해 Hybrid App의 단점을 최소화 할 수 있게 됐고, 이에 따라 다양한 요구사항에 대응할 수 있는 App을 Hybrid로 개발할 수 있으므로, One source Multi device를 실현할 수 있는 좋은 방법으로 생각된다. 최근 사내에 Hybrid App 개발이 늘어남에 따라 Apache Cordova을 통한 개발이 늘어나는 추세이다. 아직은 관련정보가 부족하고, 성능에 대한 문제 등 어려운 점이 많지만, 높은 호환성, 개발기간 단축 등의 장점을 바탕으로 점차 더 많이 사용이 되기를 기대한다.
Node.js를 소개합니다.
node.js 란? 고성능 서버를 구축할 수 있는 Javascript 기반의 I/O 프레임워크다. 즉, Javascript 서버다. Node.js는 2009년 Ryan Dahl에 의해 처음 시작됐으며, Google이 개발한 자바스크립트 엔진 V8 위에서 동작한다. |
내장 HTTP 서버 라이브러리를 포함하고 있어서 아파치 등 별도의 웹서버 없이 동작하는 것이 가능하다. Single thread 기반으로 Event driven 방식의 Non-blocking으로 비동기 I/O를 처리 한다. 앞서 말했듯 Node.js로 고성능 서버를 구축할 수 있다고 했는데, 여기서 말하는 고성능은 자바스크립트 언어 때문이 아니고 Single thread 기반의 비동기 처리에서 비롯된다. 하나의 thread가 File이나 database에 접근을 요하는 I/O 처리 요청을 받으면 해당 요청을 비동기로 수행하고 다른 작업을 처리하다가 요청이 끝나면 그 이벤트를 받아서 처리하는 방식을 사용한다. 따라서 CPU가 I/O에 대한 응답을 기다리는 시간이 불필요해지면서 연산 작업에 집중할 수 있기 때문에 높은 효용성을 가진다. 특히 Single thread로 여러 개의 요청을 처리하는 구조로 C10K문제를 처리하는데 최적화 되어 있다. (C10K문제란, 10K개만큼 소켓을 열게 된다면 하드웨어 자원이 충분한데도 불구하고 OS에서 제공하는 I/O 처리방식의 문제 때문에 프로세스가 제대로 처리하지 못한다는 것을 말한다. 단, 10K는 한계치를 의미하지 않는다.) 사실 Node.js의 구조로 보면 자바보다 성능이 빠르다고 말할 수 없다. DB나 File I/O가 |
있을 경우, thread pool에 request & callback 형식으로 처리를 하고 있기 때문에 Single Thread Model이 아닌 Multi Thread Model이 되고, 이 Thread pool의 thread로 인한 context switching이 발생하게 되면서 context switching이 없다는 Single Thread Model의 장점이 무의미해지게 된다. 아래 그림을 보면, 데이타베이스 트랜젝션이 많은 애플리케이션의 경우 WAS(resin) + MySQL 구조가 nodejs + MySQL 구조보다 많이 빠름을 알 수 있다. 참조 < 성능 비교표 > 그럼에도 불구하고 Node.js를 Paypal이나 Groupon과 같은 서비스 기업들이 내부 서버 플랫폼을 Node.js를 전환하고, 많은 사용자들에게 인기가 있는 이유는 무엇일까? (Node.js는 IBM, Microsoft, Yahoo!, Walmart, Groupon, SAP, LinkedIn, Rakuten, PayPal, Voxer and GoDaddy 등에서 사용되고 있다.) 가장 큰 이유는 아무래도 Javascript 언어에 |
서 오는 생산성 향상이라고 볼 수 있다. 즉, 웹 개발에서 Javascript의 비중이 높아지면서 프론트엔드 개발자들에게 높은 수준의 개발 능력이 요구되었고, 이러한 환경이 개발자들의 Javascript 개발 능력 향상에 기인함으로써 상대적으로 높은 진입장벽을 가졌던 server side 개발을 하는데 있어서 Javascript 기반의 Node.js는 프론트엔드 개발자로 하여금 그 벽을 허물게 하는 계기가 되었다. 그 예로 Paypal에서는 Node.js로 전환한 이유를 프론트엔드와 백엔드를 통합하여 생산성을 높이기 위함이라고 말한다. 그렇다면 trend를 따르기 위해 Node.js로 전환을 하는 것이 더 나은 선택일까? 그것은 아니다. 앞에서 Single Thread Model을 장점으로 언급했는데 단점도 물론 존재한다. 첫 번째로 하나의 작업이 시간이 많이 걸리면, 전체 시스템 성능에도 영향을 미친다. 그래서 각각의 요청이 light한 작업 위주로 개발이 되어야 한다는 점. 두 번째는 Javascript언어가 특성상 명시성이 떨어지기 때문에 코드 가독성이 상대적으로 낮아진다. 이에따른 유지보수 등의 불편함이 존재한다. 세 번째, Event driven방식을 사용하기 때문에 callback이 중첩될 경우(callback hell) 코드의 가독성이 급격히 떨어진다. |
(물론 이를 해결하기 위한 프레임워크들이 존재 한다.) 네 번째, 디버깅을 할 때 해당 코드가 실행되어야 오류가 나는지 확인할 수 있고, 오류가 날 경우 프로세스 자체가 내려가기 때문에 server 동작이 멈추는 비극을 마주하게 된다.(이것 역시 해결 가능한 방법들이 있다. watch dog, domain API 등) 그러므로 설계를 하고 개발을 하는데 많은 신경을 써야한다. 그밖에도 V8엔진을 사용하면서 발생할 수 있는 문제점으로 Garbage collection시 CPU 사용률 spike에 의한 server 다운 문제, 멀티 코어 머신에서 CPU사용을 최적화 할 수 없다는 문제 등이 있다. 따라서 Node.js로의 전환은 제공하고자 하는 서비스에 대한 상세한 이해와 올바른 설계를 바탕으로 전환 작업의 효용성을 판단할 수 있는 환경일 때 고려해야 한다. Node.js는 개발 관점에서는 초기 접근과 개발이 빠르다는 장점이 있지만, 운영 관점에서는 테스트, 장애 대응, 디버깅 등에 대해서 신경을 더 써야 하는 부분이 있다. 참조 |
[강추기사모음] 이 기사 보셨나요? 이 코너에서는 함께 공유하면 좋을만한 기사들을 선정해 보았습니다. 기사 제목을 선택하시면 해당 페이지로 이동합니다. 잘 알려지지 않은 기사중에서 다른 직원들과 나누고 싶은 정보가 있다면 뉴스레터 편집실로 알려 주세요.
≫ 토픽 브리핑|지구에서 개발자로 산다는 것 v2.0 (출처:IT WORLD/2015.08.28)
≫ [칼럼] 모든 것이 연결된 미래, 그를 위한 준비 – IoT 표준 (출처:CISCOBlog/2015.07.07)
≫ 新유망직종…데이터사이언티스트의 조건 (출처:ZDNet Korea/2015.09.08)
≫ 비즈니스 리더에 꼭 필요한 건 뉴 하드 스킬 (출처:ChosunBiz/2015.09.12)
≫ [창간 33주년 특집 Let`s SEE SW] 21세기 모든 부(富)는 SW서 나온다 (출처:전자신문/2015.09.22) |
≫ [창간 33주년 특집 Let`s SEE Eco system]대한민국은 지금 O2O 전쟁 중 (출처:전자신문/2015.09.22)
≫ [GMV 2015] 쿠팡, 쏘카, 김기사... 유명 벤처기업의 성장 전략은? (출처:IT Donga/2015.09.18)
≫ 2016년 IT 전문가 임금 상승률 BEST 20 (출처:IT WORLD/2015.09.21)
≫ 프로그래밍 언어 순위 '뜨거운 스위프트, 차갑게 식은 다트' (출처:CIO Korea/2015.09.23)
≫ IoT 시대, AoT(Analytics of Things)는 필수다 (출처:CIO Korea/2015.09.23)
|
|