Flutter, 과연 만능의 툴일까?

CuroGom
Flutter Seoul
Published in
6 min readNov 3, 2021

사실 저는 Flutter에 굉장히 관심사를 두고 있고,
Flutter를 주력으로 1년 조금 넘게 상용 서비스도 개발 해 보고,
앞으로도 Flutter의 발전을 바라는 입장에서는
굉장히 위험한 주제이기합니다.

하지만 개인 메일을 통해
이번 블로그 주제에 대한 질문들을 꽤 많이 받았고,
꼭 한번은 다뤄야 할 것 같은 주제라서 다뤄봅니다.

P.S) 메일 받는거 좋아합니다. (협박성, 광고성 빼고요)

1. Flutter로는 뭐든지 만들 수 있다?

뭐든지 만들 수는 있습니다.
그런데 현재 Flutter를 접하시고, 개발 중이신 분들께서는
생산성을 가장 큰 이유로 Flutter를 선택하셨을 겁니다.

이 뭐든지 의 정의가 조금 중요할 듯 한데,
‘어느 플랫폼이던 서비스를 할 수 있다.’ 는 맞습니다.
‘모든 서비스를 만들 수 있다.’ 도 맞습니다.

하지만
‘어떤 플랫폼이던 모든 서비스를 높은 생산성으로 만들 수 있다.’
는 동의하지 않습니다.

Flutter는 UI 구조를 여러 플랫폼에
한 코드로 띄울 수 있다는 것이 장점입니다.

단점이라고 한다면, 그 뒤에서 움직이는 OS / 플랫폼에 특성에 대해서는
별도의 작업이 필요하다는 점입니다.

이를 Flutter에서는 MethodChannel 등을 활용해 해소하고 있고,
최근에는 세계에 여러 많은 개발자 분들이 라이브러리를 개발,
pub.dev을 통해 배포하여 지금은 상당수 뒷작업을 줄일 수 있지만,
라이브러리는 모든 서비스에 입맛을 딱 맞추어 개발이 되지 않는 만큼
그 부분에 대한 지식, 경험은 필요하게 됩니다.

때문에 복잡하고 고차원적인 형태의 서비스를 Flutter로 구축하기 위해선
Flutter의 장점인 생산성이 오히려 관련 라이브러리가 없어,
생각보다 오래 그리고 많은 리소스를 필요로 할 수도 있습니다.

해당 이미지는 최근 GDG Songdo에서
Flutter 101을 요청하셔서 만든 자료 중 한 장입니다.

좌측 위 부터 설명하자면
Flutter는 UI에 특화 된 툴이지
하드웨어 기반 UX에 특화된 툴은 아닙니다.

때문에 Flutter 기반의 AR / VR을 다루기는 많이 어려우실테고,
state 관리가 굉장히 중요한 프레임워크다 보니
다양한 상태에 대해 빠르고 복합적인 관리가 필요한 게임 같은 콘텐츠는
Flutter로는 적절하지 않습니다.
(사실 이쪽에는 Unity / Unreal 이라는 훌륭한 대체재가 있습니다.)

만약 Flutter로 꼭 AR이 구현 되어야 한다면 아래의 글을 읽어보시고,
신중히 선택하시기 바랍니다.
https://medium.com/potato/building-with-flutter-unity-ar-experience-toolkit-6aaf17dbb725
(requester : Flutter 개발자 모임 — HDD 님)

또한 특정 SDK나 하드웨어 모듈을 사용하여야 하는 경우
이 경우에도 Flutter보다는 Native를 권장드리고 싶습니다.
물론 관련 SDK나 데이터 정제를 Back-end 쪽으로 보낸다면 괜찮겠지만,
이미지를 통한 오브젝트 디택팅이나 강화 학습 등을 위한 MLKit 같은 경우
Flutter에 관련 라이브러리가 풍부하지 않은 이상 활용하기 어려울뿐 더러,
관련 기능들은 OS마다 차이가 심해 결국 Flutter로 진행 하셔도
MethodChannel을 활용 하셔야 할겁니다.

