시작하기 — 설치부터 Cargo까지

Tasker_Jang·2026년 6월 13일
post-thumbnail

1장은 Rust 문법이라기보다 "환경을 깔고 첫 프로그램을 돌리는 법 + 기본 도구" 에 대한 내용입니다. 다른 언어를 해봤다면 대부분 익숙한 흐름이라, Rust에서 무엇이 다른지만 짚고 넘어가겠습니다.

1) 설치 — rustup

rustup(러스트업)은 Rust 버전과 관련 도구를 관리하는 명령줄 도구입니다. Rust를 직접 받는 게 아니라, rustup을 통해 컴파일러·도구 묶음을 설치하고 업데이트한다고 보면 됩니다.

  • Linux / macOS: 터미널에서 공식 설치 스크립트를 받아 실행합니다.
  • Windows: rust-lang.org/tools/install 에서 안내를 따릅니다. 도중에 Visual Studio(링커 + 네이티브 라이브러리) 설치를 요구할 수 있습니다.

링커(linker) 는 컴파일된 결과 조각들을 하나의 실행 파일로 합쳐주는 프로그램입니다. 보통 이미 깔려 있지만, 링커 에러가 나면 C 컴파일러(GCC/Clang, macOS는 xcode-select --install)를 설치하면 대개 해결됩니다.

설치가 끝나면 버전을 찍어 확인합니다.

rustc --version
# rustc 1.xx.x (해시 날짜)  ← 이렇게 나오면 성공

버전·업데이트·삭제 명령도 간단합니다.

rustup update         # 최신 안정 버전으로 갱신
rustup self uninstall # Rust와 rustup 제거
rustup doc            # 오프라인 공식 문서를 브라우저로 열기

2) 첫 프로그램 — Hello, world!

main.rs 파일을 만들고 다음을 적습니다. (Rust 소스 파일 확장자는 .rs이고, 파일명에 단어가 여러 개면 hello_world.rs처럼 밑줄로 잇는 게 관례입니다.)

fn main() {
    println!("Hello, world!");
}

기호 하나씩 풀어보겠습니다.

  • fn : 함수를 정의하는 키워드입니다.
  • main : 프로그램이 가장 먼저 실행하는 특별한 함수입니다. 진입점(entry point)이라고 부릅니다.
  • () : 매개변수 자리입니다. 여기선 받는 값이 없어 비어 있습니다.
  • { } : 함수 본문을 감싸는 중괄호입니다. Rust는 모든 함수 본문에 중괄호를 요구합니다.
  • println! : 텍스트를 화면에 출력합니다. 끝의 !가 핵심 포인트인데, 이건 함수가 아니라 매크로(macro) 호출이라는 표시입니다. (매크로 = 코드를 생성하는 코드. 자세한 건 뒷장에서 다룹니다.)
  • ; : 문장이 끝났다는 표시입니다. Rust 코드 대부분은 세미콜론으로 끝납니다.

컴파일하고 실행해봅니다.

rustc main.rs   # 컴파일 → 실행 파일 생성
./main          # 실행 (Windows는 .\main)
# Hello, world!

3) Rust는 컴파일(AOT) 언어다

Python·JavaScript·Ruby처럼 "실행하면 그 자리에서 돌아가는" 언어와 달리, Rust는 AOT(ahead-of-time, 미리) 컴파일 언어입니다. 즉 컴파일과 실행이 별개 단계입니다.

장점은, 한 번 컴파일해서 만든 실행 파일을 건네주면 상대방은 Rust가 안 깔려 있어도 그대로 실행할 수 있다는 점입니다. (.py 파일을 주면 상대도 Python이 있어야 하는 것과 대비됩니다.) 대신 실행 전 컴파일 단계가 필요하다는 트레이드오프가 있습니다.

4) Cargo — 실무에서 진짜로 쓰는 도구

rustc로 단일 파일을 돌리는 건 학습용으로는 충분하지만, 프로젝트가 커지면 의존성(다른 라이브러리)·빌드 옵션·공유를 손으로 관리하기 번거롭습니다. 그래서 대부분의 Rustacean(러스트 사용자들의 자칭 별명)은 Cargo를 씁니다. Cargo는 빌드 시스템이자 패키지 매니저입니다.

