C.W.K.
Stream
Lesson 02 of 06 · published

크레이트, 패키지 & 의존성

~11 min · tooling, crates, cargo, dependencies

Level 0Rust 호기심러
0 XP0/80 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete

크레이트 는 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 가 같이 중요한 이유야 — 버전 경계가 호환 약속을 인코딩하니, 생태계가 네 빌드를 조용히 안 깨고 진화할 수 있어.

Code

Cargo.toml 에서 의존성 선언·toml
# Cargo.toml
[package]
name = "my-app"
version = "0.1.0"
edition = "2024"

[dependencies]
serde = { version = "1", features = ["derive"] } # 라이브러리 크레이트
rand = "0.8"

# 손으로 편집 대신 CLI 로 추가:
#   cargo add serde --features derive
#   cargo build   # deps 가져오고 Cargo.lock 작성

External links

Exercise

바이너리 패키지를 만들고, cargo add randrand 크레이트를 더하고, 그걸로 난수를 출력해. 생성된 Cargo.lock 을 보고 핀된 정확한 버전을 찾아. 그 lockfile 커밋이 왜 팀원한테 빌드를 재현 가능하게 만들어?
Hint
Cargo.tomlrand = "0.8" (아무 0.8.x) 라 할 수 있지만, Cargo.lock 은 정확한 패치 버전을 핀해. 락 커밋은 팀원이 네가 테스트한 동일 버전으로 빌드한다는 뜻 — 의존성 drift 에서 '내 컴퓨터선 됨' 을 없애.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.