플러터를 처음 써본 건 2020년 회사에서 플러터로 앱을 만들 수 있느냐 없느냐 하는 점심시간의 수다 내용으로부터 시작되었었는데요. 그 당시에는 가벼운 테스트 끝에 플러터 자체가 별로 좋지 않아서 쓰지 않는 걸로 결론이 났었는데, 이제 어느덧 꽤 많은 앱들이 플러터로 만들어지고 있더라구요. 그래서 이 번에 다시 플러터에 대해서 공부해보고자 합니다.
Flutter란?
다들 아시겠지만 플러터는 크로스플랫폼을 위한 프레임워크입니다. 잘 모르시는 분들에게는 iOS와 안드로이드를 동시에 개발할 수 있다 정도로 알고 계시지만, 웹과 데스크탑 앱도 만들 수 있습니다. 하지만 웹은 flutter 2.0부터 지원하고 있으며 2.0은 21년도에 공개된 아직 따끈따근한 신상이기 때문에 조금 아쉬운 부분이 많다고 합니다. 또한 데스크탑은 2.1 버전부터 지원하고 있으며 2.1 버전은 22년도에 안정화되었다고 하니 웹보다 더 조심스럽게 접근해야 할 것 같습니다.
언어는 Dart 라는 언어를 사용하며, 선언형 UI 방식을 이용합니다. 이는 Android의 ComposeUI나 iOS의 SwiftUI와 같은 방식입니다. 그래서 스유나 컴포즈를 사용하던 사람이라면 좀 더 쉽게 적응할 수 있겠습니다.
Flutter는 Android Studio에서 구동이 가능합니다. 또한 VsCode에서도 작업이 가능합니다. Flutter IDE VsCode vs Android Studio로 검색해보면 많은 사람들이 굉장히 여러 주제로 싸우고 있다는 것을 알 수 있는데요. 제 개인적인 생각으로는 그냥 자기한테 편한 거 쓰시면 됩니다. 현재로서 Flutter를 사용하기 불편한 IDE는 없는 것 같아요. 저의 경우에는 당연히 안드로이드 개발자니 단축키도 익숙한 Android Studio를 쓰는데요. VsCode가 좋다고 해도 저한테는 친숙하지 않아서 불편한 것 같습니다.
Flutter의 장점
기본적으로 Flutter가 가진 장점은 대부분 크로스플랫폼이 주는 장점과 비슷합니다. 기본적으로는 iOS와 안드로이드를 동시에 개발할 수 있다는 점이 있겠습니다. 위에 적어뒀다시피 요새는 웹과 데스크탑 앱도 지원을 하고 있지만(심지어는 리눅스까지도 지원중이라고 하네요), 웹보다는 아지까지는 크로스모바일 플랫폼으로 더 유명하고, 나머지는 확실한 검증이 필요하기 때문에 iOS와 안드로이드의 동시 개발이 가능하다는 점 정도만 인지하면 되겠습니다. 원 소스 프로젝트의 가장 큰 장점은 같은 소스를 사용하기 때문에 특별한 경우가 아니라면 동일한 동작 및 UI를 기대할 수 있다는 점입니다. 거기다 비즈니스 로직도 동일하게 사용하니, 왠만하면 iOS와 안드로이드의 동작이 달라져 추가적인 커뮤니케이션을 거치는 일이 줄어들겠죠.
그 다음으로는 다른 크로스플랫폼에 비해 좀더 UI의 렌더링에 강점을 지니고 있습니다. 다른 크로스플랫폼에 비해 UI를 직접 그림으로서 추가적인 작업을 줄이고 좀 더 높은 프레임을 유지하게 도와준다고 합니다. 이는 확실히 RN과 같은 프레임워크를 이용했을 때 따라오는 UI에 대한 아쉬움을 어느 정도 해결해주는 부분이라고 할 수 있습니다. 당연히 네이티브 보다는 조금 느리겠지만 대부분의 앱들이 가진 애니메이션이나 UI에서는 플러터의 성능으로도 충분히 불편함이 없을 정도입니다.
또한 플러터가 자랑하는 핫리로드 기능이 있는데요. 이는 재빌드를 시행하지 않아도 현재 연결된 에뮬레이터 기기나 단말에 바로 코드의 변화를 표시해주는 것을 의미합니다. 웹 개발을 하시는 분들에게는 좀 익숙한 기능일 수 도 있겠습니다. 또한 안드로이드 컴포즈의 경우 버그가 많고 잘 안되긴 하지만, 어쨌든 핫리로드 기능이 일부 지원되고 있으니 그 기능의 장점을 크게 보실 수도 있을 것 같습니다.
Flutter의 단점
flutter의 가장 큰 단점은 용량이라고 하네요. 일단 기본적으로 네이티브 앱들보다 많은 기본 라이브러리가 내장되어 있기 때문에 용량이 훨씬 많다고 합니다. 요즘 휴대폰 단말의 경우 앱 용량이 몇MB 차이가 나는 것 정도로는 크게 신경 쓰지 않을 수 있지만 유저들 중에서 앱 용량에 신경을 쓰는 사람이 꽤 많고(특히 그럴 용량이 아닌데 용량이 매우 큰 앱의 경우 악성어플인지 아닌지 의심을 하는 사람들도 많다고 하네요) 다운로드 받는데 시간도 꽤 걸리게 되니 아예 무시할 수는 없는 부분이겠죠.
두 번째는 아직 신생 프레임워크라는 점입니다. 물론 이미 발표 자체는 10년이 다 되어가는 프레임워크지만, 제대로 공략이 시작된 건 사실상 2020년부터 인 것 같고 체감상 본격적으로 안정화되어 사람들이 우후죽순으로 들어오기 시작한 건 채 3년이 안되는 것 같습니다. 그래서 Android나 iOS 네이티브보다 오픈소스나 커뮤니티가 훨씬 적다는 것을 알 수 있습니다(RN을 추월한 지는 좀 됐다고 하니 크로스플랫폼으로만 생각하면 이건 장점일지도 모르겠습니다). 원래 새로운 기술이 나오면 활성화되는데 시간이 걸리니 아마 이 문제는 몇년이 더 지나면 고쳐질 것 같긴 합니다.
세 번째 역시 크로스플랫폼이 가지는 단점으로서의 단점인데요. 아무래도 크로스플랫폼은 기존에 있던 플랫폼들을 원 소스로 작업할 수 있게 엮은 것이다 보니 네이티브의 모든 장점을 고루 누릴 수 없는 문제가 있습니다. 물론 이 부분도 시간이 지나면서 플러터가 지원을 해주는 분야가 늘어나고 있으니 시간이 해결해줄 수 있는 문제일 것 같긴 합니다(아마 진짜 심화기능은 구현상 어려울 수도 있겠지만요).
마지막 단점은 플러터의 구성 언어가 Dart라는 점입니다. Dart는 애초에 탄생 목적 자체가 Flutter이므로 플러터에 가장 최적화된 언어라고 볼 수 있는데, 이는 기존에 Dart라는 언어가 기존에 존재하던 언어가 아님을 의미하고 이는 모든 개발자들이 Flutter를 위해 언어를 새로 배워야 한다는 것을 말합니다. 물론 개발자들의 역량이 쌓이면서 기본적으로는 금방 언어를 배우긴 하지만, 그래도 분명히 학습에 리소스가 들어가야 하기 때문에 아쉬운 부분이라고 할 수 있겠습니다.
애매한 부분?
플러터에 장점으로 적히기도 단점으로 적히기도 하는 부분이 있는데요. 아무래도 플러터 개발자 1명이 iOS와 안드로이드 개발을 동시에 진행할 수 있다보니 회사에서는 당연히 플러터 개발자가 iOS와 안드로이드 개발자를 1명씩 뽑는 것 보다 싸니 플러터로 시작하는 것이 가성비가 좋다고 하는데요. 당연하게도 같은 연차 기준으로 개발자들 연봉은 천차만별이지만, 실제 실력에 비례해 연봉이 비슷하다고 가정하면 iOS와 안드로이드 5년차 2명보다는 플러터 5년차 1명이 더 싸게 먹히는 건 간단한 산수이죠. 하지만 애매하다고 적어놓은 부분은 플러터 자체가 오래되지 않아 플러터만 개발해본 개발자라면 대부분이 신입 ~ 3년차일 확률이 높고(매우 낮은 확률로 20년에 플러터에 몰빵하셨다면 5년차 이상일 수 있겠네요), 더 많은 연차라면 대부분 다른 개발(안드로이드나 iOS일 확률이 높겠죠)을 하던 개발자라 결국 연봉이 더 높아질 수 밖에 없을 것 같은데요. 실제로 플러터 개발자들의 평균 연봉이 연차가 7년이 넘어가면 더 높다고 나와있는 통계도 있더라구요(아마 정확하진 않을 겁니다. 그리고... 안드로이드 개발자로서도 주변 사람들의 연봉을 보면 천차만별이라...). 거기다 플러터 개발자 1명이 하는 개발이 only 1인분의 개발만으로 2개의 앱이 나올거라고 생각하지만 기능에 따라서는 꼭 그렇지도 않기 때문에... 각 OS 별로 달리 작성해야 하는 부분도 있고, 심지어는 같은 OS의 버전에 따라 플러터의 기능이 달리 구성되어 신경써줘야 하는 부분이 늘어나기도 하니 1 = 2이라고 단순 계산하게 되면, 생각보다 효율이 떨어질 수도 있을 것 같습니다.
결론적으로는 여러가지를 조합해보면 꼭 플러터 개발자를 뽑는 것이 싸냐?고 물어본다면 대략적으로는 맞는 말이지만, 생산성이나 효율을 생각하면 100% 맞아 떨어진다고는 볼 수 없습니다. 그러니 장점이 될 수도 있지만, 어쩌면 단점이 될 수도 있겠죠. 현실은 고려해야할 사안이 너무 많으니 현실적으로 판단해야 하는 것들은 좀 어려운 부분인 것 같습니다.
디자인 부분에 대해서도 이야기해볼 부분이 있는데요. 안드로이드는 구글에서 정식으로 머테리얼 디자인을, iOS는 쿠퍼티노(정작 iOS에서 공식으로 부르는 이름은 아닙니다만, iOS가 추구하는 디자인을 플러터에서는 이렇게 부른다고 하네요) 디자인을 사용중인데, 두 디자인이 꽤나 다릅니다. 이를 플러터에서는 혼용해서 사용할 수도 있고, 아니면 각 플랫폼 별로 다른 위젯을 만들어서 사용할 수도 있습니다. 이는 안드로이드 네이티브에서 iOS의 디자인을 커스텀하는데 불편함이 있고 반대도 마찬가지인데 반해 플러터는 그렇지 않은 것이 장점일 수도 있겠지만, 분명히 iOS 유저가 안드로이드 디자인을 보면 어색함을 느낄 것이고 반대도 마찬가지라 꼭 좋냐 라고 보기보다는 특색에 가깝다고 생각해야 할 것 같습니다.
또한 두 디자인을 각각 구현하게 되면 결국 크로스플랫폼의 장점 중 하나인 리소스를 절약한다는 부분에 있어 조금 어긋나는 부분도 애매하다고 볼 수 있겠습니다.
이건 좀 개인적인 의견인데, 개발 회사가 구글이라는 점은 정말 단점일 수도, 장점일 수도 있을 것 같습니다. 구글이 아무래도 새로운 걸 개발하는 것을 굉장히 즐겨하는 것 처럼 보일 정도로 열심히 만드는 것은 사실이지만 그에 따라 소리소문없이 사라지는 것들이 분명 많이 존재하거든요. 그런점에 있어 Dart라는 언어와 Flutter라는 프레임워크가 구글에 종속되어 있다는 것은 장점이자 단점이 될 수 있을 것 같습니다.
5년 새 플러터라는 프레임워크가 굉장히 많이 발전했다는 것을 느낄 수 있었습니다. 분명 초기에만 해도 Dart라는 언어는 쓰레기 언어 1위를 다투던 시절이었고 플러터는 느려서 못써먹을 정도였는데 어느덧 네이티브에 비해 많이 모자라지도 않으면서 기본적인 것들은 다 되는 좋은 프레임워크가 되었네요. 확실히 좀 더 발전하면 대세가 될 지도 모르겠습니다(그래서 저도 준비하려고 하는 것도 있구요).
요즘 실제로 외주 관련 프로젝트들을 보다보면 플러터를 찾는 업체들이 많아지고 있더라구요. 예전에는 RN이 많았었는데 새로 시작하는 회사들은 많이들 플러터로 시작하는 것 같습니다. 저도 주 목적은 플러터로 취업이 아니라 플러터로 외주이기 때문에 자리가 없어지기 전에 열심히 해봐야겠네요.
'크로스플랫폼 > 플러터' 카테고리의 다른 글
플러터 앱 아이콘 적용 (5) | 2025.08.11 |
---|
댓글