cargo --version       # 설치 확인 (공식 설치 시 같이 깔림)
cargo new hello_cargo # 새 프로젝트 생성
cd hello_cargo

cargo new가 만들어주는 구조는 이렇습니다.

hello_cargo/
├── Cargo.toml     # 프로젝트 설정 파일
├── .gitignore
└── src/
    └── main.rs    # 소스 코드는 여기에

추가로 Git 저장소도 자동 초기화됩니다. (이미 Git 저장소 안이면 안 합니다. --vcs 플래그로 조정 가능.) 소스 코드는 src/ 안에, 최상위 폴더는 설정·README·라이선스 같은 코드 외의 것을 두는 자리입니다.

Cargo.toml 내용을 봅니다.

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2024"

[dependencies]
  • TOML(Tom's Obvious, Minimal Language)이라는 설정 파일 형식입니다.
  • [package] : 패키지 설정 구역입니다.
  • edition : Rust의 에디션(2015/2018/2021/2024). 언어 관용 표기·기능의 기준 버전 묶음이라고 보면 됩니다. 새 프로젝트는 보통 최신(2024)입니다.
  • [dependencies] : 의존성을 적는 구역입니다. Rust에서 코드 패키지 단위를 crate(크레이트) 라고 부르며, 외부 crate가 필요하면 여기에 적습니다. (이 프로젝트는 아직 의존성이 없습니다.)

5) 빌드·실행 명령

Cargo 명령은 OS와 무관하게 동일합니다.

cargo build           # 빌드 → target/debug/ 에 실행 파일
cargo run             # 빌드 + 실행을 한 번에 (가장 자주 씀)
cargo check           # 컴파일되는지만 검사 (실행 파일은 안 만듦 → 빠름)
cargo build --release # 최적화 빌드 → target/release/

cargo build를 처음 돌리면 Cargo.lock 파일이 생깁니다. 의존성의 정확한 버전을 기록하는 파일인데, 직접 수정할 일은 없고 Cargo가 알아서 관리합니다.


처음 배울 때 헷갈리는 점

  • rustc vs cargorustc는 단일 파일을 직접 컴파일하는 저수준 명령입니다. 실무에서는 거의 항상 cargo를 씁니다. 이 책(과 이 시리즈)도 이후로는 Cargo 기준으로 갑니다.
  • println!! — 오타가 아닙니다. !가 붙으면 함수가 아니라 매크로입니다. 지금은 "출력은 매크로다" 정도만 기억하면 됩니다.
  • debug vs release — 기본 빌드는 debug입니다. 빌드는 빠르지만 실행은 최적화가 안 돼 느립니다. 성능을 재거나 배포할 땐 반드시 --release로 빌드해야 합니다.
  • cargo check vs cargo buildcheck는 실행 파일을 만들지 않고 "컴파일 되는지"만 확인하므로 훨씬 빠릅니다. 코딩 중 수시로 check, 실제로 돌려볼 때 build/run을 쓰는 흐름이 흔합니다.
  • 빌드 결과 위치 — 실행 파일은 현재 폴더가 아니라 target/debug/ (또는 target/release/) 안에 생깁니다.

문법 치트

형태의미한 줄 예
fn name() { }함수 정의fn main() { }
name!( ... )매크로 호출 (! = 매크로)println!("hi");
"..."문자열 리터럴"Hello, world!"
;문장(식) 종료println!("x");
{ }코드 블록 / 함수 본문fn main() { ... }
Cargo 명령하는 일
cargo new 이름새 프로젝트 생성
cargo build빌드 (→ target/debug)
cargo run빌드 + 실행
cargo check컴파일 검사만 (빠름)
cargo build --release최적화 빌드 (→ target/release)

한 줄 요약: Rust는 rustup으로 설치하고 cargo로 프로젝트를 만들고 빌드·실행하며, 첫 프로그램의 핵심은 진입점 fn main과 출력 매크로 println!입니다.


참고 자료

The Rust Programming language (3rd) - Steve Klabnik & Carol Nichols & Chris Krycho. Chapter 1: GETTING STARTED

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글