이전 글이 React는 왜 사용하는 것인지에 대한 글을 썼었다. 근데 갑자기 Flutter는 왜 사용하는지에 대한 글을 쓰는 것일까?
그 이유는 SW사관학교 정글의 마지막 과정인 나만의 무기를 갖기
프로젝트 때 주제 선정 전에 React로 프로젝트를 하려고 예상하고 공부를 시작했으나 팀에서 나온 주제가 앱과 적합하기 때문에 급하게 기술 스택을 변경하게 되었다.
이유 1: 하드웨어적인 접근이 필요
앱을 사용할 것이라면 React Native
로 하면 되지 않느냐? 라고 할 수 있지만 무선 통신 기술을 활용하여 명함을 전달하는 서비스를 만드려고 하는데 이를 위해 디바이스의 가속도계, 자이로스코프, 중력, 선형 가속, 회전 벡터, 보행 등에 관련한 하드웨어의 정보들을 이용
하여 서비스를 구현
을 해야되서 구글이 만들었기 때문에 Android OS와 API등을 사용하기 용이할 것이라 선택하게 되었다
이유 2: 짧은 프로젝트 기간을 고려한 러닝커브
프로젝트 기간이 총 5주 밖에 주어지지 않아서 네이티브 앱을 구현
하려면 상대적으로 러닝커브가 높다
고 한다.
네이버 지식IN팀에서 Flutter를 활용하여 엔터프라이즈급 서비스에 도입
했는데
생각보다 안정적이며 네이티브 앱보다
러닝 커브가 높지 않다고
한다.
혹시나 러닝커브가 높다고 해도 그동안 SW사관학교 정글
에서 파이썬, C언어에 대해서 하나도 몰랐는데
단기간에 말록, RB트리, 웹서버 등을 구현하면서 빠르게 습득했던 경험이 있었기에
Dart라는 새로운 언어를 까짓거 해보자는 자신감
이 있어서 선택하게 되었다.
이유 3: 디버깅과 크로스 플랫폼
실제로 서비스를 만드는 팀원들이 처음이다보니 코드를 작성하더라도 디버깅에 대한 어려움이 생긴다.
Javascript로 개발하게 된다면 웬만해서는 에러가 나지 않고 나더라도 런타임에 발견하는 경우가 많은데
Flutter는 컴파일 할 때부터 에러 여부를 판단
해서 알려주기 때문에 문법적인 오류로 인한 디버깅을 줄일 수 있다.
QA를 해야하는데 네이티브로 개발을 하려면 모든 사람이 필요한 플랫폼의 테스트폰이 없기 때문에
해당 디바이스를 가진 일부만 테스트가 가능하고 없는 사람들은 따로 테스트폰을 구해야한다.
크로스 플랫폼이기 때문
에 Flutter로 개발하면 안드로이드, iOS폰으로 디버깅이 가능
하다는 점이다.
구글에서 출시된 모바일/웹/데스크톱 크로스 플랫폼 GUI SDK이다.
하나의 코드 베이스로 안드로이드, 아이폰, 리눅스, 윈도우즈, 맥 및 웹 브라우저에서 모두 동작되는 앱을 위해 출시 최근에는 BMW, 도요타 등의 회사에서 차량용 인포테이먼트 시스템으로 도입하고 있어서
임베디드 디바이스에도 장착이 가능해졌다.
사용되는 언어는 구글에 의해 제창된 Dart를 사용한다.
구글에 의해 만들어졌고 그렇기 때문에 구글에서 만든 Dart
라는 새로운 언어를 배워야 한다.
프로젝트 기간이 총 5주 밖에 주어지지 않아서 부담되는 면도 없지 않아 있었지만
네이버 지식IN팀에서 Flutter를 활용하여 엔터프라이즈급 서비스에 도입했는데
네이티브 앱보다 러닝 커브가 높지 않다고 하고 혹시나 러닝커브가 높다고 해도
그동안 SW사관학교 정글에서 파이썬, C언어에 대해서 하나도 몰랐는데
단기간에 말록, RB트리, 웹서버 등을 구현하면서 빠르게 습득했던 경험이 새로운 언어 대한 장벽을 낮춰줬다.
2~3개월에 한번씩 변경이 되기때문에 변경사항들을 파악하는 것이 스트레스가 될 수 있겠지만
잦은 업데이트가 된다는 것은 최근에 Flutter의 성장세를 말해주듯이 좋은 프레임워크가 될 가능성이 높다는 것이고
새로운 프레임워크가 계속해서 나오고 변화하는 요즘 시대에 정글에서 배운 2~30년동안 잘 변하지 않는 지식인
CS 관련 지식을 바탕으로 새로운 것을 빠르게 익히는 과정도 좋은 챌린지가 될 것이라 생각했다.
그리고 구글링을 잘하다보면 웬만한 에러는 다 찾아서 개선할 수 있다는 자신감도 있다.
네이티브 만큼 성능이 높다고 하지 않다고 하지만 Flutter 3.0으로 오면서 많이 개선 되었고
네이버 지식IN이라는 큰 서비스에서 사용할정도라면 그렇게 체감할정도로 느리지는 않을 것이라고 생각 되었다.
Flutter는 단일코드로 네이티브 CPU 머신코드 ARM
또는 인텔 머신 코드
와 자바스크립트 코드
로 컴파일되고
UI를 렌더링 엔진 Skia
로 직접 렌더링하기 때문에 모든 장치에서 빠른 성능을 제공
할 수 있어서 성능이 뛰어나다.
상태 손실 없이 거의 즉시 변경사항
확인이 가능하여 업데이트 시에
Hot Reload
로 빠르게 빌드
가 된 상태 확인이 가능하다.
Flutter는 구글이 지원 및 사용하고 있으며, 전 세계 유명 브랜드(BMW, 도요타 등)들의 신뢰를 받고 있으며,
글로벌 개발자 커뮤니티가 유지하고 있다. 자동화된 테스트, 개발자 툴링 및 기타 프로덕션 품질의 앱을 구축하는 데
필요한 모든 것을 통해 코드베이스를 제어할 수 있다.
소프트웨어 디자이너의 선택에 따라 iOS 앱에서 구글의 Material 테마 디자인과 Ripple 애니메이션을 사용하는 것이 가능하고 반대로 안드로이드에서 애플의 Cupertino 테마를 적용하는 것도 가능해서
모든 픽셀을 제어하여 어떤 화면에서도 맞춤형 적응형 디자인을 만들 수 있다.