크레이트 는 Rust 의 컴파일 단위; 패키지 는 Cargo 가 관리하는 거야. 어휘를 똑바로 잡으면 의존성 시스템 전체가 click 해.
크레이트 vs 패키지
크레이트 는 단일 컴파일 단위 — 바이너리 (main 있음) 거나 라이브러리 (다른 크레이트가 쓰는 코드). 패키지 는 Cargo.toml 하나랑 그게 짓는 크레이트들: 패키지는 바이너리 크레이트 여럿이랑 라이브러리 크레이트 최대 하나를 담을 수 있어. cargo new 하면 크레이트 하나짜리 패키지를 얻어.
crates.io 의 의존성
Cargo.toml 의 [dependencies] 밑에 이름 붙여 의존성을 더해: serde = "1". Cargo 가 crates.io (공개 레지스트리) 에서 가져와 호환 버전을 풀고 use 가능하게 해. cargo add serde 가 편집을 대신 해줘. 생태계 전체 — 15만+ 크레이트 — 가 한 줄 거리야.
Cargo.toml 은 선언; Cargo.lock 은 핀.
Cargo.toml 은 받아들이는 버전을 진술 (serde = "1" 은 '아무 1.x'). Cargo.lock 은 실제로 쓴 정확한 버전을 기록해 빌드가 재현 가능하게. 바이너리는 Cargo.lock 을 커밋해 — '내 컴퓨터선 됨' 을 진짜 옮길 수 있게 하는 게 그거야.시맨틱 버저닝
크레이트 버전은 semver 를 따라: MAJOR.MINOR.PATCH. serde = "1" 은 아무 1.x (하위호환) 를 받지만 2.0 (깰 수 있음) 은 아니야. 그게 edition 이랑 semver 가 같이 중요한 이유야 — 버전 경계가 호환 약속을 인코딩하니, 생태계가 네 빌드를 조용히 안 깨고 진화할 수 있어.