Feat. Apache Cordova
21세기를 살아가고 있는 우리의 삶에 가장 큰 영향을 주는 도구는 무엇일까? 각자의 삶이 모두 다르기 때문에 중요도에 대한 의견은 다양할 수는 있겠지만 여기 누구나 인정할 수밖에 없는 도구가 하나 있다. 그것은 바로 “스마트폰”이다. 출시된 지 10년도 되지 않은 이 작은 전자기기는 더 이상 없는 사람을 찾기가 더 힘든 필수 제품이 되어 버렸다.
브런치의 작가가 된 기념으로 첫 글을 어떻게 쓸까 고심하던 찰나, IT를 전공하는 사람 입장에서 결코 지나칠 수 없는 모바일 개발과 관련해서 이야기를 해보기로 결심하였다.
요즘의 개발은 하루가 다르게 트렌드가 변화하고 있다. 과거 Java, C, 닷넷만 알고 있으면 되는 시대는 지났다. 플랫폼 종속적인 개발 환경에서 공유와 호환이 중요시되고 웹 기술의 발전에 따라 과거 심하게는 프로그래머로 조차 인정받지 못했던 Javascript 기반의 웹 프로그래머들이 승승장구하는 시대가 도래하였다. (웹 프로그램은 호환성 측면에 있어서 플랫폼 상관없이 사용할 수 있는 기술이기 때문에 요즘의 트렌드에 잘 어울리며 따라서 이를 활용한 응용 프로그램들이 많이 나온다.)
이와 같이 절대강자가 없는 춘추전국 시대에 필자는 “개발 언어 및 프로그램 안내” 이전에 “과거부터 지금까지의 프로그램 트렌드의 변화”를 먼저 이야기해보고자 한다. 요즘과 같이 하루가 다르게 변하고 발전하는 세상에서는 프로그램 습득 능력도 중요하지만 변화의 방향성을 예측하고 이에 빠르게 맞춰가는 것 또한 간과할 수 없다고 생각하기 때문이다. 따라서 이번 시간에는 21세기를 살아가는 프로그래머로서 앞으로의 트렌드를 예상하며 변화에 빠르게 대비하기 위해 지금까지의 기술의 변화에 대해 간략하게 살펴보고 이를 되짚어 보는 시간을 가져보고자 한다.
필자는 인생을 살면서 기술의 발전으로 인해 2번 큰 충격을 받은 적이 있다.
첫 번째는 인터넷의 출현이다.
컴퓨터를 처음 접했을 때가 초등학교 4학년쯤이었던 것 같다. 그 당시만 해도 필자에게 컴퓨터는 플로피 디스크를 넣어 게임하는 게임기의 한 종류였다.
그러던 중 중학교 2학년(1998년) 때 스타크래프트라는 게임이 한국을 강타했다.
이 게임의 열풍으로 인하여 PC 방이 우후 죽순으로 생겨나면서 대한민국 내 컴퓨터 보급이 가속화되었고 이로 인하여 게임뿐 아니라 컴퓨터를 활용한 다양한 프로그램들이 생겨나면서 기존 컴퓨터에 대한 인식이 달라지기 시작했다. 집에서 혼자만 할 수 있는 컴퓨터가 아니라 통신을 사용하여 서로 간의 정보 공유나 커뮤니케이션이 가능한 도구라는 인식으로의 변화이다. 이후 하이텔, 천리안, 나우누리 등의 텍스트 기반 PC 통신에서 야후, 싸이월드, 프리챌 등의 그래픽 기반 포털, 커뮤니티 등이 생겨나기 시작했다. 나아가 인터넷 망 등 기반 시설 또한 빠르게 갖추어지면서 대한민국은 순식간에 인터넷 강국이 되어버렸다. 컴퓨터 시장에서는 마이크로 소프트가 Window OS 내 Explorer를 인터넷 브라우저로 같이 끼워 팔면서 소프트웨어와 인터넷 시장에 있어 엄청난 영향력을 갖게 되었고, 빌 게이츠가 세계 제1의 부자가 되기도 하였다. 이 시기의 영향으로 필자는 컴퓨터학과를 전공으로 선택했다. 이 당시의 기술 발전이 개인, 가정, 사회적으로 얼마나 큰 파급력을 불러왔는지는 두말하면 입이 아플 정도이다.
두 번째는 스마트폰의 탄생이다.
인터넷 부흥기 이후 2000년대 초는 컴퓨터 쪽 분야에서는 밀레니엄 버그 이외에 이렇다 할 큰 이슈가 없었다. 하드웨어만 계속 발전하며 소프트웨어는 암흑기라고 이야기해도 될 정도였다. 인터넷 부흥기를 이끌었던 마이크로 소프트는 OS에서 Window vista 출시 이후 위기를 맞이 하였으며 인터넷 시장 역시 MS Internet Explorer는 늘어만 가는 ActiveX 프로그램과 각종 스파이웨어 등에 힘을 못쓰며 힘겨워하고 있었다. 너무 빠른 발전으로 철저한 검증 업이 기술을 도입하면서 보안 쪽 이슈도 많이 발생하게 되었다. 한 예로 국가에서 주민등록번호 대체 본인 확인 수단을 위한 아이핀이라는 자체 인증을 만들었는데 이 또한 해킹당하여 아이핀 인증을 위한 2차 비밀번호를 만드는 아이러니한 상황까지 발생하게 되었다. 필자가 입학할 때만 해도 꽤나 인기에 있던 컴퓨터 학과는 어느덧 가장 인기 없는 학과로 전락하게 되었고 컴퓨터 시장에서의 더 이상의 드라마틱한 반전은 없을 것으로 생각되었다.
그러던 2009년 11월 28일 아이폰 3GS가 한국에 첫 출시가 되었다. 무슨 설명이 더 필요한가. 첫 출시 후 불과 8년도 되지 않은 지금 우리 삶에서 가장 오랜 시간 함께하는 도구는 스마트폰이 되어 버렸다.
아직 탄생한 지 10년 남짓밖에 되지 않은 스마트폰의 탄생은 우리 삶에서 많은 것을 변화시켰다. 가장 먼저 컴퓨터 시장에서 절대 무너지지 않을 것만 같았던 애플리케이션들이 모바일 시장의 확대로 인하여 자연스럽게 위세를 잃어갔다. 울며 겨자 먹기로 써야만 했던 Explorer는 크롬과 사파리의 모바일 강제 탑재로 인하여 점유율이 상당히 낮아졌으며 이로 인하여 계속 적으로 미뤄지던 HTML5의 발전 또한 속도를 내게 되었다. 아래의 사진은 웹 브라우저 점유율을 보여주는 차트인데 2014년도부터 2016년도까지 얼마나 웹 브라우저의 점유율이 바뀌고 있는지를 적나라하게 보여준다.
< 인터넷 브라우저 점유율 변화. 출처 : Net Applications >
더 나아가 최근 브라우저 점유율 자료를 보면 처참하기까지 할 정도로 IE는 약세를 면치 못하고 있다.
< 2017년 9월 브라우저 점유율. 출처 : statcounter >
이처럼 우리 삶의 많은 부분을 뒤바꾼 스마트폰으로 인하여 정보의 공유 또한 과거보다 더욱 넘치게 되었고 프로그램 개발 또한 과거 보수적이고 플랫폼 종속적인 개발 방식에서 보다 간편하고 쉬우며 호환이 높은 개발 방식이 유행하게 되었다.
처음 스마트폰이 출시하였을 때, IOS 개발 언어는 Object C라는 언어를 사용하였으며 Android OS는 Java를 기반으로 제작을 하였다. 이처럼 서로 다른 개발 언어의 차이로 인하여 몇 가지 문제가 발생하였는데, 마켓에서 다운로드한 모바일 앱이 아이폰에서는 존재하지만 안드로이드 폰에는 존재하지 않거나 혹은 반대의 경우가 있었으며, 모바일 게임의 경우 동일한 게임을 받았으나 서버가 달라 핸드폰 기종이 다른 경우 네트워크 통신으로 만날 수 없는 경우도 종종 있었다. (필자는 이로 인해 다 같이 게임을 하는데 혼자 다른 기종을 사용해서 게임 내 강제 왕따가 되는 경험을 맛볼 수 있었다.) 처음에는 이러한 애플(IOS)과 구글(Android)의 기싸움이 과거 마이크로소프트처럼 누군가 하나의 절대 강자의 통일로 끝날 수 있을 것이라 생각했지만, 모바일 시장은 컴퓨터 시장과는 달리 처음에는 애플의 아이폰 OS인 IOS가 주도권을 잡는 듯하였으나 삼성의 스마트폰 생산 선언 및 구글의 Java 기반 안드로이드 OS 채택으로 인하여 결과적으로 안드로이드와 IOS 둘 다 부흥 해 버리는 결과를 맞이하게 되었다. 개발자 입장에서는 이는 상당한 부담이었다. 모바일 애플리케이션을 개발하기 위해서는 각각 OS에서 지원하는 언어를 공부해야 했기 때문이다. 둘 중에 하나만 호환하는 애플리케이션을 개발하기엔 모바일 시장이 너무 커져버렸다. 큰 프로그램일수록 반드시 IOS와 Android를 동시에 호환하는 제품을 생산해야만 하는 것이 필수 요구사항이 되어 버렸다. 그러다 보니 개발자들은 두 언어를 동시에 만족하는 언어에 자연스럽게 눈길을 돌리게 되었다.
각각의 고유한 언어를 사용하여 개발한 애플리케이션을 네이티브 앱이라고 한다.
이는 각 제품의 고유한 기능을 대부분 사용할 수 있을 뿐 아니라 디자인 또한 자체 기능을 최대한 끌어낼 수 있는 장점이 있다. 하지만 위에서 언급했다시피 현재 모바일 시장은 하나의 OS만 사용하지 않고 있기 때문에 다양한 기기를 만족하기 위해서는 해당 기기에서 지원하는 프로그램으로 앱을 개발해야만 했다. 이는 상당한 노력과 시간을 필요로 한다. 프로그래머들은 크게는 IOS, Android 작게는 윈도우 폰 및 다른 OS 까지도 호환 가능하도록 개발해야 하는 부담을 갖게 되었으며 java와 object C 최근에는 Kotlin과 Swift 까지 배워야 할 프로그래밍 언어에 대한 부담이 계속적으로 증가하게 되었다. 그러자 프로그래머들은 부담을 줄이기 위해 이종의 OS를 모두 지원할 수 있는 하나의 프로그램을 찾는 것을 대안으로 개발 방식을 생각하게 되었다.
우선 먼저 등장한 것은 웹 앱이었다.
웹 앱은 간단히 말해서 모바일 페이지를 의미하며 해당 웹 페이지 내에서 기존 앱과 같은 기능의 프로그램을 구현하여 이를 모바일에 최적화되도록 만든 프로그램이다. 이는 웹의 특성을 그대로 갖고 있어 기기에 종속적이지 않기 때문에 (웹 사이트만 접속 가능하다면 모든 핸드폰에서 동일하게 사용 가능) 초기 개발자들 사이에서 큰 인기를 누렸으며 웹으로 구현할 수 있는 가벼운 요구사항 정도는 웹 앱을 통하여 개발 함으로써 개발 부담 또한 줄일 수 있었다. 대표적인 개발 언어로는 제이쿼리 모바일이 있으며, 이는 웹 프로그래밍 시 사용하는 html, javascript 정도의 지식만 있어도 개발 가능하다. 하지만 안타깝게도 웹 앱은 치명적인 단점을 하나 갖고 있었는데 웹 페이지 기반의 프로그램이기 때문에 호환성은 좋지만, 네이티브 앱이 갖고 있는 각 기기별 고유 기능을 사용할 수 없다는 것이었다. 쉽게 말하자면 모바일 폰의 푸시 알림, 카메라, 주소록 같은 모바일 고유 기능의 접근이 불가능하여 개발 범위가 제한되어 버리는 큰 문제를 갖게 되었다. 이후 이러한 문제를 해결할 수 있는 방안으로 새로운 개발 방식에 대한 요구가 늘어나게 되었고 결국 기존 웹 앱과 같이 개발을 하면서도 모바일 자체 기능에 접근할 수 있는 개발 방식이 나오게 되었는데,
이것이 앞으로 우리가 체험해 볼 하이브리드 앱이다.
하이브리드 앱은 웹 기반으로 디자인하면서 개발 방식을 일원화시킬 뿐 아니라 웹 앱의 최대 단점이었던 각각의 Native 기능 또한 사용할 수 있도록 도와주는 앱이다. 말만 들으면 하이브리드 앱이 최고인 것처럼 보이지만 사실 하이브리드 앱은 네이티브 앱 보다 UI를 구성하는 디자인 부분이 취약하며, 성능이 떨어지는 것이 사실이다. (이는 Apache Cordova의 경우이며, 요즘 뜨고 있는 크로스 플랫폼인 React Native의 경우 Native UI를 사용한다고 하니 이 또한 큰 문제가 되지 않을 것으로 보인다.) 이보다 더 큰 문제는 언어 종속적이기 때문에 Native 기능 중 하나가 지원되지 않는 경우, 그리고 그 기능이 핵심 역할을 담당하고 있다면 아예 개발 자체가 불가능한 이슈를 갖고 있다. 하이브리드 앱을 개발하는 프로그램을 보통 크로스 플랫폼이라고 부른다. 크로스 플랫폼은 하나의 프로그래밍 언어를 사용하여 다른 OS를 사용하는 모바일 기기가 동일한 기능을 사용하는 네이티브 앱을 사용하여 만들 수 있게 해주는 프로그램이다. 대표적으로 Facebook의 React Native와 MS의 Xamarin을 예로 들 수 있으며 우리가 실습하게 될 Cordova(=phonegap) 역시 크로스 플랫폼의 예이다. 한 언어를 사용하여 동시에 여러 기기에 지원 가능한 프로그램을 개발할 수 있다는 점은 상당히 매력적인 요소이나, 그만큼 개발 및 성능 부분에 있어서 세심한 차이의 수정은 기술적으로 높은 난이도를 요구한다. 또한 모든 것이 네이티브 기반으로 되어 있기 때문에 가장 효율 적으로 사용하기 위해서는 각각의 모바일 OS의 개발 언어에 대한 지식이 필요해서 자칫하면 배보다 배꼽이 커지는 경우도 생길 수 있다.
지금 까지의 내용을 간단히 정리해보자면
생산성 : 웹앱 > 하이브리드 앱 > 네이티브 앱이며,
난이도 : 네이티브 앱 > 하이브리드 앱 > 웹앱이라고 할 수 있고,
성능 및 디자인 : 네이티브 앱 > 하이브리드 앱 > 웹앱이라고 할 수 있다.
이렇게 정리한 것만 보자면 생산성이 조금 낮더라도 네이티브 앱이 가장 좋아 보이지만, 개미를 잡기 위해 미사일을 발사하는 것은 상당히 비효율 적인 방법인 것처럼 개발이라는 것이 성능만을 따지면서 만드는 것이 아니며 사용자의 요구 사항에 따라 적합한 수준의 프로그램을 선택하는 것이 가장 중요하기 때문에 무엇이 가장 좋고 나쁘다를 논할 수 없는 것이 사실이다.
다음번 모바일 편 에서는 본격적으로 위 4가지 개발 방법 중 사용자 수준에서 요구하는 대부분의 기능을 다 구현할 수 있으며 적당한 진입 장벽으로 경험해 볼 수 있는 Apache Cordova를 사용한 하이브리드 앱 개발에 관해서 이야기해 보도록 하겠다.