App: native vs. cross platform vs. hybrid

taypark·2020년 8월 31일
1

네이티브 앱 vs. 크로스 플랫폼 앱 vs. 하이브리드 앱

네이티브 앱 vs. 크로스 플랫폼 앱 vs. 하이브리드 앱

최근 스마트폰 보급률은 전체 100% 중 95%나 차지한다고 한다. 일본, 중국, 미국 이나 유럽권 국가도 80~90% 정도의 점유율을 차지하는 반면, 대한민국에서는 굉장히 큰 수치라고 할 수 있다.

스마트폰은 일반 전화기보다 다양한 기능을 사용할 수 있고, 이를 사용하여 생활의 편리함을 제공한다. 다만 보통 2가지의 OS로 갈린다.

  • iOS

  • Android

iOS는 애플의 스마트폰 시리즈인 아이폰이나 태블릿인 아이패드에 올라오는 운영체제이다. Android는 Google이 무료로 제공하는 오픈소스 스마트폰 OS이다. 이 둘은 성격이 많이 달라서, 예전에는 모바일 애플리케이션을 개발하기 위해서는 각각의 특징을 알고 이에 맞춰서 언어를 사용하여 개발을 해야했다.

그러나 기술의 발전으로 한 애플리케이션만 만들면 iOS와 Android 모두 구동이 가능한 앱이 등장하는데, 이것이 보통 3가지이다.

  • Native Application

  • Crossplatform Application

  • Hybrid Application(Mobile Web Application)

각각 지향하는 바도 다르고 사용할 수 있는 기능도 제한되어있다. 하드웨어 사용도 종류별로 제한되어있으므로, 기기의 부분적인 기능을 사용하기 위해서는 하드웨어의 제어권을 얻을 수 있는 애플리케이션을 사용해야한다.

그렇다면 본격적으로 각각 어떤 특징이 알아보자.

네이티브 앱

네이티브는 말 그대로 각각 사용되는 언어(iOS/Android 코드)로 개발하는 것을 말한다. 단, 별도로 작성되어야 하기 때문에 후술할 크로스플랫폼보다는 개발속도가 현저히 떨어지고, 둘의 코드가 비슷한점도 그닥 없다.(Swift vs. Java or Kotlin)

장점은 모바일의 퍼포먼스를 100% 끌어올릴 수 있다. 가능한 API는 모두 사용할 수 있다. 기기에 최적화된 기능을 구현할 수 있다.

단점은 2개 플랫폼 언어를 모두 배워야 한다는 점이다. 또한 개발하기 위한 개발 툴에대해서도 공부를 해야한다.(XCode와 Android Studio) 그래서 시간이 굉장히 오래 걸린다.

결론적으로 퍼포먼스가 굉장히 중요한 애플리케이션을 개발하거나, 각 진영에서만 독점적으로 지원하는 API 혹은 SDK를 사용하려 한다면 네이티브로 개발하는 것이 좋다.

예를들어 실시간으로 카메라 뷰를 보여주면서 그래픽 렌더링을 한다던지(삼성폰의 얼굴을 이모지로 바꿔주는 기능 등...), 실시간 모바일 MMORPG나 모바일 FPS를 개발해야 한다면 네이티브 앱으로 개발을 해야한다.

크로스플랫폼 앱

크로스플랫폼 애플리케이션은 네이티브 코드가 아닌 코드로 작성을 한 후 iOS나 Android가 이해할 수 있는 코드로 변환시킨다. 대표적으로 Google의 Flutter, React진영의 React Native가 있다. 우리는 자바스크립트를 사용한 적이 있으므로, React로 예를 들자면 다음과 같다.

React(JS)로 코딩을 한다. 그 후 디바이스에 포팅하면 각 디바이스에서 JS엔진을 사용하여 애플리케이션을 실행한다.

만약 Dart 개발자라면 Flutter를 사용할 수 있다. Flutter는 C/C++로 변환되고, 이는 iOS/Android 모두 실행할 수 있는 코드이다. 또한 웹에도 관심이 있다면 Flutter Web을 사용하여 웹 서비스도 개발할 수 있다!

