콘텐츠로 이동

Rust 시작하기

내 컴퓨터에 Rust를 설치하고 첫 프로그램을 만들어 볼게요. 아직 아무것도 설치하고 싶지 않다면 Rust Playground에서 따라 해 보고, 나중에 이 페이지로 돌아와도 괜찮아요.

Rust를 설치하는 공식 방법은 rustup이라는 도구를 쓰는 거예요. rustup은 Rust 컴파일러와 빌드 도구인 cargo를 설치해 주고, 모든 걸 최신 상태로 유지해 줘요.

rustup.rs 사이트에 들어가서 운영체제에 맞는 안내를 따라 하세요.

  • Windows: rustup-init.exe를 내려받아 실행하고, 기본 옵션을 그대로 선택하세요.

  • macOS / Linux: 터미널에 아래 명령을 붙여 넣으세요.

    Terminal window
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2단계: 제대로 설치됐는지 확인하기

섹션 제목: “2단계: 제대로 설치됐는지 확인하기”

터미널을 닫았다가 다시 연 다음, 아래 명령을 실행해 보세요.

Terminal window
rustc --version
cargo --version

rustc 1.xx.0 같은 버전 번호가 보이면 준비 완료예요.

  • rustc는 Rust 컴파일러예요. 여러분의 코드를 실행할 수 있는 프로그램으로 바꿔 줘요.
  • cargo는 프로젝트 빌드, 실행, 테스트, 관리를 한 번에 해 주는 Rust의 만능 도구예요. 거의 모든 작업에 cargo를 쓰게 될 거예요.

파일을 직접 만드는 대신 cargo에게 프로젝트를 만들어 달라고 해 봐요.

Terminal window
cargo new hello_rust
cd hello_rust

그러면 Rust 프로젝트에 필요한 모든 게 들어 있는 hello_rust 폴더가 생겨요.

hello_rust/
├── Cargo.toml # 프로젝트 설정과 의존성
└── src/
└── main.rs # 여기에 코드를 작성해요
  • Cargo.toml은 프로젝트를 설명하는 파일이에요(이름, 버전, 사용하는 라이브러리 등).
  • src/main.rs는 시작 파일이에요. cargo가 Hello World 코드까지 미리 채워 줘요.

프로젝트 폴더 안에서 아래 명령을 실행하세요.

Terminal window
cargo run

cargo가 프로젝트를 컴파일한 다음 이렇게 출력하는 걸 볼 수 있어요.

Hello, world!

끝이에요. 방금 Rust 프로그램을 빌드하고 실행했어요.

src/main.rs를 열어 보면 이런 코드가 있어요.

fn main() {
println!("Hello, world!");
}
  • fn main() { ... }는 main 함수를 정의해요. 모든 Rust 프로그램은 여기서 실행을 시작해요.
  • println!("...")은 화면에 텍스트 한 줄을 출력해요.

메시지를 바꾸고 다시 cargo run을 실행해 보세요.

fn main() {
println!("내 첫 Rust 프로그램에서 인사드려요!");
}

실행 결과:

내 첫 Rust 프로그램에서 인사드려요!
▶ 직접 실행해 보기

앞으로 계속 쓰게 될 두 명령이에요.

명령 하는 일
cargo run 프로그램을 컴파일하고 실행해요 (개발하는 동안 가장 편해요)
cargo build 컴파일만 해요. 프로그램은 target/debug/에 생겨요
cargo build --release 배포용으로 최적화된, 더 빠른 버전을 컴파일해요

뭔가 잘못됐을 때: 컴파일러 에러 읽기

섹션 제목: “뭔가 잘못됐을 때: 컴파일러 에러 읽기”

컴파일러 에러는 반드시 보게 될 거예요. 매일요. Rust를 몇 년 쓴 사람도 마찬가지예요. 에러가 났다고 여러분이 못하는 게 아니에요. 컴파일러가 제 할 일을 하고 있는 거예요. 처음 볼 때 덜 무섭도록 일부러 에러를 하나 만들어 볼게요.

src/main.rs에서 println!의 !를 지워 보세요.

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

