Rust는 패키지 매니저인 Cargo와 패키지 레지스트리인 Crates.io를 통해 패키지 관리와 빌드를 쉽게 할 수 있습니다. Cargo는 프로젝트 생성, 빌드, 테스트, 의존성 관리 등을 담당하며, Crates.io는 Rust 패키지(크레이트)를 호스팅하고 공유하는 플랫폼입니다.
Cargo를 사용하여 새로운 프로젝트를 생성할 수 있습니다.
cargo new my_project
cd my_project
위 명령어는 my_project라는 새로운 디렉토리를 생성하고, 기본적인 프로젝트 구조를 만듭니다.
프로젝트를 생성하면 다음과 같은 기본 구조가 생성됩니다.
my_project
├── Cargo.toml
└── src
└── main.rs
Cargo.toml: 프로젝트의 메타데이터와 의존성을 정의하는 파일입니다.src/main.rs: 프로젝트의 메인 소스 파일입니다.프로젝트를 빌드하고 실행하려면 다음 명령어를 사용합니다.
cargo build
cargo run
cargo build: 프로젝트를 빌드합니다.cargo run: 프로젝트를 빌드하고 실행합니다.Cargo.toml 파일에 의존성을 추가하여 외부 크레이트를 사용할 수 있습니다. 예를 들어, rand 크레이트를 추가하려면 Cargo.toml 파일에 다음을 추가합니다.
[dependencies]
rand = "0.8"
그런 다음 cargo build 명령어를 실행하여 의존성을 다운로드하고 프로젝트를 빌드합니다.
rand 크레이트를 사용하여 난수를 생성하는 예제입니다.
// src/main.rs
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let n: u32 = rng.gen_range(1..101);
println!("Generated random number: {}", n);
}
위 예제에서 rand::Rng 트레이트를 사용하여 난수를 생성합니다. rand::thread_rng 함수는 쓰레드에 안전한 난수 생성기를 반환하며, gen_range 메서드는 지정된 범위 내에서 난수를 생성합니다.
Crates.io는 Rust 패키지 레지스트리로, 공개된 크레이트를 검색하고 다운로드할 수 있습니다.
Crates.io 웹사이트(https://crates.io/)에서 원하는 크레이트를 검색할 수 있습니다. 예를 들어, serde 크레이트를 검색하여 JSON 직렬화 및 역직렬화를 수행할 수 있습니다.
검색한 크레이트를 Cargo.toml 파일에 추가하여 사용할 수 있습니다. 예를 들어, serde 크레이트를 추가하려면 Cargo.toml 파일에 다음을 추가합니다.
[dependencies]
serde = "1.0"
serde_json = "1.0"
그런 다음 cargo build 명령어를 실행하여 의존성을 다운로드하고 프로젝트를 빌드합니다.
serde와 serde_json 크레이트를 사용하여 JSON 데이터를 직렬화하고 역직렬화하는 예제입니다.
// src/main.rs
use serde::{Serialize, Deserialize};
use serde_json;
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
}
fn main() {
let person = Person {
name: String::from("Alice"),
age: 30,
};
// 직렬화
let json = serde_json::to_string(&person).unwrap();
println!("Serialized: {}", json);
// 역직렬화
let deserialized: Person = serde_json::from_str(&json).unwrap();
println!("Deserialized: {} is {} years old", deserialized.name, deserialized.age);
}
위 예제에서 Person 구조체를 정의하고, Serialize와 Deserialize 트레이트를 구현합니다. serde_json::to_string 함수는 구조체를 JSON 문자열로 직렬화하고, serde_json::from_str 함수는 JSON 문자열을 구조체로 역직렬화합니다.
릴리즈 프로필
dev와 release 프로필 설정하기
최적화 레벨 조정하기 (예: opt-level = 3)
디버그 심볼 추가/제거하기
예제: Cargo.toml에서 프로필 설정
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
문서화
/// 두 수를 더하는 함수
///
/// # Examples
/// ```
/// let sum = add(2, 3);
/// assert_eq!(sum, 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
a + b
}워크스페이스
workspace/
├── Cargo.toml
├── package1/
└── package2/cargo install
cargo install cargo-edit사용자 정의 명령어
[alias]
b = "build"
t = "test"
r = "run"참조: https://doc.rust-lang.org/book/ch14-00-more-about-cargo.html