hyunsu blog

홈강좌Rust 실무 16편 중 4편째

Rust 크레이트 지도 — 분야별로 많이 쓰는 것과 고르는 법

목차 · 3
  1. 01분야별 지도
  2. 02직접 적은 것보다 많이 들어온다
  3. 03실습 — 크레이트를 고르는 기준

Rust 실무에서 자주 만나는 크레이트를 분야별로 정리한다. JSON 은 serde, 명령줄은 clap, 비동기는 tokio, 웹은 axum, 에러는 thiserror·anyhow 다. 직접 적은 4개가 실제로는 25개를 끌어온다는 것을 cargo tree 로 확인하고, 크레이트를 고르는 기준을 본다.

01 분야별 지도

표준 라이브러리는 일부러 작게 두었다. 그래서 JSON·명령줄 옵션·웹 서버 같은 것은 크레이트를 쓰는 것이 기본이다. 아래는 커뮤니티 추천 목록(blessed.rs)과 실무에서 가장 많이 겹치는 것들이다.

분야크레이트하는 일이 시리즈
직렬화serde + serde_json구조체 ↔ JSON(·TOML·YAML)5편
명령줄clap옵션·인자 읽기, --help 자동6편
비동기 런타임tokioasync 실행·네트워크·타이머입문 46편
웹 서버axum경로·핸들러·JSON 응답7편
에러thiserror · anyhow라이브러리용 에러 타입 · 앱용 에러 처리8편
로그tracing구조화된 로그·추적—
DBsqlx컴파일할 때 SQL 을 검사하는 비동기 DB—
HTTP 클라이언트reqwest다른 서버 부르기—
병렬 처리rayoniter() 를 par_iter() 로 바꿔 코어 여러 개 쓰기—

새 프로젝트라면 이 표의 크레이트부터 본다. 같은 일을 하는 크레이트가 여럿일 때, 이 크레이트들은 많은 사람이 오래 써서 문서와 예제가 많다.

02 직접 적은 것보다 많이 들어온다

크레이트 넷을 적은 프로젝트에서 cargo tree 를 돌렸다.

toml
[package]
name = "notes"
version = "0.1.0"
edition = "2024"

[dependencies]
anyhow = "=1.0.104"
clap = { version = "=4.6.7", features = ["derive"] }
serde = { version = "=1.0.229", features = ["derive"] }
serde_json = "=1.0.154"
bash
cargo tree --depth 1
text
    Updating crates.io index
     Locking 29 packages to latest Rust 1.95.0 compatible versions
notes v0.1.0 (~/projects/notes)
├── anyhow v1.0.104
├── clap v4.6.7
├── serde v1.0.229
└── serde_json v1.0.154

--depth 1 은 직접 적은 것만 보여 준다. 그 아래까지 모두 세면 이렇다.

bash
cargo tree --prefix none --no-dedupe | sort -u | wc -l
text
    Updating crates.io index
     Locking 29 packages to latest Rust 1.95.0 compatible versions
      26

26줄은 우리 프로젝트 하나와 크레이트 25개다. 넷을 적었는데 스물다섯이 들어왔다. clap 은 터미널 색(anstyle 등)을, serde 의 derive 기능은 코드를 만드는 크레이트(syn·quote·proc-macro2)를 끌어온다. 2편의 컴파일 시간과 실행 파일 크기는 이 숫자에 비례한다. 12편에서 볼 공급망 위험도 이 25개 모두에 걸린다.

03 실습 — 크레이트를 고르는 기준

crates.io 나 lib.rs 에서 크레이트를 볼 때 다섯 가지를 확인한다.

  1. 내려받기 수와 쓰는 크레이트 수 — 많을수록 많은 사람이 이미 밟아 본 길이다.
  2. 최근 갱신일 — 몇 년째 멈춰 있으면 새 Rust 판에서 문제가 생겨도 고쳐 줄 사람이 없다.
  3. 버전 — 1.0 이상이면 호환을 약속한다. 0.x 면 가운데 숫자가 바뀔 때 깨질 수 있다(2편).
  4. 딸려 오는 의존성 — cargo tree 로 본다. 작은 기능에 큰 크레이트를 들이지 않는다. 기능을 고르는 features 로 줄일 수 있는지 본다.
  5. 라이선스 — 대부분 MIT 나 Apache-2.0 이다. 회사 코드라면 쓸 수 있는 라이선스인지 확인한다.

자기 프로젝트에서 cargo tree --depth 1 과 전체 수를 세어 보자. 다음 편부터 표의 크레이트를 하나씩 쓴다. 첫 번째는 serde 다.