cargo run을 실행하면 이런 에러가 나와요.

error[E0423]: expected function, found macro `println`
--> src/main.rs:2:5
|
2 | println("Hello, world!");
| ^^^^^^^ not a function
|
help: use `!` to invoke the macro
|
2 | println!("Hello, world!");
| +

컴파일러 메시지는 영어로 나오지만, 구조만 알면 어렵지 않아요. 위에서 아래로 읽어 보세요.

  1. 첫 줄은 무엇이 잘못됐는지 알려 줘요. “함수를 기대했는데 매크로 println을 찾았다”는 뜻이에요. println은 함수가 아니라 매크로예요(매크로가 뭔지는 다음 페이지에서 배워요).
  2. --> src/main.rs:2:5 부분은 위치를 알려 줘요. src/main.rs 파일의 2번 줄, 5번째 칸이에요.
  3. ^^^^^^^ 표시는 문제가 되는 코드를 정확히 가리켜요. 옆의 not a function은 “함수가 아니다”라는 뜻이에요.
  4. help: 부분에는 고치는 방법이 나올 때가 많아요. 여기서는 “매크로를 호출하려면 !를 쓰세요”라고 하면서, 빠진 ! 자리를 +로 표시해 주기까지 해요.

!를 다시 넣으면 모든 게 다시 잘 동작해요.

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

실행 결과:

Hello, world!
▶ 직접 실행해 보기

가장 편하게 쓰려면 에디터에 rust-analyzer 확장을 설치하세요. 타이핑하는 동안 자동 완성, 코드 옆에 바로 뜨는 에러 메시지, 타입 힌트를 보여 줘요.

  • VS Code: rust-analyzer 확장을 설치하세요
  • 대부분의 다른 에디터(JetBrains, Neovim 등)도 rust-analyzer를 지원해요.

프로그램이 세 줄을 출력하게 만들어 보세요. 여러분의 이름, 좋아하는 음식, 그리고 방금 Rust를 실행했어요!예요. 힌트: println! 하나가 한 줄을 출력하니까, 세 개를 쓰면 돼요.

정답 보기
fn main() {
println!("제 이름은 민수예요");
println!("저는 피자를 좋아해요");
println!("방금 Rust를 실행했어요!");
}

실행 결과:

제 이름은 민수예요
저는 피자를 좋아해요
방금 Rust를 실행했어요!
▶ 직접 실행해 보기

아래처럼 제목 위아래에 = 기호 줄이 있는 작은 배너를 출력해 보세요. 그다음 일부러 ! 하나를 지우고 cargo run을 실행해서 에러를 읽어 보고, 다시 고쳐 보세요. 힌트: = 줄도 다른 메시지와 똑같이 println! 안에 넣은 텍스트일 뿐이에요.

정답 보기
fn main() {
println!("==============");
println!(" HELLO RUST");
println!("==============");
}

실행 결과:

==============
HELLO RUST
==============
▶ 직접 실행해 보기

배너 제목은 일부러 영어로 두었어요. 한글은 화면에서 영문자보다 두 배 넓게 표시되기 때문에, = 줄과 너비를 맞추기가 까다롭거든요.

  • rustup.rs에서 rustup으로 Rust를 설치해요.
  • rustc --version과 cargo --version으로 설치를 확인해요.
  • cargo new로 프로젝트를 만들고, cargo run으로 실행해요.
  • 프로젝트에는 Cargo.toml(설정)과 src/main.rs(코드)가 있어요.
  • 컴파일러 에러는 위에서 아래로 읽어요. 무엇이, 어디서 잘못됐는지 알려 주고, 고치는 방법을 담은 help:가 나올 때도 많아요.
  • 에디터에 rust-analyzer를 설치하면 훨씬 편하게 작업할 수 있어요.

이해도 점검

1. Rust 컴파일러와 cargo를 설치하고 최신 상태로 유지해 주는 도구는 무엇일까요?

2. Rust 프로젝트의 이름, 버전, 의존성을 적어 두는 파일은 무엇일까요?

3. 프로그램을 실행하지 않고 컴파일만 하는 명령은 무엇일까요?

점수: 0 / 3