[Rust 공식문서 한국어 정리] 55. Rust 의존성 관리 가이드
[Rust 공식문서 한국어 정리] 55. Rust 의존성 관리 가이드
원문 제목: Specifying Dependencies — Cargo Reference
작성자: Rust Cargo Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 Cargo의 의존성 지정 방식과 버전 해석 메커니즘을 상세히 설명합니다.
Cargo.toml에서의 의존성 선언, SemVer 범위, 그리고 경로/깃/레지스트리 기반 의존성을 다룹니다.
의존성 트리 충돌(diamond dependency) 해결, Lock 파일의 역할, 그리고 보안 취약점 관리도 중심으로 설명합니다.
라이브러리와 애플리케이션이 각각 의존성을 어떻게 다뤄야 하는지, 그 차이와 모범 사례를 제시합니다.
Rust 프로젝트의 의존성을 건강하게 유지하려는 모든 개발자와 팀에게 필수적인 가이드입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① SemVer Range: ^1.2.3, >=1.0, <2.0 등 버전 호환 범위를 지정하는 방식입니다.
② Cargo.lock: 현재 의존성 트리의 정확한 버전을 고정하여 재현 가능한 빌드를 보장합니다.
③ Diamond Dependency: 여러 크레이트가 공통 의존성의 다른 버전을 요구할 때 발생하는 충돌입니다.
④ cargo-deny: 라이선스, 보안 취약점, 불필요한 의존성을 검사하는 도구입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cargo.toml의 [dependencies] 섹션은 크레이트 이름과 버전 요구사항을 지정합니다.
"1.2.3"은 기본적으로 ^1.2.3을 의미하며, 1.2.3 이상 2.0.0 미만의 버전을 허용합니다.
"=1.2.3"은 정확한 버전만, ">=1.0.0, <1.5.0"은 범위를 명시적으로 지정합니다.
라이브러리와 바이너리는 Cargo.lock을 다루는 방식이 다릅니다.
바이너리(애플리케이션)는 Cargo.lock을 버전 관리에 포함하여 재현 가능한 빌드를 보장합니다.
라이브러리는 Cargo.lock을 무시하며, Cargo.toml의 버전 범위만을 기준으로 의존성을 해석합니다.
의존성 충돌은 Cargo가 자동으로 해결합니다.
두 크레이트가 동일한 의존성의 서로 다른 버전을 요구하면, Cargo는 가능한 한 하나의 버전을 선택합니다.
SemVer 범위가 겹치지 않으면, Cargo는 여러 버전을 동시에 포함할 수 있습니다.
보안 관리는 cargo-audit와 cargo-deny로 수행합니다.
cargo audit는 RustSec 데이터베이스를 조회하여 알려진 취약점이 있는 의존성을 보고합니다.
cargo deny는 라이선스, 보안, 불필요한 crate 중복까지 검사하여 CI에서 강제할 수 있습니다.
workspace에서는 workspace.dependencies로 공통 의존성을 중앙 관리합니다.
이를 통해 여러 멤버 크레이트가 동일한 버전을 공유하고, 업데이트 시 한 곳만 수정하면 됩니다.
path 의존성은 로컬 크레이트를 참조하며, 워크스페이스 내 개발 시 필수적으로 사용됩니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
라이브러리의 Cargo.toml에서는 유연한 SemVer 범위를 사용하고, 애플리케이션은 Cargo.lock을 커밋합니다.
cargo-deny로 CI에서 라이선스와 보안 취약점을 사전에 차단합니다.
workspace.dependencies로 팀 내 의존성 버전을 통일하여 버그와 충돌을 줄입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cargo의 의존성 관리는 SemVer, Cargo.lock, workspace의 조합으로 이루어집니다.
보안과 라이선스는 cargo-audit와 cargo-deny로 자동화하여 지속적으로 감시해야 합니다.
재현 가능한 빌드와 유연한 버전 관리의 균형을 맞추는 것이 핵심입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
cargo-deny: https://github.com/EmbarkStudios/cargo-deny
#Rust #Dependencies #Cargo #SemVer #Security #DependencyManagement #번역

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