Rust는 안전성과 성능을 강조하는 시스템 프로그래밍 언어예요. 이 글에서는 제가 실무에서 사용하는 최소한의 흐름으로, 설치 → 프로젝트 생성 → 실행 → 테스트 → 빌드까지 빠르게 통과해봅니다. 처음 시작하는 분들이 "바로 써본다"에 집중할 수 있도록 가볍게 구성했습니다.
1) Rust 설치
- 공식 설치 도구 rustup 사용 (모든 플랫폼)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 설치 확인
rustc --version
cargo --version
2) 새 프로젝트 만들기
Rust는 cargo
라는 빌드 도구와 패키지 매니저를 씁니다. 바이너리 앱을 만든다면 기본 템플릿이 편해요.
- 애플리케이션(일반 CLI/서비스)
cargo new hello_rust
cd hello_rust
생성된 기본 구조:
hello_rust/
├─ Cargo.toml
└─ src/
└─ main.rs
3) 첫 코드 작성
src/main.rs
파일을 열어 간단한 출력부터 시작해봅니다.
fn main() {
println!("Hello, Rust!");
}
실행:
cargo run
조금만 구조를 잡고 싶다면 모듈로 감싸 재사용/테스트를 쉽게 만듭니다.
mod hello_rust {
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
}
fn main() {
println!("{}", hello_rust::greet("Rust"));
}
4) 의존성 관리(필요해질 때)
Cargo.toml
에 라이브러리를 추가했다면 아래로 설치합니다.
cargo build
처음 "hello world" 수준에선 필요 없지만, HTTP 클라이언트나 웹 프레임워크를 넣을 때 필수입니다.
5) 코드 포맷
Rust는 기본 포매터를 제공합니다. 프로젝트 루트에서 실행하면 전체 소스를 정리합니다.
cargo fmt
6) 간단한 테스트
제가 선호하는 방식은 간단한 함수에 대해 동작을 고정하는 것입니다.
테스트 추가 (src/main.rs에):
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_greet_default() {
assert_eq!(hello_rust::greet("Rust"), "Hello, Rust!");
}
#[test]
fn test_greet_custom() {
assert_eq!(hello_rust::greet("World"), "Hello, World!");
}
}
테스트 실행:
cargo test
# 자세히 보고 싶다면
cargo test -- --nocapture
7) 바이너리 빌드
처음엔 cargo build
를 직접 쓰는 게 이해가 빠릅니다.
- 디버그 빌드:
cargo build
- 릴리즈 빌드:
cargo build --release
실행:
./target/debug/hello_rust # 디버그
./target/release/hello_rust # 릴리즈
8) 의존성 그래프 보기(디버깅에 유용)
cargo tree
9) 선택: Lint(Clippy)
Rust의 공식 linter입니다.
- 실행/자동수정
cargo clippy
cargo clippy --fix
전체 흐름 한눈에 보기
flowchart LR A[Rust 설치] --> B[cargo new hello_rust] B --> C[src/main.rs 작성] C --> D[cargo run] D --> E[cargo test] E --> F[cargo fmt] F --> G[cargo build --release] G --> H[./target/release/hello_rust 실행]
다음 단계
- 자주 쓰는 크레이트들
- 웹: Rocket, Actix-Web
- CLI: clap
- HTTP 클라이언트: reqwest
- 작은 CLI 도구나 웹 서비스를 만들어 보며 감각을 익히세요. 필요해질 때 테스트를 보강하고,
Cargo.toml
로 의존성을 관리하면 됩니다.
참고: 설치 시 발생할 수 있는 문제 해결은 별도 문서에서 자세히 다룹니다. 우선은 위 흐름으로 첫 프로젝트를 끝까지 만들어 보고, 막히는 지점이 생기면 개별 트러블슈팅 글을 참고하세요.