Mobile(Android, iOS) Application 개발을 할 수 있는 대표적인 방법은 아래 4가지 입니다
1.Native app
-Objective c/ swift for IOS
-Java/kotlin for Android
2. Hybrid app
– Ionic -angularjs, vue
3. Native compiled app
-react native(react-javascript)
-native script (angular, vue)
-xamarin (C#)
-flutter (dart)
4.Progressive web app(PWA)
-html, css, javascript
대표적인것만 뽑아 보았습니다.
머가 정답이다 하는 것은 없습니다. 자신의 상황에 맞게 선택적으로 사용하면 됩니다.
여력이 되면 여러 개 할 수 있으면 더 좋겠죠.
각각에 대해 좀 더 자세히 알아 보겠습니다.
Native app
- 개발 관점에서 가장 좋습니다.
- 충분한 개발 community,
- open된 library,
- 오랜 기간 사용되어 와서 안정 적임
- Device를 직접 control 하여, 뛰어난 performance (camera, gps, address book, wifi, bluetooth)
- kotlin, java language를 machine code(Dalvik byte code) 로 컴파일 함.
- iOS 와 Android 따로 따로 개발 해야 함.
PWA
- maintenance가 쉬움
- web기술을 그대로 사용 가능.
- app store 를 통하지 않고 url로 바로 앱 배포 가능
- app update가 용이함. 사용자 action없이 개발자가 update 가능 (web의 특성)
- Desktop, Mobile (Android, iOS) 서비스가 한번에 개발 가능
- 개발에 에뮬레이터가 필요 없음(에뮬레이터는 무겁고 느림)
- UI Performance 가 가장 안 좋음. (어떤 서비스들은 UI 퍼포먼스에 민감하지 않죠?)
Ionic
- web 기술을 그대로 사용 typescript, angular, vue, html , css
- 하나의 codebase로 IOS, Android, Desktop WEB, PWA 로 재사용 가능
- community 가 잘 발달되어 있음.
- 개발에 에뮬레이터가 필요 없음
- cordova를 통해 device control – cordova를 ionic 으로 감싼것정도로 이해
- OTA(실시간 배포) 가능 – Appstore의 심사를 거치지 않고 update 가능 (minor part)
React Native
- JAX 라는 javascript base의 language를 사용함.
- 하나의 codebase로 Android, iOS 개발 가능 , WEB 도 어느정도 코드 공유 가능
- javascript를 compile 해서 native 형태로 동작 (bridge를 거침), 퍼포먼스가 좋음
- OTA(실시간 배포) 가능 – Appstore의 심사를 거치지 않고 update 가능 (minor part)
- bridge를 거치기 때문에 native 방식보다는 performance가 떨어질 수 밖에 없음.
Flutter
- 하나의 codebase로 iOS, Android, Web(beta) 개발 가능 , web은 code 를 40~50% 정도 재 사용가능 하다고 하네요. 현재까지는.. 앞으로는 더 넓어지겠죠?
- Dart를 ARM로 compile 을 하고 UI를 직접 그리는 형태(Skia)라 performance가 좋음
- 문서화가 잘 되어 있음. google의 official document가 상당히 양질임. (처음 진입할때 매우 도움이 됨)
- Hot reload 가 됨. 개발자 관점에서 매우 큰 장점 입니다.
- opensource
- Dart 언어의 사용처가 flutter 뿐이라 봐도 좋다. – 언어의 확장성 부족
- community가 작음, 한창 hot 하긴 한데 community가 성장하려면 시간이 좀 거릴 것임
- google에 대한 의존성이 높아 , google 지원이 끊기면 끈떨어진 연이 됨. google은 자신들의 project를 drop 시키는 경우가 많음.
여러분들도 비슷한 고민이 있으시리라 생각 됩니다.
본인이 아직 main 언어가 없고 확실한 방향을 설정하지 못한 상태에서 모바일 개발을 하고자 한다면 flutter는 피해가라고 말하고 싶습니다.
flutter가 인기가 시들해지고 찾는 기업이 없다면 flutter와 dart는 다른 대안이 없습니다.
처음부터 다시 다른 언어를 배워야 합니다.
native 언어로 시작하던지 다른 hybrid platform을 선택 하세요.
native 언어는 이미 시장이 크게 형성되어 있습니다. Android 든 iOS든 먹고 살기 충분한 시장이 있습니다.
hybrid 언어는 JavaScript를 기반으로 하기 때문에 혹 여나 해당 framework가 인기가 없어져도 커리어 전향이 쉽습니다. node.js backend 개발자가 될 수도 있고, web front-end 개발자가 될 수도 있습니다.
저의 경우는 flutter를 시작해보기로 했습니다.
설사 flutter가 시장에서 사라진다 하여도 다른걸 배우면 그만이라고 생각하는 입장입니다. 제가 react-native를 잘한다고 node.js backend 를 잘 할수 있냐 하면 그건 아니라고 생각합니다. 같은 JavaScript 이니 조금 쉽게 node.js로 갈 수는 있겠죠. 하지만 잘하는것과 할 줄 아는 것은 다른 얘기 입니다. 어차피 잘 하려면 새로 배우는 수준으로 공부하고 경험 해야 합니다. 러닝 커브가 조금 낮다는 정도이지 엄청난 차이는 없다 생각 합니다.