입문자를 위한 Rust 프로젝트 만들기

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로 의존성을 관리하면 됩니다.

참고: 설치 시 발생할 수 있는 문제 해결은 별도 문서에서 자세히 다룹니다. 우선은 위 흐름으로 첫 프로젝트를 끝까지 만들어 보고, 막히는 지점이 생기면 개별 트러블슈팅 글을 참고하세요.