안녕하세요!
오늘은 Flutter에 대해 알아보도록 하겠습니다!
Flutter는 Google에서 개발하고 Mobile World Congress 2018에서 최초 베타 릴리스를 발표하면서 새롭게 소개된 크로스 플랫폼 모바일 앱 개발 프레임워크입니다.
또한 개발자가 iOS와 Android 두 OS에 대해 고품질 기본 인터페이스를 제작하는 데 도움을 주는 크로스 플랫폼 프레임워크라고 할 수 있습니다.
기존 UI를 모두 버리고 자체적으로 UI를 렌더링하기 때문에 iOS에서 material 디자인과 ripple 애니메이션 을 볼 수 있고 Android 에서 cupertino 디자인을 볼 수 있습니다.
마치 화면 전체를 2D 그래픽 API로 fillRect 하고 drawText drawImage 해서 앱을 만드는 것처럼 Flutter 엔진이 Skia 기반으로 렌더링 해줍니다. 웹 개발에서 HTML을 모두 무시하고 전체를 flash나 canvas로 만드는 것과 같습니다.
모바일 개발의 경우 iOS와 Android 모바일 개발자가 각각 따로 있다면 꼭 크로스 플랫폼으로 앱을 개발하지 않아도 됩니다. 하지만, 각 OS 별로 유저들에게 동일한 UI와 UX를 제공하면서 개발한다는 것은 쉬운일도 아닐뿐더러 각각 전문 개발자들이 필요하게 되니 개발 자원이 2배이상 필요하게 됩니다. 그리고 한 명의 개발자가 둘다 개발을 한다고 가정하면 각 OS의 개발 방식이 서로 다르기 때문에(IDE, 개발언어, 툴 등등) 따로 공부해야하는 필요성도 있습니다.
설령 개발을 완료 했다 하더라도 앱의 유지보수가 쉽지 않다는 단점이 있습니다. 안드로이드, IOS 따로 유지보수(추가 기능, 오류, 앱스토어 관리 등등) 관리를 해야하기 때문입니다.
그래서 크로스 플랫폼을 사용한다면 우선 개발 자원을 줄일 수가 있습니다. 하나의 프레임워크로 안드로이드, iOS 모두를 동시 개발이 가능하기 때문입니다.
관리 역시도 하나의 개발 소스만 관리하면 해결되기 때문에 훨씬 편리합니다.
하지만 이미 시장에는 모바일 크로스플랫폼 개발하면 떠오르는 프레임워크로 Facebook에서 개발을 주도하는 React-Native가 있으며 많은 개발자분들이 React-Native와 Flutter를 두고 고민을 하는 상황입니다.
아래는 React-Native vs Flutter 비교 유튜브 영상입니다.
보통 Flutter를 배울때 가장 큰 진입 장벽이 Flutter가 Dart언어를 사용하기 때문입니다.
물론 Flutter라고 해도 각 OS별 Native 코드를 사용하며 Android는 kotlin, iOS는 Swift를 사용합니다.
이전에 Dart는 2018년 프로그래밍 언어에서 배우면 안되는 언어 1위로 뽑혔습니다.
하지만 그땐 Flutter가 나오기전이라 그렇고 Flutter가 맹렬히 추격한 결과 현재는 10위 내외로 사용률이 왔다갔다 하는 중 입니다.
장단점은 아래와 같습니다.
장점
통합 개발 환경 지원
Flutter는 다양한 Editor(Android Studio, VS Code 등등)를 사용하여 빌드가 가능합니다.
Android Studio는 Flutter Inspector와 Flutter Outline이라는 개발 도구를 추가적으로 지원해줍니다. VS code 에서는 간단하게 Extension 으로 Flutter를 설치하여 Flutter를 사용할 수 있습니다.
성능 문제 해결
기존 React Native 혹은 Hybrid App의 경우 네이티브 브릿지를 통한 통신이 불가피했습니다. 하지만 Flutter는 직접 컴파일되서 Render를 직접 하기때문에 성능이 빠릅니다. 애니메이션 속도가 60프레임은 가뿐히 넘어서는 것이 기존 크로스 플랫폼시장의 주류였던 React Native와 Flutter를 비교하는 많은 글들에서 Flutter를 내세우는 부분입니다.
머티리얼 디자인과 쿠퍼티노
Flutter는 Androd와 iOS의 대표 디자인 가이드를 기본적으로 제공합니다.
구글의 머티리얼 디자인(Material Design)의 홈페이지에는 이미 Flutter가 포함되어 있고 가이드만 제공하는 것 뿐만아니라 Flutter 프로젝트에 바로 추가하여 사용할 수 있는 패키지도 제공합니다.
안드로이드와 iOS에서 같은 머티리얼 디자인을 사용하더라도 플랫폼에 따라 다르게 출력되는 부분을 각각 디자인 가이드에 맞게 화면을 그립니다.
iOS앱을 개발하는 경우 iOS특유의 디자인 시스템인 쿠퍼티노(Cupertino) 위젯을 제공합니다.
그렇기에 선택의 폭이 정해져 있기 때문에 어떤 UI 라이브러리를 사용할 것인지 고민 할 필요가 없습니다만 이건 장점이자 단점이 될수도 있습니다.
Dart를 사용하지만 Native 코드도 사용
앞서 Dart를 사용한다고 했지만 결국엔 크로스 플랫폼이기에 해당 OS에 최적화된 앱을 만들려면 Native 코드를 사용할수밖에 없고 Dart와 섞어서 사용을 합니다.
즉, Dart만 사용하는것이 아니라 Android면 Kotlin, iOS면 Swift도 사용합니다.
이는 기존의 Native 코드를 사용한 개발자라면 장점이 됩니다.
단점
Flutter의 경우 Github 이슈란에 가보면 엄청난 이슈가 올라와 있는 것이 눈에 보입니다.
물론 이는 Flutter 자체가 이슈 항목에 아무나 이슈제의가 가능하도록 했기 때문에 그런점도 있습니다.
여기서 몇가지만 정리 하도록 하겠습니다.
Native API를 Dart에서 직접 호출 불가합니다.
특별히 심하게 문제가 되진 않지만 외부 플러그인을 써야합니다.
Code Pushing
코드를 고치려면 새 버전을 배포해야 합니다.
React Native, Cordova, Ionic 에선 이미 지원 중 입니다.
https://github.com/flutter/flutter/issues/14330
Air BNB Lotti 사용 불가합니다.
Flutter는 지원하지 않습니다.
Android, iOS, React-Native만 지원
로티는 어플리케이션에 Fancy 한 에니메이션을 넣어주는 라이브러리이며 제가 개인적으로 좋아하는 라이브러리 입니다.
https://airbnb.design/lottie/
웨어러블 디바이스앱에 약합니다.
https://pub.dev/packages/wear
위 플러그인이 있지만 Native 마냥 쉽게 되지 않습니다.
C/C++ 라이브러리 호출이 안됩니다.
NDK C/C++ 라이브러리 호출이 Dart에서 안됩니다.
외부 플러그인을 써야하고, 원하는 플러그인이 없다면 만들어야 하는데 이는 보통일이 아닙니다.
지원되는 플러그인이 부족하다.
아직 플러그인들은 부족한 편입니다.
어플을 생성할 때, Webview, Map 등 플러그인은 필요합니다.
하지만 Flutter의 이러한 플러그인들은 전부 0.4, 0.3 등등 1.0을 넘는 버전을 보기가 힘듭니다. 따라서 지속적으로 업데이트가 되고있고, 업데이트가 될때마다 다시 붙이고 테스트해보는 것은 어마어마하게 번거로운 일이 될 것입니다.
아직까진 국내에 개발관련 자료가 많이 없다.
Android, iOS Native는 나온지 오래되서 자료가 많다보니 문제해결이 쉽습니다만, 국내엔 아직까진 자료가 많다고 할수가 없어 이슈 상황 발생시 자료 찾기가 어렵습니다.
또한, Flutter 개발자들도 그렇게 많은 편이 아니기에 도움을 구하기도 어느정도 힘이 듭니다.
이 밖에도 약 7500개가 넘는 Issue가 현재 Github에 열려 있습니다.
앞으로 모바일 시장을 Flutter가 전부 지배할 것이라고 말하시는 분도 있습니다만.... 그런 상황은 오지 않을 겁니다. 결국엔 Flutter도 Native 코드를 사용하기 때문이고 하나의 개발 방법이기 때문입니다. 거기다 어느정도 여유가 되는 회사라면 각각의 플랫폼 전문가를 뽑아서 개발을 하는것이 소프트웨어 품질에 있어 좋기 때문입니다.
그래도 Flutter가 좋다!
이 세상에 완벽한 것은 없습니다. Android만 보아도 Butterknife라는 유명한 라이브러리가 있고 한때 완벽한 라이브러리라고 칭송받았지만 결국엔 모바일 디바이스 성능의 변화, 개발 스킬의 다양화로 인해 Deprecated가 되며 데이터바인딩으로 대체 되었습니다. 영원한 것은 없는 것 입니다.
하지만, Flutter는 이미 크로스 플랫폼 계열에서 어마무시하게 강력합니다.
이미 구글 애드워즈, 구글 스태디아, 알리바바 - 텐센트에서 Flutter를 사용중입니다.
https://flutter.dev/showcase
Flutter 는 Native로 빌드와 컴파일을 지원하기 때문에 빠른 성능이 매우 인상적이지만
Dart가 가지는 문제점 및 React-Native와의 경쟁 등 넘어야 할 산이 많습니다.
하지만 지속적으로 업데이트되고 성능만 본다면 React-Native와는 비교도 되지 않기에 Android와 iOS 둘다 서비스 출시를 하는 프로젝트에 도입을 고려해본다면 나쁘지 않다고 생각합니다.
https://flutter-ko.dev/docs
나무위키
https://jaceshim.github.io/2019/01/22/flutter-study-about-flutter/index.html
https://engineering.linecorp.com/ko/blog/flutter-pros-and-cons/
https://sambalim.tistory.com/33
잘 봤습니다. 감사합니다!