"Tauri는 Chromium을 안 싣는 것만으로 크기 싸움을 이미 이겨놨어. 남은 건 원래도 작은 바이너리를 미세하게 다듬는 일이야."
제일 큰 승리는 이미 공짜로 챙겼어
균형 감각을 잃지 마. Tauri 앱이 수백 MB가 아니라 메가 단위인 건 브라우저 엔진을 안 싣기 때문이야. 그 구조적 결정 하나가 95%를 가져갔고, 넌 Tauri를 고른 것만으로 그걸 공짜로 받았어. 아래 나오는 건 전부 이미 작은 바이너리에서 마지막 한 톨까지 짜내는 얘기야 — 잘 다듬은 릴리스라면 해볼 값이 있지만, 이게 본편이라고 착각하진 마.
Cargo 릴리스 프로파일
남은 것 중 제일 큰 지렛대가 Cargo.toml의 Rust [profile.release]야. 링크 시점 최적화 켜기(lto = true), 코드 생성 단위를 하나로 줄이기(컴파일은 느려지고 결과물은 작고 빨라져), 심볼 걷어내기(strip = true), 크기 위주로 최적화하기(opt-level = "s"나 "z"), panic 때 바로 종료하기(panic = "abort"). 이걸 다 걸면 바이너리가 눈에 띄게 줄어. 컴파일 시간을 내주고 더 날렵한 릴리스를 받는 거지 — 릴리스는 자주 빌드하는 게 아니니까 괜찮은 거래야.
프론트엔드도 잊지 마
같이 실은 웹 에셋도 앱 크기에 들어가. 평소 웹 작업에서 쓰던 규율이 그대로 통해. Vite가 안 쓰는 코드를 털어내고 쪼개게 두고, 안 쓰는 의존성을 빼고, 이미지를 압축하고, 앱이 실제로 쓰는 것만 실어. 그리고 기본은 거부라는 습관을 계속 지켜 — 끌어오는 플러그인이랑 기능 하나하나가 바이너리에 얹히니까, 보안 때문에 짧게 유지한 capabilities 파일이 크기까지 덤으로 잡아줘. 허락이 빡빡하면 바이너리도 빡빡해.