릴리스 프로파일로 빌드 커스터마이즈하기
릴리스 프로파일로 빌드 커스터마이즈하기 (Release Profiles)
러스트에서 **릴리스 프로파일(release profiles)**은 서로 다른 구성을 가진 미리 정의되고 커스터마이즈 가능한 프로파일이에요. 프로그래머가 코드 컴파일 옵션을 더 세밀하게 제어할 수 있게 해주죠. 각 프로파일은 다른 프로파일과 독립적으로 구성돼요.
Cargo에는 두 개의 주요 프로파일이 있어요. cargo build를 실행할 때 쓰는 dev 프로파일과, cargo build --release를 실행할 때 쓰는 release 프로파일이죠. dev 프로파일은 개발에 좋은 기본값으로 정의되어 있고, release 프로파일은 릴리스 빌드에 좋은 기본값을 가져요.
이 프로파일 이름들은 빌드 출력에서 익숙할 거예요:
$ cargo build
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
$ cargo build --release
Finished `release` profile [optimized] target(s) in 0.32s
dev와 release가 컴파일러가 사용하는 서로 다른 프로파일이에요.
Cargo는 프로젝트의 Cargo.toml 파일에 [profile.*] 섹션을 명시적으로 추가하지 않았을 때 적용되는 각 프로파일의 기본 설정을 가지고 있어요. 커스터마이즈하려는 프로파일에 [profile.*] 섹션을 추가하면 기본 설정의 일부를 재정의할 수 있어요. 예를 들어 dev와 release 프로파일의 opt-level 설정 기본값은 이렇습니다:
Filename: Cargo.toml
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
opt-level 설정은 러스트가 코드에 적용할 최적화 횟수를 제어하며 범위는 0에서 3까지예요. 최적화를 더 많이 적용하면 컴파일 시간이 길어져요. 그래서 개발 중에 코드를 자주 컴파일한다면 결과 코드가 느리게 실행되더라도 더 빠르게 컴파일되도록 최적화를 적게 하고 싶을 거예요. 그래서 dev의 기본 opt-level은 0이에요. 코드를 릴리스할 준비가 되면 컴파일에 더 많은 시간을 쓰는 게 좋아요. 릴리스 모드로는 한 번만 컴파일하지만 컴파일된 프로그램은 여러 번 실행하니까요. 릴리스 모드는 더 긴 컴파일 시간을 대가로 더 빠르게 실행되는 코드를 얻는 거예요. 그래서 release 프로파일의 기본 opt-level이 3인 거죠.
Cargo.toml에 다른 값을 추가하면 기본 설정을 재정의할 수 있어요. 예를 들어 개발 프로파일에서 최적화 레벨 1을 사용하고 싶다면, 프로젝트의 Cargo.toml 파일에 이 두 줄을 추가하면 돼요:
Filename: Cargo.toml
[profile.dev]
opt-level = 1
이 코드는 기본 설정인 0을 재정의해요. 이제 cargo build를 실행하면 Cargo가 dev 프로파일의 기본값에 우리가 한 opt-level 커스터마이즈를 더해 사용해요. opt-level을 1로 설정했으므로 Cargo는 기본값보다 더 많은 최적화를 적용하지만, 릴리스 빌드만큼은 많이 적용하지 않아요.
각 프로파일에 대한 구성 옵션과 기본값의 전체 목록은 Cargo 문서를 참고하세요.
출처: The Rust Book