본문 바로가기

앱개발이야기

플러터(Flutter)의 장점

크로스 플랫폼 앱 개발을 하고자 하는 사람들은 플러터(Flutter)와 리액트 네이티브(React Native)에 대해서 많이 들어 봤을 것이다. 안드로이드 (Java, Kotlin)와 iOS (Object-C, Swift)에서 동작하는 앱을 하나의 코드 베이스로 구현할 수 있는 것은 정말 어마어마 한 장점이다. 나 또한 반쪽짜리 앱 개발이 싫어서 시작하는 것을 꺼려하고 있었으나, 리액트 네이티브를 접하고 나서 본격적인 앱 개발을 시작하게 되었다.

근 두달간 개인 프로젝트에 플러터를 사용하고 있다. 토이 프로젝트로 시작했기에, 처음에는 일단 Dart와 Flutter를 익히는 것에 의의를 두었었다. 그러나 지금은 작지만 재미있는 앱을 출시할 시점이 다가오고 있다. 이전 글에도 적었던 것처럼,  사실 익숙한 React Native를 선택하지 않고 Flutter를 선택하기까지 상당히 많이 고민했다. "플러터가 리액트 네이티브보다 좋은 이유 10가지" 같은 글들을 찾아서 읽으면서, 플러터를 사용해야 할 정당성을 찾는 시간이었달까. ReactJS와 React Native로 큰 프로젝트를 해본 경험이 있기 때문에, 플러터를 선택하는 것은 정말 정말 힘들었다. 자칫 잘못하면 프로젝트를 시작하기도 전에 새로운 언어와 프레임웍에 적응하느라 지쳐 버릴 수 있기 때문이다.

두 달 정도 사용 해 본 결과, 플러터는 전반적으로 아주 괜찮다. 우선 내 생각에는 진입장벽이 리액트 네이티브보다 낮다고 생각한다. 다트를 익혀야 한다는 점을 감안하더라 플러터로 시작하는 것이 리액트 네이티브로 시작하는 것보다 수월하다고 느꼈다. 그 이유는

어떤 UI 라이브러리를 사용할 것인지 고민 할 필요 없다

리액트를 사용해 본 사람은 공감 할 것이다. 처음에 어떤 UI 라이브러리를 사용할지 선택하는 것이 결코 쉽지 않다. 리액트 JS에 비해서 리액트 네이티브의 경우는 조금 낫지만 어쨌든 선택이라는 것이 주어지면 그에 따른 결정에 책임을 져야 한다. 프로젝트 중반이나 후반에 구조적인 문제로 UI 라이브러리를 변경하는 것은 사실상 불가능하다고 봐야 하므로 초기부터 많은 것을 고려할 수밖에 없다.

이 부분에서 플러터는 자유(?)롭다. 선택이 한 가지밖에 없기 때문이다. 플러터는 기본적으로 Android의 매터리얼 UI와 iOS의 cupertino UI 라이브러리를 제공한다. 이 둘은 구글 엔지니어들이 제작했고, 구글 외 여러 회사들이 이미 사용하고 있다는 점에서 일단 신뢰가 간다. 그리고 데모 앱에서 보이는 결과물도 훌륭하고 호환성 문제도 없기 때문에 매력적이다. 좋게 말하면 확실한 선택, 부정적으로 말하면 선택의 여지가 없기 때문에 깊이 조사할 필요 없이 바로 시작하게 된다.

다양한 선택, 양날의 검

리액트 네이티브 프로젝트를 시작하려면, 고민할 것이 상당히 많다. Webpack을 쓸지 Parcel을 쓸지, 상태 관리는에는 무엇을 사용할 것인지 (Redux, MobX, Context..), Async Action은 뭘 사용할지, Typescript Babel Flux 등등 선택할 것들이 많다. 물론 가장 흔하게 사용하는 조합이 있고, 나라면 그동안의 경험상 Babel4 + Redux + Typescript를 선택하겠지만 이 조합에 대해서는 늘 의견이 분분하다. 개인적으로는 Redux는 생각보다 남용되는 경향이 있다고 본다. 대부분의 개인 프로젝트는 Redux를 사용하는 것보다 단순 Context 나 MobX 사용하는 것이 훨씬 효율적이라고 생각한다. 물론 규모가 큰 프로젝트에서는 Redux가 마치 척추같은 역할을 해주는 것 같은 느낌을 받기도 한다. 뭔가 주렁주렁 달린 것들이 엉망이 되지 않도록 잡아주는 느낌이랄까. MobX는 초기에는 빠르고 편하지만 프로젝트 규모가 커지면 상태 플로우를 말끔하게 유지하는 것이 쉽지 않은 것 같다.

