Flutter vs Unity? 게임이 아닌 앱을 Cross platform 으로 개발시 Flutter 와 Unity 고려해야 할 점들은?
많은 개발자, 또는 개발자가 아니더라도 앱 개발과 크로스플랫폼 개발 환경에 대해서 관심이 있는 사람이라면 Flutter 와 Unity3D(이하 유니티) 쯤은 쉽게 접하는 키워드일 것이다.
필자는 최근 유니티 엔진을 이용해서 안드로이드 단말에서 구동하는 키오스크 앱 프로젝트를 진행한 경험이 있고 이 과정에서 크로스 플랫폼(Cross platform) 개발에 대해서 많은 고민을 했던 바 있다.
일단 Flutter 나 유니티 에 잘 모르신다면 한번 둘러보시길 ...
Why Unity?
왜 안드로이드 스튜디오에서 자바나 코틀린을 이용하는 일반적인 앱 개발 방법을 사용하지 않고 유니티(정확하게는 Unity as a Library) 엔진을 사용했는가?
이유는 별거 없다. 이전에 게임 개발을 하면서 유니티와 C# 언어가 제공하는 강력한 기능에 매료되어 그 후로 좀 Complex 한 UI 개발이 필요한 경우에는 일단 1순위로 유니티를 사용하는 걸 고려하게 되어 버렸다. 그 뿐이다.
Why Flutter?
일단은 Google 형님이 강려크하게 Support 하고 계시는 중이다. 하루가 멀다 하고 새로운 위젯이나 라이브러리들이 나온다. 이러한 뒷받침에 왕성한 커뮤니티를 기반으로 한 다양한 플러그인, 라이브러리들이 개발을 더 쉽고 빠르게 해준다.
Flutter, 유니티 모두 크로스 플랫폼이라 One code base 로 Android, iOS 동시에 개발이 가능하다
이번 글에서는 게임이 아닌 일반적인 앱을 개발할 때 Flutter 나 유니티중 어느 한가지를 선택해서 개발을 할때 고려해야 할 점들은 어떤 것들이 있을지 필자가 그동안 경험한 부분과 Search 한 것들을 토대로 각각의 장단점을 나열해 본다. 여기서 나열한 부분은 지극히 개인의 경험상 느낀 생각을 표현한 것일 뿐이며 어느 한쪽의 단점은 상대쪽에겐 장점이 될 수 있다.
유니티로 앱 개발시 단점
- 배터리 광탈 - 하지만 어느정도 Optimizing 가능함
- 일반 앱 개발시 발생하는 문제와 관련하여 StackOverflow 에서 찾을 수 있는 자료가 많지 않다.
- 일반 앱 개발 관련하여 생산성을 높여주는 라이브러리들이 많지 않다.
- UI 개발시 Material 이나 Cupertino style 로 표현하고자 하는 경우 유니티가 제공하는 UI 시스템을 최대한 이용하여 생산성을 끌어 올리기 쉽지 않다.
- 유니티로 일반 앱을 개발하는 개발자가 많지가 않아서 서비스가 성장할수록 관련 개발자를 채용하기가 용이하지 않을 수 있다.
- Navigation stack (페이지 이동 관련) 구현을 직접 해야 한다.
- SVG 사용 쉽지 않음.
- APK 사이즈가 크다. 네이티브, Flutter 통틀어서 가장 크다.
- 네이티브 기능(카메라, 센서 등)에 특화된 앱 개발시 고단해짐.
- Android, iOS 각 SDK 변화에 대한 빠른 대응이 미흡하다.
유니티로 앱 개발시 장점
- 네이티브스러운(Material, Cupertino) UI 를 고집하지 않는다면 UI 개발이 즐거워진다.
- UI 개발시 유연성이 커져서 디자이너/artist 들의 요구사항을 왠만하면 무리 없이 반영할 수 있다. 이를테면, Flutter 나 네이티브로 개발할 때처럼 디자이너가 요청한 부분에 대하여 가능한지, 가능하지 않은지, 어떤 부분은 수정해야 하는지, 감안해야 하는지 등등... 많은 부분에서 서로 고민하는 부분이 덜해진다. 이 부분이 내가 유니티로 일반 앱 개발을 즐기는 가장 큰 이유가 아닌가 생각한다.
Flutter 로 앱 개발시 단점
- 기존 앱 개발자가 진입하기에 그래도 Learning curve 가 있다. (새로운 언어 Dart 를 익혀야 한다)
- Flutter 자체가 아직 성숙하지 않은 상태라 계속해서 개발이 되고 변경되는 부분이 많다 (Dart 도 마찬가지).
- Java, Kotlin, C# 대비 Dart 에 대한 신뢰도가 크지 않다.
Flutter 로 앱 개발시 장점
- 네이티브 코드와의 Communication 이 비교적 간단함.
- UI 개발시 Material, Cupertino 등 일반 앱 스타일스러운 개발이 빠르다.
- Hot reload 로 개발이 정말 빨라진다. 이 부분은 특히 장점이라 할 만하다.
- 비교적 화려한 UI (에니메이션 등) 구현이 가능하다.
** FYI **
유니티에서 Flutter 위젯을 사용하는 것과 같은 개발 경험이 가능하게 해주는 라이브러리 UIWidgets 도 존재하니 참고할 만하다.
결론 (지극히 개인적인 의견)
- 화려하고 복잡한 UI 개발이 필요하면 유니티, 네이티브 스러운 앱을 빠르게 개발하고자 한다면 Flutter ??
- C# 과 유니티를 사랑하는 입장에서 크로스 플랫폼 개발시 아직까지는 유니티를 1순위로 사용하고 싶다. 하지만 네이티브 스러운 앱 개발시 Flutter 도 쓸만한 거 같고 이 부분에 대한 고려시 그 비중이(Flutter에 대한) 점점 커진다.