Rust에서 크레이트(Crate)는 코드의 패키지 단위로, 라이브러리 또는 실행 파일을 의미해.
Rust의 컴파일러 rustc는 항상 크레이트 단위로 코드를 컴파일해.
크레이트는 크게 이진 크레이트(Binary Crate)와 라이브러리 크레이트(Library Crate) 두 가지로 나뉘어.
| 크레이트 종류 | 설명 | 예제 |
|---|---|---|
| 이진 크레이트(Binary Crate) | 실행 가능한 바이너리 파일(.exe 등)을 생성 | main.rs |
| 라이브러리 크레이트(Library Crate) | 다른 크레이트에서 가져다 쓸 수 있는 모듈 제공 | lib.rs |
fn main()이 필요함. fn main() 없이 lib.rs로 코드 작성. Cargo.toml을 통해 버전 및 의존성을 명확하게 관리. lib.rs 또는 main.rs로 직접 관리. Cargo.toml에서 crates.io의 크레이트를 추가해 활용. mod를 사용해 모듈을 구성할 수 있음. Rust 프로젝트는 Cargo(Rust의 패키지 매니저)를 사용해 크레이트를 관리해.
기본적인 크레이트 구조는 아래와 같아.
my_project/ # 프로젝트 루트
├── src/ # 소스 코드 폴더
│ ├── main.rs # 이진 크레이트 엔트리 포인트
│ ├── lib.rs # 라이브러리 크레이트(필요 시)
│ ├── module.rs # 추가 모듈
├── Cargo.toml # 크레이트 정보 및 의존성 관리
Cargo.toml → 크레이트 메타데이터(이름, 버전, 의존성) src/main.rs → 실행 가능한 바이너리 크레이트 src/lib.rs → 라이브러리 크레이트 Rust 크레이트는 Cargo를 통해 관리되며, 기본적인 동작 순서는 다음과 같아.
cargo new my_project
cd my_project
cargo new 명령어로 새로운 크레이트를 생성. src/main.rs가 포함됨 (이진 크레이트). Cargo.toml에서 크레이트 정보 및 의존성 설정[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = "1.0" # 외부 크레이트 추가
Cargo.toml에서 의존성을 추가하면 cargo build 시 자동으로 다운로드됨. cargo run
cargo run 명령어로 이진 크레이트 실행. cargo build
cargo build를 실행하면 target/debug/에 바이너리 파일이 생성됨. cargo build --release
target/release/ 폴더에 생성. cargo test
#[test] 어노테이션이 붙은 함수들을 실행하여 자동화된 테스트 수행. 크레이트는 역할에 따라 여러 가지 종류가 있어.
| 크레이트 유형 | 설명 | 예제 |
|---|---|---|
| 표준 라이브러리 크레이트(Standard Crate) | Rust 기본 제공 라이브러리 | std (std::fs, std::io) |
| 외부 라이브러리 크레이트(External Crate) | crates.io에서 제공하는 패키지 | serde, tokio, actix-web |
| 사용자 정의 크레이트(Custom Crate) | 직접 만든 크레이트 | 프로젝트 내부 lib.rs |
Cargo)가 편리하여 의존성을 쉽게 관리할 수 있음. edition, semver 등)에 따라 호환성 문제가 생길 수 있음. crates.io에 다양한 크레이트가 등록되고 있음. cargo와 rustup의 기능이 계속 개선되면서 더 빠른 빌드 속도 및 최적화가 이루어지고 있음. cargo build, cargo run, cargo test 등으로 크레이트 실행 및 테스트 가능 serde, tokio, actix-web 등)를 사용해 Rust 프로젝트 확장 가능