본문 바로가기
IT정보

Native, Hybrid, Cross-platform App 차이

by narang111 2021. 12. 5.

Native App

- 애뮬레이션이나 호환 모드의 사용 등 외적인 지원 없이, 특정 하드웨어나 OS에서 그대로 실행되는 것을 Native라고 한다. 

- 안드로이드는 안드로이드 스튜디오라는 개발환경에서 Android 운영체제가 제공하는 다양한 API를 활용해서 Java, kotlin을 이용해서 만들 수 있다.

- 아이폰은 MacOS에서 XCode라는 개발환경을 이용해서 맥OS에서 제공하는 API를 활용해서 object C, Swift라는 프로그래밍 언어로 어플리케이션을 만들 수 있다.

 

즉,  Native는 각각의 다른 운영체제 에서 다른 프로그래밍 언어로, 다른 개발툴을 이용해서 어플리케이션을 만들어나가는 것이다.

장점
- 각각의 운영체제에서 추구하는 룩앤필을 잘 살릴 수 있고 플랫폼에 최적화된 성능 뿐만 아니라 문자 메세지 현재 위치 음성 인식 등등 운영체제에서 제공하는 API를 사용할 수 있다.
단점
- 사용자 입장에서는 매끄럽고 좋은 어플리케이션, 하지만 개발자 입장에서는 각각 다른 운영체제에 맞게 다른 프로그래밍언어로 만들어야한다. 기업측면도 마찬가지로 다른 팀을 꾸려 인력과 시간이 두 세배의 노력이 들 수 있다.

 

 

Hybrid App

- 웹기술을 그대로 사용하거나, 최대한 많이 활용할 수 있다.

- 안드로이드와 ios에서 지원하는 웹뷰라는 심플한 UI 컴포넌트가 있다. 이렇게 지정한 URL만 표시할 수 있는 웹뷰를 어플리케이션으로 묶어서 배포를 하곤 했다.

- URL 하나만 보여줄 수 있는 웹 브라우저를 만드는 것과 동일하다. 하지만 Native API를 이용할 수 없다. 이것을 개선하기 위해서 PhoneGap, CORDOVA라고 불리는 프레임워크가 나오게된다

- CORDOVA는 기존의 웹뷰를 한단계 감싸면서 네이티브와 다리 역할을 하고, 네이티브 API를 사용할 수 있도록 해준다.

단점
- Native 쪽 지식이 필요하고, 여전히 웹뷰에서 동작하므로 사용할 수 없는 Native API가 있다.
Native의 룩앤필을 따라갈 수 없다. 그리고 어플리케이션을 배포할 때 웹코드 뿐만 아니라 이것을 감싸고 있는 코도바의 엔진, 코도바를 묶어서 배포를 해야하기 때문에 어플리케이션의 사이즈가 커질 수 있다.
그리고 네이티브와 했던 "다리역할" 때문에 쓸데없는 메모리차지나, 성능문제가 있을 수 있다.

 

 

 

 

 

Cross-platform App

- 하나의 프로그래밍 언어로 두 운영체제에서 동작하는 앱을 만드는 것이다.

 

React Native

- 프론트에서의 React와 Javascript로 작성한다는 공통점이 있지만

- React는 virtual dom을 이용해서 브라우저 DOM을 업데이트하는 반면,

- React Native는 모바일 API를 이용해서 모바일 UI를 업데이트 한다. 그래서 어플리케이션을 배포할 때는 작성한 JS코드와 JS코드를 이해하고 모바일 API로 번역할 수 있는 엔진을 함께 묶어서 어플리케이션을 배포하게 된다. 실시간으로 자바스크립트 코드를 모바일 API를 이용해서 업데이트하게 해준다.

 

 

플러터

- Dart라는 새로운 프로그래밍언어를 배워야하지만 안드로이드, 아이폰, 웹, 리눅스나 윈도우에서 동작하는 데스크탑 어플리케이션을 모두 만들 수 있다.

- React Native 같은 경우 Javascipt 코드를 실시간으로 엔진이 해석해서 Native API를 이용해서 화면에 그려주는 반면,

- Flutter는 캔버스라는 UI 컴포넌트를 이용해서 자체적으로 자신의 코드를 이해해서 화면에 그려주게 된다. Native API를 번역하는 과정이 필요없다.

 

장점
- 중복적인 일을 피하기위해서 한 번만 개발해서 모든 곳에 쓰고싶기 때문!!

단점
 - 여전히 하이브리드와 크로스플랫폼만으로는 네이티브의 룩앤필과 성능을 잘 살릴 수가 없다.
- 사용할 수 없는 네이티브 API들이 많이 있고 플랫폼에서 최신 업데이트되는 API가 있어도 하이브리드나 크로스 플랫폼에서 지원해줄 때까지 기다려야한다.
- 크로스플랫폼 단에서 발생하는 버그는 개발자가 해결해줄 때까지 기다려야한다. 디버깅이 까다로울 수 있다.