Flutter를 Rust로 재작성해 봤음 ㅋㅋ
I rewrote Flutter in Rust lol
핵심 요약
Flutter의 개발 경험을 Rust로 구현한 프레임워크 'Frust'를 개발하여 성능과 효율성을 입증함.
- Frust 개발 — Flutter의 개발 경험을 유지하면서 Rust의 성능을 활용하는 프레임워크를 구축함.
- 성능 비교 — Flutter 대비 앱 크기 감소, 빠른 콜드 스타트, 메모리 효율성 개선을 확인함.
- 기술적 한계 — 핫 리로드 부재와 초기 단계의 생태계 부족이 주요 단점으로 꼽힘.
- 실제 활용 — 개인 프로젝트뿐만 아니라 실제 클라이언트 앱 개발에도 Frust를 도입함.
안녕, 또 하루가 지나고 또 다른 Rust 리라이트(rewrite)가 돌아왔다.
누가 떠드는지 알아야 하니까 짧게 배경부터 깔고 갈게. 소프트웨어 개발한 지 10년 정도 됐어. 처음엔 네이티브 안드로이드 개발자로 시작해서, React Native로 강제 이주당했다가(그건 언급하지 말자), 2019년에 Flutter를 만난 뒤로 쭉 그것만 팠지. 지난 5년 동안 내가 손대는 건 뭐든 조금씩 Rust로 갈아엎었어. 백엔드 서비스, TUI, 잡다한 스크립트, 심지어 Leptos를 쓴 웹 앱까지 말이야. 마지막까지 남은 게 Flutter 앱들이었는데, 이게 슬슬 거슬리기 시작하더라고.
Fable 5가 나왔을 때, 그냥 Flutter 사양서를 던져주면서 "이거, 근데 Rust로"라고 시켜봤어. 12시간 동안 쌩으로 돌리더라. 자고 일어나니 화면에 버튼 몇 개랑 텍스트 입력창이 떠 있길래, 이 새끼가 꼼수 썼구나 싶었지. 그냥 Rust 스티커만 붙인 네이티브 컴포넌트인 줄 알았거든. 근데 아니었어. wgpu로 렌더링하는 진짜 Rust 위젯이더라고. 5분 정도 감탄하다가 코드를 읽어봤는데, 12시간 동안 AI가 싼 똥 그 자체였어.
그래서 지난 4개월 동안은 그 지저분한 걸 다 뜯어내고, 다시 만들고, 개발 경험을 Flutter 수준으로 끌어올리는 데 시간을 쏟았어. GPU 렌더링에 대해 계획에도 없던 공부를 엄청나게 했고, 그 내용을 리포지토리에 실습 커리큘럼으로 다 정리해 뒀어. 내 생각엔 AI가 쓴 걸 제대로 읽기만 한다면, AI는 학습을 가속하는 훌륭한 도구야. 그냥 복붙만 하면 나처럼 첫날에 똥 코드나 얻게 되는 거고.
그 결과물이 바로 Frust야. 그래, 이름이 딱 네가 생각하는 그 뜻 맞아.
Flutter 좀 써봤으면 익숙할 거야. Scaffold, app bar, FAB, Material 3, Cupertino, 자기 상태를 관리하는 Component, 그리고 뷰 트리를 반환하는 build 메서드까지. 내부적으로는 VM도 없고 GC도 없는 네이티브 바이너리 하나로 돌아가. wgpu 기반의 자체 GPU 렌더러를 쓰고, 안드로이드, iOS, macOS, 윈도우, 리눅스, 웹에서 다 돌아가지. 플러그인은 FFI로 OS랑 바로 대화하니까 MethodChannel로 핑퐁 칠 일도 없어.
"Rust니까 빠르다"는 건 벤치마크가 아니니까, 똑같은 앱을 둘 다 만들어서 Pixel 5, OnePlus 9, Xiaomi 12, iPhone SE에서 돌려봤어:
-
카운터 템플릿, 릴리스 빌드: 안드로이드 기준 6.5 MiB vs 14.8 MiB
-
안드로이드 콜드 스타트: 107–159 ms vs 379–638 ms
-
유휴 메모리: 20–36% 감소
-
플러그인 호출: 대략 3배 빠름
너무 기대하기 전에 말해두는데, 프레임 타임은 좀 들쭉날쭉해. 긴 리스트 스크롤은 모든 안드로이드 폰에서 Frust가 압살하는데, 앱이 백그라운드에서 빡센 작업을 할 때는 Flutter가 애니메이션을 더 부드럽게 유지하더라고. iPhone SE에서는 프레임당 CPU 작업량이 더 적고. Flutter는 렌더러 튜닝에 쏟은 세월이 얼만데, 내 건 고작 몇 달 동안 커피 마시면서 만든 거잖아. 내가 진 수치를 포함한 모든 데이터는 RESULTS.md에 다 있어.
아쉬운 점들:
-
핫 리로드. 없어. 수정하면 다시 빌드하고 실행해야 해. 매일 그리워하는 중이야.
-
안정성. 알파 버전이라 API가 발밑에서 계속 바뀔 거야.
-
pub.dev. 플러그인이 한 12개 정도 있어. 12개. 1만 2천 개가 아니라 딱 12개.
첫 번째 실사용 앱은 Muxr인데, 원격 zellij랑 herdr 터미널 세션을 위한 모바일 클라이언트야. 에는 올라갔고(애플은 아직 심사 중이야). 다음은 피트니스 앱, 사내 데스크톱 앱, 그리고 마지막으로 1년 넘게 방치해 둔 을 리라이트할 예정이야.