장점은 코드를 하나만 작성하면 이를 2개 플랫폼에서 모두 사용할 수 있다. 시간을 굉장히 줄일 수 있고 리액트 개발자라면 리액트 네이티브로 빠르게 모바일 애플리케이션을 개발할 수 있다. 또한 하나의 코드로 작성하기 때문에 유지보수도 쉽다.

단점은 그래도 네이티브는 아니라는 점이다. 각 기기에서 독점적으로 제공되는 기능을 모두 사용할 수는 없다. 퍼포먼스가 중요하다면 퍼포먼스 이슈가 생길 수도 있다. 예를들어서 AP를 모두 사용하여 무언가를 변환하는 작업을 한다거나(MP4 to MP3 라던가) 게임 같은 경우에는 퍼포먼스가 중요할 수 있다. 또 하나의 단점은 변환하는 작업이 존재하기 때문에 낮은 퍼모먼스의 모바일은 힘들 수도 있다.

그러나 싱글 코드 개발, 좋은 유지보수, 적절한 퍼포먼스와 iOS/Android 호환성을 위해서라면 크로스플랫폼은 굉장히 좋은 선택이 될 수 있다.

개발 예제로는 페이스북, 인스타그램, 디스코드, Skype 등이 있다.

하이브리드 앱

간단히 모바일 브라우저로 볼 수 있는 웹사이트지만 네비게이션(상단 URL바 또는 하단의 뒤로가기나 탭 등)이 없다.(또는 직접 구현한다)

장점은 간단하게 HTML, CSS, JS의 지식으로 간단히 만들 수 있고, 네이티브 앱에 대한 지식이 필요없다!

단점은 네비게이션이 없기 때문에 UI를 직접 만들어야한다. 보통 쇼핑몰의 최상단으로 가기, 뒤로가기, 앞으로 가기, 장바구니로 가기 등이 이를 포함된다. 사실상 웹사이트를 처음부터 만드는 것이기 때문이다.

또한 핸드폰의 하드웨어를 전부 제어할 수는 없다. 일반적으로 웹사이트에서 사용 가능한 파일 시스템(업로드, 다운로드), 네트워크 정보, 연락처, GPS, 카메라 등의 사용권한을 얻을 수 있다.

하이브리드 앱의 대표적인 것인 Apache Cordova 와 Adobe PhoneGap이 있다. 만약 하이브리드 앱 UI 프레임워크를 고르고싶다면 번역-하이브리드 앱 UI프레임워크 대결을 참고하자.

결론과 의사결정

네이티브, 크로스플랫폼, 하이브리드 애플리케이션의 특징과 함께 장/단점을 알아봤다. 요약하자면 다음과 같다.

  • 네이티브: 퍼포먼스가 굉장히 중요할 때. 하지만 각각 따로 개발해야한다.

  • 크로스플랫폼: 싱글 코드가 각 플랫폼으로 변환되어 개발이 단순하며 개발 커뮤니티가 크지만 퍼포먼스를 100% 끌어올릴 수 없고 변환하는 작업이 필요하다.

  • 하이브리드 앱: HTML, CSS, JS만 알고있다면 간단히 개발할 수 있다. 다만 웹페이지를 구성하느 것이기 때문에 UI를 알아서 구성해야한다.(물론 요즘 UI나 네비게이션 프레임워크가 있다!)

향후과제

졸업작품 과제로 iOS/Android를 모두 사용할 수 있는 애플리케이션 개발 플랫폼이 필요하다. 시간이 많지도 않아서 네이티브는 논외로 하였다. 그렇다면 2가지 방법이 있다.

  • 크로스플랫폼 앱
  • 하이브리드 앱

결국은 크로스플랫폼을 선택했다. 그 중에서도 React Native를 사용했고, 그 이유는

  1. 리액트를 손대본 적이 있다.

  2. 그나마 자바스크립트를 다뤄본 적이 있다. Dart는 한 번도 못써봤다.

그래서 졸업작품으로 크로스플랫폼 앱과 REST api를 연동한 앱을 만들기로 했고, 유저 인증은 블루투스 비콘을 기반으로 작성하였다.

참고자료

https://en.wikipedia.org/wiki/Cross-platform_software

https://www.youtube.com/watch?v=ksz_mSninEY&vl=ko

https://wit.nts-corp.com/2014/12/02/2645

profile
인생은 하드코어하게

0개의 댓글