얼마전 3개월 남짓 진행했던 토이 프로젝트를 마무리 짓게되었다.
나는 어플리케이션쪽을 담당하여 Flutter 기반의 앱 개발을 진행하였으며, Flutter를 활용하면서 느꼈던 점들을 정리하여 글을 쓰기로 결심하였다.
Flutter
처음에는 단순히 구글에서 만든 장난감같은 프레임워크라고 생각하고 시작하게 되었다. 그 동안 무수히 많은 하이브리드 플랫폼들이 반짝였다가 사라진걸 경험 하였기에, 많은 기대로 접근한것은 아니였다. 하지만 1개월 정도 학습 후에는 생각이 많이 달라지게 되었다.
개인적으로 생각하는 Flutter 의 장점과 단점은 아래와 같다.
<장점>
장점1. 렌더링 속도가 빠르다. ( 렌더링 방식이 게임 엔진과 유사하다 )
장점2. Hot Deploy 기반의 빠른 UI 변경/확인이 가능하다
장점3. 관심도가 높아져 하루에도 수십개의 플러그인들이 출시된다.
기본적으로 Flutter는 게임 엔진과 유사한 렌더링 방식을 자체적으로 사용하여 매우 빠른 렌더링 속도를 보여준다. 때문에 이번에 Daymood 앱을 개발하면서도 Dart 기반의 2d 물리엔진(Box2d) 도입을 검토할 수 있었다.
또한 Hot-Deploy 를 지원하기 때문에 디자이너에 의견에 따라 빠르면 2~3분안에 UI/UX를 변경하여 빠른 피드백으로 개발 속도를 높일 수 있었다.
그리고 비록 아직은 0.x대 플러그인들이 많지만, 다양한 위젯 라이브러리들이 오픈소스로 제공되는것이 많아 대부분의 디자이너의 요구 사항을 오픈소스 기반으로 처리 할 수 있었다. 사용한 대표 라이브러리는 아래와 같다.
- https://pub.dev/packages/table_calendar ( 오픈소스 캘린더 )
- https://pub.dev/packages/simple_animations ( 애니메이션 효과 )
- https://pub.dev/packages/flame ( 게임 & 물리 엔진 )
- https://pub.dev/packages/esys_flutter_share ( 외부 파일 공유 )
- https://pub.dev/packages/dio ( HTTP Client )
위 라이브러리 외에도 10~15개 정도의 오픈소스를 추가로 사용하였다.
<단점>
단점1. 오픈소스가 0.x 버전이 매우 많다.
단점2. Firebase 기반의 라이브러리들이 버전이 제 각각이다.
단점3. iOS와 Android의 렌더링 퍼포먼스 차이가 보인다.
이번 개발에는 큰 문제가 된 단점들은 아니지만, 만약 Flutter을 회사의 공식 프레임워크로 사용한다면 고민이 될 문제일것 같다.
많은 플러그인 0.x 버전이라 조금 불안정한 면이 존재하며, Firebase쪽은 한개씩 추가할때마다 build.gradle 설정을 바꿔줘야하는 귀찮은면들이 존재한다.
그리고 이번 프로젝트에서는 과감하게 물리엔진을 사용해봤는데, iOS와 Android의 렌더링 퍼포먼스 차이가 꽤 심하게 나는편이라 최적화에 애를 많이 먹은편이었다. 또한 렌더링 객체가 많아지면 물리 엔진이 가끔 crash를 뱉고 있는데, 이 부문은 아직 해결하지 못하고 있다. (이슈 등록 완료..)
다음 프로젝트는 뭘로?
결론적으로는 앞으로 내가 앱을 개발한다면 무조건 Flutter를 사용하게 될 것 같다.
iOS와 Android 를 둘다 경험해본 입장에서는 프로토타입 구성 및 생산성이 200% 이상 향상되는것을 느꼈으며, 네이티브에 비하여 렌더링 퍼포먼스 또한 크게 저하되지 않는다고 판단되었다.
하지만 특정 고유 기능(카메라, 영상 편집, WebView)등에 대하여는 아직 불안하거나 미진한 부문이 많아 이런 고유 기능이 중요한 앱이라면 네이티브로 개발할 것이다.
마치며
Flutter 짱짱맨!!
Flutter로 개발한 Daymood
는 아래 링크에서 다운 받을 수 있다. 개인적 바램으로는 2월 중순까지 한가지 앱 정도를 더 출시하고 싶다.
납기는 생명! 품질은 자존심!