Choose a default theme

You can change your theme from the menu

Cargo

Earlier revision · 1View current content

Cargo는 Rust 프로젝트의 패키지 관리와 빌드 도구다. 프로젝트 생성, 의존성 해결, 컴파일, 실행과 테스트를 일관된 명령으로 제공한다. 실제 Rust 코드를 기계어로 바꾸는 컴파일러는 rustc이며 Cargo는 필요한 입력과 실행 순서를 관리한다.

매니페스트와 잠금 파일

Cargo.toml에는 패키지 이름·에디션과 허용할 의존성 범위를 적고, Cargo.lock에는 해결된 의존성의 정확한 정보를 기록한다. 범위와 선택 결과를 구분하므로 같은 소스에서 의존성 버전이 달라지는 원인을 추적하기 쉽다. 잠금 파일은 Cargo로 갱신하고, 검토 없이 손으로 버전만 고치는 방식은 피한다.

장점은 빌드와 테스트의 관례가 통일되어 새 프로젝트에서도 작업 흐름이 익숙하다는 것이다. 워크스페이스로 관련 패키지를 함께 관리할 수 있다. 한계는 컴파일 시간과 네이티브 의존성의 준비 비용이다. Rust 의존성이 고정돼도 운영체제 라이브러리·링커·툴체인이 달라지면 완전히 같은 산출물이 보장되는 것은 아니다.

대출 가능 여부를 검사하는 예제

Rust 툴체인과 Cargo가 설치된 환경에서 연습용 라이브러리를 만든다. 아래 생성 명령은 Git 저장소를 자동 생성하지 않도록 선택했다. 생성된 src/lib.rs를 뒤의 Rust 코드로 바꾼다.

cargo new loan_rules --lib --vcs none
cd loan_rules
pub fn can_borrow(active_loans: u32, limit: u32) -> bool {
active_loans < limit
}

#[cfg(test)]
mod tests {
use super::can_borrow;

#[test]
fn rejects_the_limit_and_above() {
assert!(can_borrow(2, 3));
assert!(!can_borrow(3, 3));
assert!(!can_borrow(4, 3));
}
}
cargo test
cargo build --release
cargo build --locked

테스트는 현재 대출 수가 한도보다 작을 때만 허용한다는 규칙을 확인한다. release 빌드는 최적화 프로필을 사용하며 산출물은 보통 target/release에 놓인다. --locked는 기존 잠금 파일 변경이 필요하면 실패하게 한다. 최초 잠금 파일 생성 전에 사용하는 것과 의존성을 확정한 CI에서 사용하는 것을 구분해야 한다.

실수하기 쉬운 구분

cargo check는 모든 실행 파일을 완성하는 빌드나 실제 테스트 실행과 목적이 다르다. 컴파일 성공은 업무 규칙의 정확성을 증명하지 않으며 예제처럼 경계값을 검사해야 한다. 또한 의존성의 build.rs와 절차적 매크로는 빌드 과정에서 코드를 실행할 수 있다. 패키지 수를 줄이고 출처·기능 플래그·잠금 파일 변경을 살피는 습관이 필요하다. 위 예제는 대출 규칙만 다루며 동시 예약이나 데이터 저장을 구현하지 않는다.

참고 자료