우리가 스마트폰에서 사용하는 앱은 모두 비슷해 보이지만, 모바일 애플리케이션을 만드는 방법에는 여러 종류가 있다. 그 중 대표적인 3가지 방법이 '네이티브 앱', '크로스 플랫폼 앱', '하이브리드 앱' 이다.
Native App
Android : Kotlin, Java / Android Studio
IOS : Swift / Xcode
특징
- 네이티브 앱은 아이폰과 안드로이드폰에서 전혀 다른 언어와 로직으로 개발하는 방식으로, 각 스마트폰의 모든 기능을 사용할 수 있고 성능 또한 최대치로 활용할 수 있다.
장점
- 네이티브앱이 갖는 가장 자연스러운 UX를 갖는다.
- 카메라, GPS, 블루투스 등과 같은 스마트폰 자체의 장치들을 사용하거나, 영상 편집, 게임 등과 같이 폰 자체의 성능을 최대한 사용해야 하는 앱은 네이티브 앱으로 만드는것이 좋다.
단점
- IOS 개발자와 안드로이드 개발자가 각각 필요하며, 코드 또한 각각 짜야 한다. 즉, 동일 기능을 각각 안드로이드와 IOS에서 돌아가는 애플리케이션으로 만들어야 하기 때문에 개발에 소요되는 인력과 시간 비용이 다른 방식에 배해 많이 소요된다.
- 앱 배포(업데이트)시에 구글의 플레이스토어와 애플의 앱스토어의 심사를 각각 통과해야 하므로, 시간이 오래 걸리고 요구조건을 충족하지 못할시에는 반려된다. 심사에 각각 걸리는 시간을 예측할 수 없기 때문에 동시에 새버전을 출시하기에 어려움이 있다. 또한 배포 후 버그가 발견되었을 시, 버그 패치 버전 또한 심사를 통과해야 하므로 버그가 수정되기 까지 시간이 소요될 수 있다.
Cross-Platform Frameworks : Flutter (Google), React Native (Facebook)
특징
- 하나의 모바일 앱을 두 개의 운영체제로 개발해야 하는 번거로움을 해소하기 위해 만들어졌다.
장점
- 하나의 소스 코드로 IOS와 안드로이드 모두 작동할 수 있는 앱을 만들 수 있다.
단점
- 디테일하게 구현을 해야하는 경우(프레임워크에서 설정이 어려운 부분)에는 결국 native 코드로 구현해야한다.
- 크로스 플랫폼 프레임워크로 개발된 소프트웨어는 IOS, 안드로이드 앱과 앱으로 변환되는데, 각 운영체제에 특화된 방식으로 제작된 ‘순정’ 앱은 아니기 때문에 네이티브 앱에 비해 성능이 떨어지고, 카메라/GPS/블루투스 등과 같은 스마트폰 장치의 활용도가 떨어진다.
- 앱을 업데이트할 때마다 각각의 앱 스토어의 심사를 거쳐야 한다
1. React Native
- React 개발자가 네이티브 같은(?) 앱을 개발해야 하는 경우 선호
- 디버깅이 어려움
- Facebook 지원이 다소 아쉽고, 커뮤니티에서 오픈소스로 개발
- 서드파티 라이브러리에 의존해야하는 경우 많음
- 종종 사용감이 자연스럽지 않음
- expo를 사용한 경우 웹뷰의 스크롤이 부자연스러움
2. Flutter
- React Native와 달리 중간에 bridge가 없다. 바로 캔버스에 그림을 그리듯이 표현하고, 네이티브 위젯을 사용하지 않아서 속도가 빠른 편이다.
- 두 플랫폼에서 일관된 디자인을 원한다면 Flutter가 낫다.
- Dart 언어에 대한 러닝커브
- 인력 구하기 어려움 (수요도 공급도 적다)
Hybrid App (네이티브앱 + 웹앱)
특징
- 네이티브 앱의 장점과 웹 앱의 장점을 조합
- 네이티브 (또는 크로스 플랫폼)으로 앱을 만들지만, 화면을 일일이 직접 개발하지 않고, 브라우저 역할을 하는 웹 뷰를 띄운다. 웹 뷰는 지정된 웹 주소로 접속해서 웹앱 형태로 개발된 웹사이트를 화면에 보여준다.
장점
- 서비스 업데이트 시 웹 배포만을 하면 되므로, 앱 배포에 수일이 걸러는 것과 대조적으로 서비스 배포가 빠르다.
- 일부 UI를 제외하고는 앱과 거의 유사한 UI/UX를 구현할 수 있다.
- 네이티브의 기능 활용이 필요한 경우 브릿지 함수 개발을 통해 네이티브 기능을 활용할 수 있다.
단점
- 여전히 네이티브앱을 사용하기 때문에, 비중은 작지만 네이티브 개발을 할 수 있는 개발자가 필요하다.
그림이 직관적으로 정리가 잘 되어있어 이해가 쉽네요. 잘 읽고 갑니다 :)