본문 바로가기
C.W.K.
Stream
Lesson 06 of 07 · published

바이너리 줄이기

~12 min · tauri, optimization, binary-size, release

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"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 파일이 크기까지 덤으로 잡아줘. 허락이 빡빡하면 바이너리도 빡빡해.

Code

릴리스 프로파일 다듬기·toml
# src-tauri/Cargo.toml — 릴리스 바이너리 짜내기.
[profile.release]
opt-level = "s"        # 크기 최적화 ("z"는 더 작음)
lto = true             # 크레이트 가로지르는 link-time 최적화
codegen-units = 1      # 컴파일 느림, 바이너리 작고 + 빠름
strip = true           # 디버그 심볼 제거
panic = "abort"        # 바이너리에 unwinding 기계 없음

External links

Exercise

지금 릴리스 번들 크기를 적어두고, 위 [profile.release] 설정을 넣어 다시 빌드해. 새 크기를 비교해봐. opt-level 's'랑 'z'를 둘 다 해보고 네 앱엔 뭐가 나은지 적어. 그다음 프론트엔드 번들을 열어서 뺄 수 있는 안 쓰는 의존성을 하나 찾아. 설계부터 이미 작은 바이너리에서, 재보고 하는 최적화를 연습하는 거야.
Hint
기준값을 잡으려면 먼저 릴리스로 빌드하고, 프로파일을 넣고, 다시 빌드해서 비교해. 'z'는 크기를 더 빡세게 줄이지만 실행이 느려질 수 있으니 둘 다 재봐. 프론트엔드는 번들러의 분석 결과가 뭐가 자리를 차지하는지 보여줘.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.