Cargo 설치와 첫 프로그램
rustup으로 설치하기
운영체제 패키지 매니저(apt install rustc, brew install rust)로도 설치는 되지만 권하지 않습니다. 배포판 저장소의 Rust는 버전이 뒤처져 있는 경우가 많고, Rust는 6주마다 새 버전이 나오는 언어라 이 차이가 금방 벌어집니다. 공식 설치 도구인 rustup을 쓰세요.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh설치가 끝나면 셸을 다시 열거나 source $HOME/.cargo/env를 실행합니다. 확인:
rustc --version
cargo --versionrustc는 컴파일러, cargo는 빌드 도구 겸 패키지 매니저입니다. 실무에서 rustc를 직접 호출할 일은 거의 없습니다 — 항상 cargo를 거칩니다.
프로젝트 만들기
cargo new hello_rust
cd hello_rust생성되는 구조는 이렇습니다.
hello_rust/
├── Cargo.toml # 패키지 이름, 버전, 의존성
└── src/
└── main.rs # 진입점Cargo.toml을 열어보면 npm의 package.json, 메이븐의 pom.xml과 역할이 같다는 걸 바로 알 수 있습니다.
[package]
name = "hello_rust"
version = "0.1.0"
edition = "2021"
[dependencies]edition은 언어 버전이 아니라 Rust의 하위 호환 정책 단위입니다. 2015, 2018, 2021, 2024 에디션이 있고, 같은 컴파일러가 에디션이 다른 크레이트를 섞어서 빌드할 수 있습니다. 새로 시작한다면 항상 최신 에디션을 쓰면 됩니다.
src/main.rs는 기본적으로 이렇게 채워져 있습니다.
fn main() {
println!("Hello, world!");
}println!은 함수가 아니라 매크로입니다. 이름 끝의 !가 그 표시입니다. 함수와 매크로를 구분하는 이유는 나중에 다루겠지만, 지금은 "느낌표가 붙으면 매크로"라고만 알아두면 됩니다.
실행과 빌드의 차이
cargo run이 한 줄이 컴파일과 실행을 동시에 합니다. 개발 중에는 거의 이것만 씁니다. 실제 배포용 바이너리가 필요할 때는 최적화 빌드를 따로 만듭니다.
cargo build --release--release 없이 빌드하면 컴파일은 빠르지만 실행 파일이 느립니다(디버그 정보와 최적화 미적용). --release를 붙이면 컴파일 시간이 몇 배로 늘어나는 대신 실행 속도가 크게 빨라집니다. Rust 컴파일이 느리다는 평판은 대체로 이 릴리스 빌드의 최적화 단계 때문입니다 — 코드가 복잡할수록 체감됩니다.
첫 번째로 만질 만한 프로그램
println!만으로는 아무것도 배우지 못하니, 조금 더 만져볼 만한 걸 넣어보겠습니다.
fn main() {
let numbers = vec![4, 8, 15, 16, 23, 42];
let mut sum = 0;
for n in &numbers {
sum += n;
}
println!("숫자들: {:?}", numbers);
println!("합계: {sum}");
}for n in &numbers에서 &를 뺴고 for n in numbers라고 쓰면 어떻게 될까 궁금할 겁니다. 지금 시도해보면 컴파일은 되지만, 그 아래에서 numbers를 다시 쓰려고 하면 에러가 납니다. 왜 그런지가 다음 챕터의 전부입니다.
rust-analyzer는 선택이 아니다
VS Code든 다른 에디터든, rust-analyzer 확장은 반드시 설치하세요. Rust는 타입 추론이 강력한 만큼 에디터가 실시간으로 타입을 보여주지 않으면 코드를 읽기가 답답합니다. 특히 다음 챕터부터 다룰 빌림 검사기 에러는 에디터가 빨간 줄로 즉시 보여주는 것과, 터미널에서 cargo build 결과를 기다려서 보는 것 사이에 학습 속도 차이가 큽니다.