Flutter
Build beautiful, natively compiled applications from a single codebase.
— 구글 플러터 팀이 전 세계 풀스택 프론트엔드 및 모바일 개발진에게 들이미는 강력한 자부심 한 줄
리액트 네이티브처럼 가상 브릿지를 거치는 꼼수를 부리지 않고, 화면 전체를 2D 게임 엔진처럼 자체 픽셀 단위로 직접 렌더링해 버리는 모바일 업계의 무자비한 폭주 전차. 사실상 구글이 야심 차게 만들었다가 아무도 안 써서 고사하기 직전이었던 비운의 비주류 프로그래밍 언어 Dart를 먹여 살리기 위해 개발한 최고의 심폐소생술 기구(...)
1. 개요
구글에서 개발하고 배포하는 오픈소스 크로스플랫폼 모바일 어플리케이션 개발 프레임워크. 하나의 소스코드 작성만으로 안드로이드와 iOS는 물론 웹, Windows, macOS, Linux 데스크톱 앱까지 완벽히 네이티브 기계어로 빌드해 낼 수 있다. 플랫폼의 순수 UI 컴포넌트를 빌려 쓰지 않고 자사 내장 그래픽 엔진(Impeller/Skia)으로 화면의 모든 픽셀을 직접 정밀하게 그리는 독창적인 아키텍처를 채택하여, 크로스플랫폼임에도 불구하고 60FPS의 쫀쫀하고 유려한 속도감과 완벽한 일관성을 뽐내며 모바일 시장의 절대 주류로 등극했다.
2. 모든 것은 위젯이다 (Everything is a Widget)
Flutter의 아키텍처 세계관에서 눈에 보이는 버튼, 텍스트부터 시작해 눈에 보이지 않는 패딩, 레이아웃 정렬, 테마, 심지어 애니메이션과 비동기 스트림 감지기까지 모든 기술적 단위가 위젯(Widget)으로 정의된다. 이 위젯들을 레고 블록 조립하듯이 부모-자식 트리 구조로 무한히 깊게 꼬리를 물며 중첩하여 거대한 앱 화면을 완성한다. 처음 보면 괄호가 백만 개 겹쳐 있는 코드 가독성에 눈이 아득해지지만, 한 번 적응되면 플랫폼 OS의 컴포넌트 눈치를 볼 필요 없이 전 세계 모든 운영체제에서 단 1픽셀의 오차도 없이 동일하게 표시되는 기가 막힌 화면 일관성에 감탄하게 된다.(...)
3. 핫 리로드(Hot Reload)의 황홀경
과거 안드로이드나 iOS 네이티브 앱 코딩을 할 때 개발자들을 괴롭혔던 최대 단점은 빌드 대기 시간이었다. 버튼 색깔이나 여백 10픽셀을 고치기 위해 컴파일을 누르고 커피 한 잔을 마시며 수 분 동안 목을 빼고 빌드가 끝나길 대기해야 했기 때문이다. 하지만 Flutter는 개발 컴퓨터의 에디터에서 코드를 수정하고 저장(Save) 버튼을 누르는 순간, 단 0.5초 만에 앱의 상태를 그대로 유지한 채 바뀐 레이아웃만 실시간으로 갈아 끼워주는 핫 리로드(Hot Reload) 기술을 채용했다. 이 황홀한 극강의 피드백 루프는 모바일 개발 생태계의 생산성을 우주적 차원으로 비약시켰다.
4. 관련 밈 및 드립
4.1. Dart 언어의 심폐소생 인공호흡기
구글이 자바스크립트를 죽이겠다며 호기롭게 고안했던 프로그래밍 언어인 Dart는 오랫동안 '구글의 수많은 실패 유작 중 하나'로 꼽히며 철저하게 외면당하는 비운의 언어였다. 하지만 구글이 플러터 프레임워크의 유일한 전용 언어로 다트를 강제 수용하면서 전 세계 수백만 개발자가 억지로 다트 문법을 강제로 열공하게 만들었다. 모바일 커뮤니티에서는 '플러터는 구글이 다트 언어를 살려내기 위해 수천억을 들여 억지로 개발한 인공호흡기이자, 결국 다트를 심폐소생 시키는 데 성공한 눈물겨운 효자 도구'라는 역사적 풍자 드립이 유행한다.
5. 여담
- Impeller 엔진으로의 세대교체: 오랫동안 렌더링을 책임지던 Skia 엔진이 iOS 환경에서 최초 셰이더 컴파일 시 화면이 뚝뚝 끊기는 'iOS Skia Jitter' 현상으로 악평을 받자, 구글은 Metal/Vulkan 그래픽 API를 다이렉트로 정밀 제어하는 차세대 내장 그래픽 엔진인 Impeller(임펠러)를 3.10 버전부터 전격 도입하여 끊김 현상을 완전히 멸균했다.
- 상태 관리 춘추전국시대: 플러터의 상태 관리(State Management) 생태계는 역사와 전통의
Provider, 대형 이벤트 중심의 무거운Bloc, 그리고 최근 모던 생태계의 구세주이자 다크호스로 꼽히는Riverpod등이 끊임없이 삼국지처럼 이권 경쟁을 벌이고 있어, 주니어들은 어떤 마크업 패키지를 선택해 공부해야 할지 매일 새벽 눈물겨운 서칭을 갈기고 있다. - 2D 게임도 가볍게 구동: 화면 전체를 자체 2D 그래픽 캔버스에 직접 기계어로 드로잉하는 특성 덕분에, 플러터 위에 가벼운 2D 게임 엔진 프레임워크인 Flame 패키지를 얹기만 하면 60FPS 이상의 미끄러지듯 부드러운 하드웨어 2D 모바일 캐주얼 게임을 단숨에 찍어낼 수 있는 사기적인 기술적 외도를 보여주기도 한다.