안녕하세요 오늘은 Flutter 란 무엇이며 어떤 특징이 있는지 소개하는 시간을 가져보겠습니다.
Flutter는 구글에서 개발한 크로스 플랫폼 앱 개발 도구입니다. 무려 구글이 개발했네요!!
구글이 플러터(Flutter)를 만든 이유는 앱 개발의 효율성, 생산성 등을 향상하기 위함이라고 합니다. 역시 갓구글이네요.
하지만, 근래에는 이러한 개발도구들이 차고 넘칩니다. 그래서, 새로운 기술을 도입하려는 분들에게 플러터를 왜 써야 하는지에 대해 핵심 질문을 한번 던져보아야 합니다. 섣불리 공부부터 시작하기보다는 기존의 것을 대체할 만한 특징은 무엇이고 단점은 무엇인지 파악하는 게 먼저입니다.
우선, 핵심 질문들을 추려보았습니다.
1. 플러터가 만들 수 있는 애플리케이션들의 종류는 무엇일까?
2. 협업 시에 플러터가 가지는 이점들은 어떤 게 있을까?
3. 플러터의 미래 기술 비전은?
4. 타 회사들이 플러터 사용 추세와 선택의 이유는 무엇일까?
5. 여러분이 미래에 앱을 개발할 때 플러터가 어떻게 사용될까?
6. 플러터와 유사한 개발도구에는 무엇이 있을까?
아마 여러분들도 이런 질문들을 떠올리며 플러터를 받아들여야 할지에 대해 고민이 많을 것입니다!
저희 팀은 이런 여러분들의 의문을 하나씩 해결해보도록 하겠습니다.
들어가기 앞서서 Flutter 3.0 릴리즈부터는 데스크톱 플랫폼에 대한 앱 개발을 지원하게 되었습니다. 만약, 아직 3.0 미만의 버전을 사용하고 계신 분들은 업데이트를 해주세요!
플러터는 무엇인가요?
여러분들은 윈도 환경에서. NET 프레임워크를 들어보셨을 것입니다. 그리고 프레임워크라는 단어를 붙이기에 플러터는 그 범위가 넓습니다. 하지만, 플러터는 SDK에 가깝습니다. 왜인지 살펴볼까요?
1. 플러터는 UI 라이브러리를 제공할 뿐만 아니라 렌더링 엔진까지도 제공합니다.
2. 완전한 애플리케이션을 빌드하기 위한 툴 또한 제공합니다. (즉, 윈도 앱으로 빌드까지 도와줍니다.)
즉, 플러터는 지저분하게 다른 도구들을 연결하고 호환을 체크할 필요가 없습니다. 모바일 및 데스크톱 앱 개발을 해보셨다면 호환성을 맞추고 다른 데스크톱 플랫폼에서 빌드를 위한 각종 까다로운 문제에 직면했을 겁니다. 그런데, 플러터는 모든 것을 자체적으로 제공합니다. (구글의 기술력과 자본력이기에 가능한 일이 아닐까요?)
플러터는 누가 사용할까요?
우리가 새로운 프레임워크 및 SDK를 선택하기 위해서 많은 고려할 사항들이 있습니다. 그중에 하나가 바로 레퍼런스입니다. 누가 플러터를 이용해서 서비스를 제공하고 어떤 규모인지 등등은 새롭게 학습할 지식을 선택하는 데 있어서 필수 고려 요소입니다.
왜냐하면 우리는 단순히 지식을 익히는데 만족하는 것이 아닌 지식을 이용해서 수익을 얻어야 하기 때문입니다. (설마 지적 욕구를 만족하기 위해 프로그래밍 공부를 하시나요?)
바로 본론으로 들어가 플러터의 레퍼런스를 간략하게 살펴보겠습니다.
- 100만 명 이상의 사용자를 보유한 Google Pay 앱
전 세계 100만 명이 넘는 사용자를 보유한 Google Pay 앱은 플러터를 사용자의 지불 및 계정 관리를 위한 용도로 플러터를 사용하였습니다. 안드로이드와 iOS 플랫폼에 모두 적용되었다고 합니다.
Google Pay 앱 개발팀은 처음에 플러터를 단순한 확장 도구로 여겼습니다. Pay 앱의 기능 중에 일부의 기능에만 플러터를 적용하려고 하였죠. 그러나, 이내 마음을 되돌려 앱을 재구축하기로 결정하였습니다. 그 결과 앱 개발팀은 엔지니어링을 위한 인력과 시간을 소모하였지만, 무려 아래와 같은 성과를 얻을 수 있었다고 합니다.
- 코드 베이스를 35% 절감
- 엔지니어링 시간의 60-70% 절감
만약, 이러한 성과가 Google Pay 앱 개발팀만 겪었다면, 그것은 단순히 홍보용이었을 것입니다. 구글의 서비스 중에 플러터를 적용하여 비슷한 성과를 얻은 케이스들은 아래와 같습니다.
- Google Assistant
- Stadia
- Google 광고 관리 앱
그리고 구글 외 회사들이 플러터를 도입하여 비슷한 효과를 얻은 케이스들은 아래와 같습니다.
- BMW
- Toyota
이 외에도 Crowdsource, 뉴욕 타임스, 알리바바 등도 플러터에 관심을 기울이고 있다고 합니다. 우리는 플러터가 매우 유망한 기술이고 전 세계적으로 많이 쓰이고 있음을 알 수 있습니다. 또한, 도입 효과 또한 탁월함을 알 수 있습니다.
플러터의 장점
플러터는 어떤 장점이 있는지를 살펴보겠습니다. 다른 경쟁 프레임워크들과 비교하여 어떠한 차별점이 있는지 보겠습니다.
1. 개발 속도의 향상
플러터의 장점 중에 하나는 바로 개발 속도를 향상해주는 특징입니다. 개발 속도라는 것은 단순히 코드를 빠르게 친다고 해결되는 것은 아닙니다. 기획부터 시장에 나가는 순간까지 모든 과정이 포함된 시간을 여기서 개발 속도라고 표현하였습니다.
플러터는 엔지니어링 비용 및 시장에 앱을 빠르게 내놓을 수 있도록 돕습니다. 즉, 기업의 비용을 줄이는 것을 의미합니다. 플러터의 비결은 바로 하나의 코드 베이스로 안드로이드, iOS 앱을 빌드할 수 있는 플랫폼을 제공하기 때문입니다. 3.0 릴리즈부터는 Windows, macOS, Linux 개발 환경과 더불어 웹 개발을 지원하는 단계에 왔습니다.
즉, 여러분들은 플러터를 선택함으로써 모든 플랫폼에 일관된 코드를 작성하고 하나의 코드 베이스로 작업함에 시간과 엔지니어링 비용을 절약할 수 있게 됩니다.
2. 개발 편의성
여러분들이 만약 앱을 개발해 보셨다면 편의성을 위한 설정들을 자주 하였을 것입니다. 하나 대표적인 예시를 들어볼까요?
- 웹을 개발할 때 F5 버튼을 일일이 눌러주기가 번거로워 "핫 리로딩(Hot Reloading)"을 적용
코드 베이스를 변경하고 일일이 빌드하는 시절은 이제 안녕입니다. 그리고 재 빌드하는데 시간이 오래 걸리는 순간도 플러터와 함께라면 작별의 시간입니다. Just In Time에 가까운 컴파일 속도를 플러터를 통해서 경험해보세요.
핫 리로드의 속도 향상은 코드 베이스 변경을 위한 사전조사, 변경을 위한 실험, 버그 픽스 등을 훨씬 쉽고 빠르게 해 줍니다. 즉, 개발자의 삶의 질을 향상해줍니다.
구글이란 회사에서 내부적으로 개발자의 삶의 질을 향상하기 위해서 노력한 만큼 "핫 리로딩"은 단순히 하나의 예에 불과합니다. 자세한 내용은 공식 문서를 통해서 확인해볼 수 있습니다.
3. 커스터마이징
애플리케이션 디자인은 마켓의 성패를 좌우하는 매우 중요한 요소입니다. 플러터는 이 사실에 착안하여 커스터마이징과 스타일링을 플랫폼의 중앙 컴포넌트에 배치하였습니다. (다양한 디자인 예시들을 살펴보려면 플러터 공식 홈페이지에서 제공하는 쇼케이스를 살펴보세요. https://flutter.dev/showcase)
아래와 같이 수많은 쇼케이스들을 통해 플러터가 디자인의 커스터마이징이 원활하도록 많은 노력을 기울였다는 것을 플러터를 사용한 실제 기업들이 증명합니다.
디자인에서 플러터의 고유한 장점은 위젯을 위한 렌더링 엔진에 있습니다. 다른 전통적인 프레임워크들과 달리 UI 컴포넌트들을 네이티브 코드로 렌더링 하지 않습니다. 오히려, 각 플랫폼에 맞게 UI 위젯을 렌더링 합니다. 이러한 특징은 플러터를 타 경쟁 프레임워크보다 신뢰성 및 빠른 속도를 제공합니다.
플러터의 UI 접근 방식의 장점은 단일 코드 베이스로 여러 플랫폼들, 다양한 스크린 사이즈들, 기기 종류들을 타게팅할 때 진가가 나타납니다. 아직까지는 이 부분에서 경쟁 플랫폼들은 비빌 수가 없는 장점입니다.
4. 미래를 준비하는 자세 (구글의 IoT 전략과 Fuchsia)
기업이 어떤 방향으로든 새로운 사업을 확장할때 플러터를 고려할 수 밖에 없습니다. 다양한 플랫폼 및 에코시스템에 대한 지원, 강력한 이식성, 효율성, 마지막으로 구글이라는 요소는 플러터를 더욱 매력적으로 만듭니다.
구글의 플러터에 대한 사랑은 Fuchsia 운영체제의 UI 개발을 플러터로 한점에서 돋보입니다. 구글 네스트 허브라는 IoT 사업의 한축에도 플러터가 적극 활용되고 있는셈입니다.
플러터를 많은 곳에서 사용하는 구글이 과연 플랫폼의 확장에 대한 지원을 그만둘까요? 플러터를 이용하는 많은 기업고객들을 한순간에 등을 지는 선택을 할까요? 구글은 구글 클라우드 및 광고 등으로 전세계의 기업들과 깊숙히 연결되어 있습니다. 만약, 제한된 플랫폼에 대한 지원만 제공할 것이었다면 렌더링 엔진을 별도로 개발하지도 않았을 것입니다.
플러터의 단점
1. 상대적으로 새롭고 아직은 성숙하지 않은 기술
가장 큰 단점은 바로 성숙하지 않은 기술이라는 점입니다. 모바일 개발 측면에서도 플러터의 역사는 길지 않습니다. 즉, 개발자들이 다른 프레임워크와 비교하였을때 상대적으로 많은 갯수의 프로덕트 레벨 어플리케이션을 만들지 않았음을 의미합니다. 다시말해 수많은 지원 라이브러리들과 도구들이 초기 개발 단계 수준에 머물러 있다는 의미입니다.
플러터는 놀라운 속도와 기술로 개발되고 있지만 다른 개발 프레임워크 수준의 개발자와 엔지니어 인력 풀이 만들어지기 까지는 적어도 1~2년정도는 걸릴 것으로 전망됩니다.
2. 복병인 Dart(다트) 개발 언어
플러터를 사용하려면 고려해야할 요소는 분명 Dart 언어입니다. 이 둘은 뗄 수 없는 관계입니다. 플러터는 다트(Dart, 이하 다트)언어로만 개발되기 때문입니다. 여러분은 플러터를 사용하면서 다트 언어의 장점을 훌륭히 계승하여 이용할 수 있습니다.
그렇지만 다트도 상대적으로 아직 성숙하지 않은 기술입니다. 현재까지 10년이 넘는 기간 동안 개발된 언어이지만 여전히 빠르게 진화하고 변화하고 있습니다. 플러터, 푸크시아(Fuchsia) 등의 구글의 요구사항을 충족하기 위해서 발전하는 중입니다. 안정성이 높다고 평가되지만 그렇다고 해서 기술의 핵심 상에 놓인 것은 아닙니다.
빠른 변화와 언어의 불안정성은 장기적인 측면에서 유지보수를 어렵게 합니다. 파이썬2에서 파이썬3로 전환하는 것에 대한 경험을 갖고 있다면 더욱 꺼려질만한 요소입니다.
3. 스타일 분리 이슈
플러터의 컴포넌트 렌더링은 큰 장점이자 단점이 입니다. 갑자기 장점이라고 말하다가 돌연 단점이라고 말하여 놀랄 수 도 있습니다. 그러나 좀더 깊숙히 들여다보면 다른 차원의 문제가 존재함을 알 수 있습니다.
프로덕트 레벨에서 디자인의 일관성이 중요하게 평가될 때가 있습니다. 트위터와 페이스북의 UI 가 기기 마다 조금 상이한 일관성을 가진다면 특히나 그것은 문제가 될 수 있습니다. 플러터는 안드로이드 앱에서 구글의 머티리얼 디자인을 구현하고 iOS 플랫폼에서는 쿠퍼티노 디자인을 구현합니다. 즉, 이들이 구동되는 플랫폼에 한하여서는 일관성을 제공합니다. 그러나, 비 플러터 앱들과 비교하였을때는 충분히 알아차릴만한 차이점을 줍니다. 즉, 이러한 차이점은 일관성이 높게 평가되는 경우에 한하여 심각한 문제를 야기할 수도 있다는 의미입니다.
예를들어 생각해볼까요? 여러분의 기업에서 모바일 플랫폼에 한하여 플러터로 전환할 것을 고려한다고 생각해 봅시다. 그리고 이미 기존에는 웹 환경에서 서비스를 제공하고 있는 상황입니다. 이러한 의사 결정에는 비용 지출 및 인력의 수급의 문제가 있을 것으로 유추됩니다. 그런데, 웹 상에서 제공되는 서비스와 모바일 서비스의 일관성을 해치는 결과를 낳게될 수도 있음을 의미합니다.
물론 이는 여러분이 어떻게 사용하느냐에 따라 강점이되고 약점이 될 수도 있습니다. 그러나 이러한 단점이 있다는 것을 알고 있어야 추후에 불상사를 막을 수 있습니다. 가령, 프로젝트를 엎는다던지요.
4. 시스템 종속적인 특징들의 반영에 걸리는 시간
시간! 시간! 얼마나 중요한 문제일까요? iOS 시버전이 공개되는 등 운영체제는 계속 변화하고 진화합니다. 그런데, 이러한 변화가 Flutter SDK 에 도달하는 시간은 지연될 수 밖에 없습니다. 애플과 구글은 서로 다른 회사이기 때문이죠! 예전 닷넷 프레임워크는 윈도우 운영체제가 변화를 거듭할 때마다 새로운 SDK 가 출시되었습니다.
즉, 운영체제의 새로운 기능을 즉시 적용하여 출시하는 앱은 없습니다. 하지만, 플러터 SDK 에 적용되는데 걸리는 추가 시간에 대해 분명 고려해야 합니다. 만약, 이러한 기능을 빨리 도입할 필요가 있는 앱들이라면 네이티브 개발을 고려해야 합니다. (물론, 플러터는 네이티브 개발도 지원하기에 걱정은 없습니다.)
마무리 및 플러터의 사용 시기에 대한 요약
지금까지 긴 글을 읽어주셔서 감사합니다. 오늘은 플러터란 무엇인지 그리고 장점과 단점이 무엇인지를 살펴보았습니다. 플러터는 빠른 출시, 강력한 커스터마이징과 브랜딩 등의 특징을 가졌습니다.
플러터 어플리케이션 개발을 고려한다면 아래의 항목들을 판단해보세요.
- 빠른 출시를 목표로 하는 앱
- 여러 플랫폼에 걸쳐 앱을 확장하는 니즈
- 강력한 커스터마이징 기능
- 미래에 유망한 새로운 기술에 대한 경험을 원하는 개발자 혹은 엔지니어
모든 선택은 항상 정답이 없습니다. 우리는 미래를 알 수 없습니다. 하지만, 플러터 3.0의 출시와 더불어 더욱 확장된 범용성은 우리의 심장을 두근거리게 하기에 충분합니다.
그럼에도 불구하고 플러터란 기술을 이용하여 앱을 구축하기 전에, 여러분의 앱의 특징, 기술 그리고 개발자들의 성향 등등 종합적인 측면의 장점과 단점을 고려하시길 바랍니다. 그리고 여러분 회사의 워크플로우에 기반하여 의사결정을 신중하게 내리길 바랍니다.
이상입니다.
K-IN 드림.
'프로그래밍' 카테고리의 다른 글
[vscode] Visual Studio Code 확장 프로그램 추천 - MySQL (대부분 DB 연결이 한번에 가능) 데이터 베이스 매니저 확장 프로그램! (0) | 2023.03.03 |
---|---|
Memory Footprint 란? (1) | 2023.03.01 |
플러터(Flutter) | 현업 개발자가 알려주는 효과적인 플러터(Flutter) 학습 방법 (1) | 2023.01.24 |
다트 (Dart) | Language | 널 세이프티(null safety)란? (3) | 2022.11.07 |
플러터(Flutter) | Tutorial 02 | 개발환경 구성하기 (MacOS) (1) | 2022.11.06 |