플러터는 선택에 소요되는 시간이 적다

반면, 플러터는 태생이 그러하듯 선택할 수 있는 것들이 매우 제한 되어 있다. 빌더나 언어 등은 선택이라는 것 자체가 없고, 상태 관리의 경우도 Provider라는 단순한 라이브러리로 시작하면 어려울 것이 없다. React와 MobX를 React Native와 함께 사용하면서 느꼈던 불만들이 Provider를 통해 조금 해소되는 느낌이 든다. 따지자면 Provider는 MobX와 조금 더 비슷한데, 그보다 훨씬 캐주얼하다. 그러나 개인적으로 Redux처럼 깔끔하게 상태를 관리하는 것은 쉽지 않은 것 같다. Redux는 마치 랜선 바인딩이 완벽하게 된 서버 랙 같은 느낌이라면, Prodiver (MobX도 마찬가지)는 마치 바인딩을 대충 하고, 중복으로 하고, 몇 개는 빠트린 서버 랙 같은 느낌이다. 비유하자면 상태를 한눈에 보기에는 조금 어려움이 있지만, 그 대신 케이블 이곳저곳으로 옮겨 꼽는다거나 서버 위치를 옮긴다거나 하는 것은 훨씬 쉬운 것 같이.

Redux

 

Provider / MobX

결론은,  플러터로 시작하면 선택하기위해서 조사하고 고민하는 시간이 많이 줄어든다. 이는 사이트 프로젝트로 앱을 개발하고자 하는 개발자들에게는 매우 큰 장점이다.

UI 개발이 쉽다

플러터로 UI를 개발하면서, 리액트네이티브로 개발하던 것보다 훨씬 큰 쾌적함을 느낀다. 회사에서 하는 프로젝트와 개인 프로젝트를 비교하는 것은 공평한 비교가 아니지만, 그것을 감안하더라도 앱을 구성하는 기본 UI 자체를 구현하는 것은 Flutter가 훨씬 빠르고 편한 것 같다. 만일 매우 프로페셔널 한 수준의 복잡하고 고급진 UI를 구현하는 것을 원한다면 단연 Flutter가 쉽다. 생각하는 대부분의 것들이 이미 구현되어 있고, 매우 정교한 수준의 커스터마이징도 가능하며, 개떡같이 만들어도 오류 없이 잘 동작한다.

그런데 여기서 말한 "쉬운 UI 개발"은 사실 순수 UI에만 해당 된다. UI를 구동하는 상태 관리 라던지 특정 기능을 수행하는 복잡한 로직을 구현하는 것은 별개의 문제이다. 만들고자 하는 앱이 간단하다면 더 쉬울 수 없을 만큼 쉽다. 그러나 조금 더 네이티브에 가까운 기능들을 구현하다 보면 아쉬운 점이 많다. 자바스크립트는 엄청나게 많은 라이브러리들을 쉽게 가져다 사용할 수 있지만, Dash를 사용하는 Flutter는 아직도 라이브러리가 너무나 부족하다. 아마도 앞으로도 따라가는 것은 불가능하리라 본다. 선택의 폭이 좁다는 것은 이 부분에서 정말 큰 단점으로 작용되는데, 복잡한 부분을 개발하다 보면 리액트 네이티브로 갈아타고 싶을 때가 한두 번이 아니다. 이에 대해서는 나중에 따로 적으려 한다.

분명 단점도 많이 있지만 나는 여전히 플러터로 앱 개발에 도전해 보는것을 추천한다. 문서가 매우 잘 되어 있고, 처음에 주어진 라이브러리가 매우 강력하기 때문에 길을 헤매지 않고 앱 개발에 몰두할 수 있다. 언 듯 생각하기에는 매우 복잡할 것 같은 기능들도 플러터에서 의외로 매우 쉽게 구현할 수 있는 경우가 많고, 이점이 큰 매력으로 다가와서 플러터 앱 개발을 계속하게 되는 것 같다.

 단점은 시간이 지나면서 극복 될것이고, 머지않아 플러터 개발자 수요가 급격히 증가할 것으로 생각된다. 현재 종종 부딪히는 호환성 문제도 AndroidX와 Swift로 완전히 넘어가면 대부분 해소될 것으로 보인다.

 

재미있게 읽으셨다면 "공감" 버튼과 댓글로 응원해주세요. 로그인 없이도 됩니다. 😀