01. Rust 시작하기 (rustup·cargo·hello world)
Rust 는 메모리 안전성을 컴파일 타임에 보장하는 시스템 프로그래밍 언어입니다. GC 없이 C/C++ 급 성능을 내면서도 데이터 경합·널 포인터·use-after-free 같은 메모리 버그를 컴파일러가 막아주는 것이 핵심 매력입니다. 이 강의에서는 rustup 으로 툴체인을 설치하고 cargo 로 첫 프로젝트를 만들어 실행해 봅니다.
이 강의에서 배우는 것
- 1rustup 으로 안정판 Rust 툴체인을 설치한다
- 2rustc·cargo 버전을 확인하고 차이를 이해한다
- 3cargo new 로 첫 프로젝트를 만든다
- 4cargo run / cargo build / cargo check 의 차이를 이해한다
- 5Cargo.toml 의 기본 구조를 읽을 수 있다
소개
Rust 는 2010 년 Mozilla 에서 시작된 후 Firefox·AWS·Discord·Linux 커널까지 빠르게 확산된 시스템 언어입니다. 핵심 메시지는 단순합니다 — **컴파일러가 메모리 안전을 보장한다**. 가비지 컬렉터가 없는데도 dangling pointer·data race 같은 문제가 빌드 단계에서 막혀, 런타임에서 미스터리 크래시를 디버깅하는 시간이 극적으로 줄어듭니다.
이 강의는 22편 트랙의 1편입니다. 설치 → 첫 빌드 → 다음 강의(변수)까지 끊김 없이 이어집니다.
핵심 개념
1) rustup — Rust 의 공식 툴체인 매니저
Rust 는 Python 처럼 시스템에 직접 설치하지 않습니다. **rustup** 이 안정판/베타판/나이틀리를 함께 관리하며 필요 시 즉시 전환할 수 있게 해 줍니다.
- **stable** — 6주마다 출시되는 안정판. 실무용
- **beta** — 다음 안정판 후보
- **nightly** — 매일 빌드. 실험적 기능 사용 시
2) cargo — 빌드·패키지·테스트 통합 도구
Node 의 npm, Python 의 pip 에 해당합니다. 다만 cargo 는 **빌드 시스템 + 의존성 관리 + 테스트 러너 + 문서 생성**을 한 명령으로 통합한다는 점이 특별합니다.
| 명령 | 역할 |
|---|---|
| cargo new | 새 프로젝트 생성 |
| cargo build | 디버그 빌드 (target/debug/) |
| cargo build --release | 릴리스 빌드 (최적화 켬) |
| cargo run | 빌드 + 실행 |
| cargo check | 타입 검사만, 바이너리 생성 안 함 (빠름) |
| cargo test | 테스트 실행 |
3) rustc 와의 관계
**rustc** 는 실제 컴파일러입니다. cargo 가 내부적으로 rustc 를 호출합니다. 단일 파일을 빠르게 컴파일할 때만 rustc 를 직접 쓰고, 평소엔 cargo 만 다룹니다.
핵심 예제
rustup 설치는 한 줄로 끝납니다. macOS/Linux:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Windows: https://rustup.rs 에서 rustup-init.exe 다운로드설치 후 새 셸에서 버전을 확인합니다.
rustc --version
# rustc 1.7x.x (yyyymmdd)
cargo --version
# cargo 1.7x.x (yyyymmdd)첫 프로젝트 생성 → 실행:
cargo new hello_rust
cd hello_rust
cargo run
# Compiling hello_rust v0.1.0
# Finished `dev` profile [unoptimized + debuginfo] target(s)
# Running `target/debug/hello_rust`
# Hello, world!생성된 `src/main.rs` 와 `Cargo.toml` 의 모습:
// src/main.rs
fn main() {
println!("Hello, world!");
}# Cargo.toml
[package]
name = "hello_rust"
version = "0.1.0"
edition = "2021"
[dependencies]자주 하는 실수
Q. cargo: command not found 가 떠요
A. rustup 설치 후 셸을 **새로 열어야** PATH 가 갱신됩니다. 또는 `source $HOME/.cargo/env` 한 번 실행하면 같은 셸에서도 인식됩니다.
Q. cargo build 만 하면 실행 파일이 어디 있나요?
A. `target/debug/<프로젝트명>` (Windows 는 `.exe` 확장자). 릴리스 빌드는 `target/release/` 입니다. 그래서 빠르게 확인할 땐 그냥 `cargo run` 이 편합니다.
Q. println! 의 ! 는 뭔가요? 함수 호출 아닌가요?
A. ! 가 붙으면 **매크로** 입니다. 컴파일 타임에 코드를 생성하는 메타 기능으로, 가변 인자나 컴파일 타임 포매팅 검증을 위해 함수 대신 매크로로 만들어져 있습니다. Rust 의 `format!`, `vec!`, `assert_eq!` 등도 모두 매크로.
정리
- rustup 이 Rust 툴체인을 관리한다
- cargo 가 빌드·실행·테스트·문서 생성을 통합한다
- 첫 프로젝트는 `cargo new` 한 줄, 실행은 `cargo run`
- 빠른 검사용은 `cargo check`, 배포용은 `cargo build --release`
- println! 은 함수가 아니라 매크로
과제
- `cargo new` 로 `coding_now_rust_01` 프로젝트를 만들고 `cargo run` 으로 실행
- main.rs 의 메시지를 본인 이름이 들어간 문장으로 바꿔 다시 실행
- `cargo build --release` 를 실행하고 `target/release/` 의 바이너리 크기를 디버그 빌드와 비교