[Rust 공식문서 한국어 정리] 89. Rust Release 빌드 최적화 가이드
[Rust 공식문서 한국어 정리] 89. Rust Release 빌드 최적화 가이드
원문 제목: The release Profile
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
release 프로파일의 각 설정이 성능과 바이너리 크기에 미치는 영향을 분석합니다.
실제 배포 환경에서 적용하는 최적화 기법들을 상세히 다룹니다.
링크 타임 최적화(LTO)와 병렬 컴파일의 균형을 맞추는 방법을 학습합니다.
바이너리 크기 최적화와 실행 속도 최적화 중 적절한 선택을 정리합니다.
릴리스 빌드의 디버깅과 프로파일링 전략도 함께 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① opt-level = 3 — 최고 수준의 코드 최적화
② LTO — 링크 타임 최적화로 전체 프로그램 분석
③ codegen-units — 병렬 컴파일과 최적화의 트레이드오프
④ panic = "abort" — 스택 언와인딩 제거로 크기 감소
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
release 프로파일은 cargo build --release 명령으로 활성화됩니다.
기본 opt-level은 3으로 LLVM의 공격적인 최적화를 모두 적용합니다.
루프 언롤링, 인라이닝, 데드 코드 제거 등이 적극적으로 수행됩니다.
최적화로 인해 디버깅 정보와 실제 코드의 대응 관계가 약해질 수 있습니다.
lto = true는 크레이트 간 경계를 넘어 전체 프로그램을 하나로 최적화합니다.
LTO를 활성화하면 바이너리 크기가 줄고 런타임 성능이 향상되나 컴파일 시간이 급격히 증가합니다.
lto = "thin"은 LTO의 성능을 어느 정도 유지하면서 컴파일 시간을 단축합니다.
codegen-units = 1은 병렬 컴파일을 비활성화하고 단일 codegen unit으로 전체 최적화를 극대화합니다.
panic = "abort"는 패닉 발생 시 프로세스를 즉시 종료하고 스택 언와인딩 코드를 제거합니다.
abort 모드는 바이너리 크기를 줄이고 실행 속도를 높이지만 catch_unwind가 불가능합니다.
strip = "debuginfo" 또는 "symbols"로 불필요한 심볼을 제거하여 크기를 줄입니다.
opt-level = "s"는 코드 크기를 최소화하도록 최적화하고 "z"는 더욱 공격적으로 크기를 줄입니다.
"s"와 "z"는 실행 속도를 희생하므로 임베디드 환경에서 주로 사용합니다.
overflow-checks = false는 산술 연산의 오버플로우 검사를 제거하여 약간의 성능 향상을 얻습니다.
debug = false는 디버깅 정보를 제거하여 바이너리 크기를 줄입니다.
rpath 설정으로 런타임에 공유 라이브러리 검색 경로를 지정할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
웹 서비스 배포 시 기본 release 프로파일로 충분한 경우가 많습니다.
임베디드에서는 opt-level = "z"와 panic = "abort"로 플래시 크기를 최소화합니다.
성능이 중요한 알고리즘에는 lto = "fat"과 codegen-units = 1을 검토합니다.
배포 후 프로파일링으로 병목을 확인하고 최적화 방향을 조정합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
release 프로파일은 배포용 바이너리의 성능과 크기를 결정합니다.
각 설정의 트레이드오프를 이해하고 목적에 맞게 조정해야 합니다.
무조건적인 최적화보다 측정 기반의 접근이 효과적입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/cargo/reference/profiles.html#release
Cargo Profiles: https://doc.rust-lang.org/cargo/reference/profiles.html
#Rust #Release #최적화 #LTO #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30