Rust Release Optimization: 작고 빠른 바이너리를 빌드하는 방법
Emily Parker
Product Engineer · Leapcell

Rust 프로젝트 작성을 완료하고 이제 컴파일 작업을 진행 중입니다. 컴파일된 파일을 가능한 한 작게 만들려면 어떻게 해야 할까요? 가능한 한 빨리 실행되도록 하려면 어떻게 해야 할까요? 아니면 작은 크기와 빠른 속도를 모두 달성하려면 어떻게 해야 할까요?
다음과 같은 고려 사항이 있을 수 있습니다.
- 파일 크기 최소화: 프로젝트가 작고 복잡하지 않으며 실행 속도가 이미 빠른 임베디드 개발에 적합합니다. 주요 목표는 파일 크기를 최대한 줄이는 것입니다.
- 실행 속도 최대화: 파일 크기는 중요하지 않지만 동시성 극대화가 최우선 과제인 네트워크 서비스에 적합합니다.
- 크기와 속도 간의 균형: 다양한 유형의 프로젝트에 적합한 중간 지점입니다.
Cargo.toml
파일에 다음 구성을 추가하고 실행하기만 하면 됩니다.
cargo b --release
구성 예시
더 작은 실행 파일 생성
[profile.release] opt-level = "z" # 가장 작은 코드 크기에 맞게 최적화 lto = true # 링크 타임 최적화 (LTO) 활성화 codegen-units = 1 # 코드 생성 단위 수를 줄여 최적화 시간을 늘리지만 바이너리 크기를 줄입니다. panic = "abort" # 패닉 처리 시 'unwind' 대신 'abort' 사용 strip = "debuginfo" # 디버그 정보 제거
더 빠른 실행 파일 생성
[profile.release] opt-level = 3 # 최대 실행 속도에 맞게 최적화 lto = "fat" # 가장 강력한 링크 타임 최적화 활성화 codegen-units = 1 # 코드 생성 단위 수를 줄여 최적화 시간을 늘리지만 성능을 향상시킵니다. panic = "abort" # 패닉 처리 시 'unwind' 대신 'abort' 사용
크기와 속도 간의 균형
[profile.release] opt-level = "s" # 속도를 고려하면서 크기에 맞게 최적화 lto = "fat" # 가장 강력한 링크 타임 최적화 활성화 codegen-units = 1 # 코드 생성 단위 수를 줄여 최적화 시간을 늘리지만 성능을 향상시킵니다. panic = "abort" # 패닉 처리 시 'unwind' 대신 'abort' 사용 strip = "symbols" # 필요한 디버깅 정보를 유지하면서 심볼 정보 제거
구성 설명
opt-level
설명: 컴파일러 최적화 수준을 지정합니다.
가능한 값:
0
: 최적화 없음, 가장 빠른 컴파일 시간.1
: 더 빠른 컴파일을 위해 최적화.2
: 컴파일 속도와 런타임 성능 간의 균형 (기본값).3
: 최대 런타임 성능을 위해 최적화."s"
: 더 작은 코드 크기에 맞게 최적화."z"
: 코드 크기를 위해 추가로 최적화,"s"
보다 더 적극적입니다.
이유: 가장 작은 실행 파일을 생성하려면 "z"
를 사용하고, 가장 빠른 실행 파일을 생성하려면 3
을 사용합니다.
lto
설명: 링크 타임 최적화 (LTO)를 활성화합니다.
가능한 값:
false
: LTO 비활성화 (기본값).true
: LTO 활성화."thin"
: Thin LTO 활성화."fat"
: 가장 강력한 LTO 활성화.
이유: LTO를 활성화하면 바이너리 크기가 줄어들고 런타임 성능이 향상됩니다. "thin"
은 적당한 선택이고, "fat"
은 최고의 최적화를 제공하지만 컴파일 시간이 늘어납니다.
codegen-units
설명: 코드 생성 단위 수를 제어합니다.
기본값: 일반적으로 16
입니다. 1
로 설정하면 최고 수준의 최적화가 가능합니다.
이유: 코드 생성 단위 수를 줄이면 컴파일러가 전역 최적화를 위한 더 많은 정보를 얻을 수 있으므로 더 작고 빠른 실행 파일이 생성됩니다. 1
로 설정하면 최적화가 극대화되지만 컴파일 시간이 늘어납니다.
panic
설명: 패닉 동작을 제어합니다.
가능한 값:
"unwind"
: 스택을 되감습니다 (기본값)."abort"
: 프로세스를 직접 중단합니다.
이유: "abort"
를 사용하면 스택 되감기 정보가 필요 없으므로 실행 파일 크기가 줄어들고 일부 경우 성능이 향상됩니다.
strip
설명: 제거할 디버그 및 심볼 정보를 제어합니다.
가능한 값:
"none"
: 모든 정보 유지 (기본값)."debuginfo"
: 디버그 정보 제거."symbols"
: 심볼 테이블을 제거하지만 필요한 디버깅 정보는 유지합니다."all"
: 디버그 및 심볼 데이터를 포함한 모든 선택적 정보 제거.
이유: 불필요한 디버그 및 심볼 정보를 제거하면 실행 파일 크기가 크게 줄어듭니다.
요약
Rust 프로젝트 컴파일을 위한 최적화 기술입니다. 이제 마스터하셨나요?
Rust 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불 - 요청이나 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 전혀 없으므로 구축에만 집중할 수 있습니다.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