세번째는 Flutter Web이 stable 버전이 된 것은 맞지만,
SEO (검색 엔진 최적화) 부분에는 아직 나아가야 할 부분이 많습니다.
특히 웹에서 HTML 형태가 아닌 모두 JS 형태로 변환되어 동작되는 구조상,
검색을 통한 외부 유입이 필요한 경우 적합하지 않습니다.
하지만 역으로 Dom에 대한 검색이나 접근이 상당수 제한되기 때문에
강력한 보안이 필요한 사내 Dashboard 같은 웹을 구축해야한다면
Flutter는 좋은 선택지가 될 수 있을 겁니다.

그리고 마지막 항목은, 아에 별도로 다뤄보겠습니다.

2. 취업과 이직을 위해 Flutter는?

최근 학부생 분들로 부터 ‘앱 개발자가 되려고 Flutter를 배워보고자 합니다.’
라는 소개글을 상당히 많이 접하고는 합니다.

그럴때 마다 저는 항상 하는 이야기가 있습니다.
앱 개발자로 취업 하시기를 희망하시는거라면
‘Flutter보단 Kotlin이나 Swift를 활용한 Native로 먼저 시작 하세요.’

Flutter는 사실 전통적인 Native 앱 개발에 의존성을 두고 있습니다.
사실 두어야만 하는 프레임워크입니다.

그러다보니 Native에 대한 지식이 전혀 없이 Flutter를 하게 된다면?
개발 중 역행해 와서 Native에 대한 공부를 다시 하셔야만 할 겁니다.
물론, 웹개발만 하다가 Flutter로 앱을 개발하기 시작했던 저도
그런 과정을 경험해 보았습니다.

그러다보니 Flutter를 잘 하기 위해서는 Native에 대한 지식은 필수입니다.
그러니 취업과 이직을 하기 위해서 Flutter를 하신다면
Flutter를 쓰는 기업에 취직 할거야! 가 목표가 아닌,
Flutter를 통해 Mobile Platform에 대한 이해와 접근
그리고 서비스를 운영해 보면서 생기는 문제점과 이슈들을 경험하기 위해
Flutter를 하신다면 더 좋은 결과가 있지 않을까 생각합니다.

3. Flutter로 만든 서비스, 언제 Native로 옮겨야 하나?

지금 만드신 서비스가 Flutter 환경에서도 문제가 없고,
여기에 추가 될 서비스도 Flutter 환경 내에서 문제가 없다면?

굳이 Native로 가실 이유는 없습니다.
(오히려 Native로 Migration 하는 작업이 훨씬 기회비용이 많이 들 것 같네요)

혹은 추가 될 서비스가 Flutter 환경에 문제가 있을 것 같다?
하지만 MethodChannel을 활용해서 해결이 될 것 같다?
하는 경우에도 물론 전환하실 이유는 없습니다.

다만 Flutter에서 굳이 Native로 옮겨야 한다는 이유가 있다면
- OS의 업데이트에 따라 생기는 신규 기능을 가장 빠르게 적용하고 싶을 때,
- 혹은 Flutter로 서비스 하고 있는 기능 중 OS의 업데이트로 인해
해당 기능을 더 이상 Flutter로 유지할 수 없을 때,
- 서비스가 크게 확대 되어 특정 OS 마다 유저의 UX를 증대시키고 싶거나,
하드웨어와 밀집한 기능을 추가하여야 할 때,
등의 이유라면 마땅히 Native로 전환 하셔야 한다고 생각합니다.

다소 위험할(?) 수 있는 내용의 글을 주저리 주저리 써 보았지만,
Flutter는 UI를 빠르게 구현하고 구축하고 그리고
Dart를 활용하여 양질의 서비스를 제공할 수 있는
좋은 프레임워크
엔 확실합니다.

해당 글의 내용은 어디까지나 제 개인적인 경험과 생각입니다.
관련해서 의견이 있으시거나, 잘못된 부분이 있다면
해당 글의 Comment나 제 메일 i_am@curogom.dev로
언제든 연락 부탁드립니다.

읽어주셔서 감사합니다.

--

--

CuroGom
Flutter Seoul

BroadCast Eng (2013 ~ 2018), Developer (2019~ ) / mail : i_am@curogom.dev