모바일 기기의 보급이 높아질수록 활용도 또한 높아져 가고있다. PC에서 접속하던 인터넷을 이젠 스마트폰, 테블릿PC 등 다양한 기기에서 접속이 가능하다.
어느 기기로 접속을 하더라도 같은 정보를 보지만 기기마다 화면 구성이 달라진다.
또 같은 기기더라도 구현되는 화면의 사이즈에 따라서 사용자가 보기 편리하게 UI가 재배치되기도 한다.
일반적으로 스타트업에서 앱을 개발하기 시작할때 우선적으로 결정해야 하는 것이 앱을 어떤 방식으로 개발하냐 일 것이다. 이에 따라서 개발 시간, 비용, 설계 등이 달라지기 때문이다.
앱은 네이티브앱, 하이브리드앱(웹 앱), 크로스 플렛폼 앱 등 크게 세 가지로 구분 된다.
지금 회사의 앱은 하이브리드앱(웹앱)으로 만들어져 있다. 왜 하이브리드 앱으로 개발을 했고, 네이티브 앱이랑 무슨 차이가 있는지 궁금해서 알아봤다.
네이티브 앱은 안드로이드/아이폰 각각의 개발 언어로 개발하는 것이라고 보면 된다. 안드로이드 OS의 네이티브 언어는 Java, Kotlin이 있고, 아이폰은 Swift(스위프트), Obj-C(오브젝트 씨)라는 네이티브 언어가 있다.
네이티브 앱은 하이브리드 앱과 달리 모바일의 퍼포먼스를 100% 구현할 수 있고, 가능한 API를 모두 사용 할 수 있다. 즉 기기에 최적화된 기능을 구현할 수 있다는 의미다. 퍼포먼스가 필요한 앱을 개발할 경우 앱의 성능을 위해서라도 네이티브로 개발해야한다.
현재 네이티브 앱은 과거보다 많이 발전되었다. 아이폰(IOS)는 Obj-C 대신 Swift로 개발하고, 안드로이드는 Java대신 Kolin으로 언어가 바뀌면서 다양한 라이브러리를 사용할 수가 있어서 더욱 효율적인 개발이 가능해 졌다.
하지만 안드로이드와 아이폰 OS를 각각 개발해야 되는 큰 단점이 있다. 이 둘의 언어가 비슷한점도 별로 없어서 개발 속도가 현저하게 떨어진다. 간단한 레이아웃이나 기능을 만드는 과정이 복잡해서 높은 개발 능력이 요구된다. 이런 단점은 개발 인력도 다 각자 구해야 하기 때문에 개발 비용이 많이 든다.
개발팀 인력과 자본이 충분한 회사에서 보통 사용하는 방식인데, 시장 속도에 맞춰서 빠르게 개발하고 출시 하기 위해서 하이브리드 앱이나 크로스 앱을 선택하는 경우도 늘어나고 있다.
웹 뷰를 감싸고있는 웹사이트이다. 여기서 웹뷰라 함은 인터넷 브라우저를 말한다. 하지만 여기에 네비게이션이 없다. 그래서 하이브리드를 만들때 html, css, js를 가지고 웹뷰를 감싼 후에, 그걸 스토어로 보내는 방식이다.
하이브리드 앱은 크로스 플랫폼을 지원한다. 이는 곧 개발에 필요한 비용과 시간을 줄여준다. 시간이 줄어들면 비용이 줄어드는 것은 말할 필요가 없다. 또한 아이디어가 생기면 즉시 개발할 수 있는 장점이 있다. 하이브이드 앱은 이러한 장점을 가진 덕분에 저렴한 비용으로 시작할 수 있고, 네이티브 앱에 대한 지식이 필요 없어서 html, css, js만으로도 앱을 구현할 수 있다.
단점도 존재한다. UI를 하나하나 만들어야 하는 점이다. 앱 개발을 0에서 부터 만드는 것이다. 그리고 폰의 기능들을 100% 확용 하지 못한다. 하이브리드 앱으로 할수있는건 기본적인 카메라, 위치확인, 연락처, 네트워크정보 등이있다.
네이티브로 개발할 필요가 없는 부분은 하이브리드 앱으로 개발하고, 네이티브 기능이 필요한 부분만 네이티브 코드로 작성하면 기능 제약 없이 효율적으로 개발할 수 있다. 네이티브 기능이 필요한 부분은 메시지, 블루투스, 위치기반 서비스, QR코드 인식, 주소록 연동, SNS 로그인, 인앱 결제 등이 있다.
하이브리드앱은 스타트업에서 주로 사용한다. 앱을 빠르게 개발하여 출시할 수 있고, 출시 이후에도 유집수에 대한 대응을 빠르게 할수있다. 이러한 이유때문에 우리 회사에서도 하이브리드앱으로 초기에 개발을 시작하였고, 지금도 사용중에 있다.
크로스 플랫폼은 한가지 언어와 프레임워크로 ios/android 양쪽 앱스토어에 출시 할 수 있는 방식이다.
네이티브 코드가 아닌 걸로 코딩을 한 후에 ios/android가 이해할 수 있는 코드로 변환된다. 리액트로 코딩하고, 이를 자바스크립트 코드로 컴파일되고, 이후 ios/android가 이를 각자의 자바스크립트 엔진으로 실행시킨다. 그래서 한번 코드를 작성하면, ios/android 플랫폼에서 확인할 수 있다.
네이티브 앱과 비교했을 때, 개발 속도가 빠르고, 성능 차이가 크게 나지 않는다는 점이 있다. 하지만 네이티브 언어가 아니다 보니까 퍼포먼스 이슈가 생길수 있다. 빠른 개발과 비용이 효율적으로 들지만 기능 구현에 제약이 많아서 외부 API로 작동되는 범위 내에서 기능 구현이 가능하기 때문에 확장성이 비효율 적이다.
하이브리드 앱과 비교하면 디자인을 세밀하게 적용하는 것이 어려워서 네이티브나 플로터로 제작된 앱들의 디자인이 아쉬운 경우가 많다. 그리고 네이티브 언어와 연동하는 부분이 하이브리드 앱보다 번거롭게 느껴진다.
참고
https://brunch.co.kr/@jamess/57
https://www.youtube.com/watch?v=ksz_mSninEY&vl=ko
https://blog.naver.com/alstn910/222123049644