러스트 설치와 첫 프로그램: rustup·cargo new·Hello World | 러스트 강좌 1강
러스트가 어떤 언어인지 특징을 정리하고, rustup으로 설치한 뒤 cargo new와 cargo run으로 첫 Hello World 프로그램을 실행해요. 입문자가 자주 만나는 설치 오류와 컴파일 오류도 함께 짚어요.
이번 강에서는 러스트가 어떤 언어이고 왜 많은 개발자가 주목하는지 살펴본 뒤, 내 컴퓨터에 러스트를 설치하고 첫 프로그램을 실행해요. 설치와 실행 흐름을 한 번 익혀 두면 앞으로 38강 동안 모든 예제를 같은 방식으로 직접 돌려 볼 수 있어요.
러스트는 어떤 언어인가요
러스트(Rust)는 빠른 실행 속도와 메모리 안전성을 함께 얻는 것을 목표로 만든 시스템 프로그래밍 언어예요. 2015년에 1.0 버전이 나온 뒤 6주마다 새 안정 버전이 꾸준히 출시되고 있어요.
C나 C++처럼 기계어로 직접 컴파일되어 빠르게 동작하면서도, 잘못된 메모리 접근 같은 위험한 실수를 컴파일 단계에서 막아 준다는 점이 가장 큰 특징이에요. 그래서 운영체제, 웹 서버, 명령줄 도구, 웹어셈블리, 임베디드 기기 등 다양한 곳에서 쓰여요.
러스트의 주요 특징
| 특징 | 설명 |
|---|---|
| 메모리 안전성 | 가비지 컬렉터 없이도 잘못된 메모리 사용을 컴파일러가 미리 잡아 줘요. 이 원리(소유권)는 나중에 자세히 배워요. |
| 빠른 성능 | 기계어로 컴파일되어 C/C++에 가까운 속도를 내요. |
| 비용 없는 추상화 | 편하게 쓰는 고급 문법이 실행 속도를 거의 떨어뜨리지 않아요. |
| 안전한 동시성 | 여러 작업을 동시에 실행할 때 생기는 데이터 충돌을 컴파일 단계에서 막아 줘요. |
| 친절한 오류 메시지 | 무엇이 틀렸는지, 어떻게 고치면 되는지까지 알려 주는 경우가 많아요. |
| Cargo | 빌드, 실행, 라이브러리 관리를 한 번에 해 주는 공식 도구가 기본으로 들어 있어요. |
처음 배울 때 알아 둘 점
러스트는 컴파일러가 꽤 엄격해서 처음에는 오류를 자주 만나게 돼요. 하지만 이 오류들은 실행 중에 터질 버그를 미리 알려 주는 것이니, 오류 메시지를 꼼꼼히 읽는 습관을 들이면 실력이 빠르게 늘어요.
rustup으로 러스트 설치하기
러스트는 공식 설치 도구인 rustup으로 설치하는 것이 표준이에요. rustup을 설치하면 컴파일러 rustc, 빌드 도구 cargo, 표준 라이브러리 문서 등이 함께 설치되고, 이후 버전 업데이트도 rustup으로 관리해요.
macOS와 리눅스
터미널을 열고 아래 명령을 입력하세요. 설치 방식을 묻는 메뉴가 나오면 기본값(1번, 엔터)을 고르면 돼요.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
설치가 끝나면 터미널을 새로 열거나 아래 명령으로 환경 변수를 바로 적용해요.
. "$HOME/.cargo/env"
macOS에서는 C 링커가 필요하기 때문에 xcode-select --install로 명령줄 도구를 먼저 설치해 두는 것이 좋아요. 리눅스에서는 배포판의 build-essential(또는 gcc) 패키지가 필요해요.
윈도우
공식 사이트(rust-lang.org)의 설치 페이지에서 rustup-init.exe를 내려받아 실행하세요. 윈도우에서는 Visual Studio의 C++ 빌드 도구(MSVC)가 필요한데, 설치 프로그램이 없으면 설치하라고 안내해 주니 그대로 따라가면 돼요.
설치가 끝나면 반드시 명령 프롬프트나 PowerShell 창을 새로 열어야 PATH 설정이 적용돼요.
설치 확인하기
아래 두 명령으로 버전이 출력되면 설치에 성공한 거예요.
rustc --version
cargo --version
rustc 1.xx.x (xxxxxxxxx 20xx-xx-xx)
cargo 1.xx.x (xxxxxxxxx 20xx-xx-xx)
숫자 부분은 설치한 시점의 최신 안정 버전에 따라 달라요. 러스트는 하위 호환을 중요하게 여기므로 이 강좌의 예제는 최신 안정 버전이면 그대로 동작해요.
자주 쓰는 rustup 명령
| 명령 | 하는 일 |
|---|---|
rustup update |
러스트를 최신 안정 버전으로 업데이트 |
rustup doc |
오프라인 공식 문서를 브라우저로 열기 |
rustup self uninstall |
러스트와 rustup 모두 삭제 |
코드 편집기로는 VS Code에 rust-analyzer 확장을 설치하는 조합이 가장 많이 쓰여요. 자동 완성과 실시간 오류 표시를 해 줘서 공부할 때 큰 도움이 돼요.
cargo new로 첫 프로젝트 만들기
러스트 프로그램은 보통 Cargo 프로젝트 단위로 만들어요. 작업할 폴더로 이동한 뒤 아래 명령을 입력하세요.
cargo new hello_rust
cd hello_rust
Creating binary (application) `hello_rust` package
note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
hello_rust라는 폴더가 생기고, 그 안에 다음과 같은 구조가 만들어져요.
hello_rust/
├── Cargo.toml
└── src/
└── main.rs
Cargo.toml은 프로젝트 이름, 버전, 에디션 같은 설정을 적는 파일이고, src/main.rs가 실제 코드를 작성하는 파일이에요. Git 저장소도 자동으로 초기화되는데, Cargo.toml과 프로젝트 관리에 대한 자세한 내용은 다음 강에서 다뤄요.
프로젝트 이름은 영문 소문자와 밑줄(_)을 쓰는 스네이크 케이스가 관례예요. 공백이나 한글이 들어간 이름은 피하는 것이 좋아요.
Hello World 실행하기
src/main.rs를 열어 보면 이미 Hello World 코드가 들어 있어요.
fn main() {
println!("Hello, world!");
}
프로젝트 폴더 안에서 cargo run을 입력하면 컴파일과 실행이 한 번에 이루어져요.
cargo run
Compiling hello_rust v0.1.0 (/home/user/hello_rust)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.52s
Running `target/debug/hello_rust`
Hello, world!
앞의 세 줄은 Cargo가 보여 주는 진행 상황이고, 마지막 줄이 우리 프로그램의 출력이에요. 프로그램 자체의 실행 결과만 따로 보면 다음과 같아요.
Hello, world!
코드 해설
fn main()은 main이라는 이름의 함수를 정의해요. fn은 함수를 만드는 키워드이고, main 함수는 프로그램이 시작되는 지점이라 실행하면 가장 먼저 호출돼요.
중괄호 { } 사이가 함수의 본문이에요. 러스트에서는 들여쓰기로 공백 4칸을 쓰는 것이 공식 스타일이에요.
println!은 괄호 안의 내용을 화면에 출력하고 줄을 바꿔요. 이름 끝의 느낌표(!)는 이것이 일반 함수가 아니라 매크로라는 표시인데, 매크로는 나중에 배우고 지금은 '출력할 때는 println!
을 쓴다'고 기억하면 충분해요.
"Hello, world!"처럼 큰따옴표로 감싼 것은 문자열이고, 문장 끝의 세미콜론(;)은 하나의 명령이 끝났음을 알려 줘요.
코드를 수정해서 다시 실행하기
main.rs를 고친 뒤 저장하고 cargo run을 다시 입력하면 바뀐 내용이 다시 컴파일되어 실행돼요. 아래처럼 여러 줄을 출력해 보세요.
fn main() {
// println!은 출력 후 줄을 바꿔요
println!("러스트에 오신 것을 환영해요!");
// {} 자리에 뒤의 값이 계산되어 들어가요
println!("1 + 2 = {}", 1 + 2);
// print!는 줄을 바꾸지 않아요
print!("줄바꿈 ");
print!("없이 ");
println!("이어서 출력");
// 괄호 안을 비우면 빈 줄만 출력해요
println!();
println!("끝!");
}
러스트에 오신 것을 환영해요!
1 + 2 = 3
줄바꿈 없이 이어서 출력
끝!
문자열 안의 {}는 자리 표시자예요. 쉼표 뒤에 적은 1 + 2가 계산된 값 3이 그 자리에 들어가요.
서식 지정은 변수를 배우면서 더 자세히 다뤄요.
print!는 줄을 바꾸지 않기 때문에 여러 번 호출하면 한 줄에 이어서 출력돼요. 마지막에 println!으로 줄을 마무리했어요.
rustc로 직접 컴파일하기
Cargo 없이 컴파일러 rustc를 직접 쓸 수도 있어요. 파일 하나짜리 간단한 코드라면 이렇게 해도 돼요.
rustc main.rs
./main # 윈도우에서는 .\main.exe
하지만 실제 개발에서는 거의 항상 Cargo를 써요. 프로젝트가 커지거나 외부 라이브러리를 쓸 때 Cargo가 모든 것을 알아서 처리해 주기 때문이에요.
| 명령 | 하는 일 |
|---|---|
cargo new 이름 |
새 프로젝트 만들기 |
cargo run |
컴파일 후 실행 |
rustc 파일.rs |
파일 하나를 직접 컴파일 |
자주 하는 실수와 오류 메시지
println 뒤에 느낌표를 빠뜨림
println("Hello");처럼 !를 빼먹으면 다음과 같은 오류가 나요.
error[E0423]: expected function, found macro `println`
함수를 기대했는데 매크로를 찾았다는 뜻이에요. 컴파일러가 !를 붙이라고 친절하게 제안해 주니 오류 아래쪽의 help 문구를 확인하세요.
문자열에 작은따옴표 사용
파이썬이나 자바스크립트에 익숙하면 println!('Hello');처럼 작은따옴표를 쓰기 쉬워요. 러스트에서 작은따옴표는 문자 한 개를 뜻하므로 오류가 나요.
error: character literal may only contain one codepoint
문자열은 반드시 큰따옴표 "..."로 감싸야 해요.
세미콜론 누락
여러 문장 중간에 세미콜론을 빠뜨리면 expected;`` 형태의 오류가 나요. 오류 메시지가 가리키는 줄 번호 바로 앞줄을 확인해 보세요.
프로젝트 폴더 밖에서 cargo run
cargo new 후 cd로 폴더에 들어가지 않고 cargo run을 입력하면 다음 오류가 나요.
error: could not find `Cargo.toml` in `/home/user` or any parent directory
Cargo.toml이 있는 프로젝트 폴더로 이동한 뒤 다시 실행하면 돼요.
설치 직후 명령을 찾지 못함
설치했는데 rustc: command not found나 '인식할 수 없는 명령'이라는 메시지가 나오면 터미널을 새로 열어 보세요. 윈도우에서 linker 'link.exe' not found가 나오면 Visual Studio C++ 빌드 도구가 설치되지 않은 것이니 설치 후 다시 시도하세요.
연습 문제
- 새 프로젝트를 만들고 아래처럼 세 줄을 출력하는 프로그램을 작성하세요.
이름: 김러스트
언어: Rust
목표: 38강 완주!
-
print!두 번과println!으로 첫 줄에Hello, Rust!를 출력하고, 둘째 줄에는{}자리 표시자를 써서10 * 3 = 30을 출력하세요. 30은 직접 쓰지 말고 계산식으로 넣어야 해요. -
아래 코드에는 오류가 두 군데 이상 있어요. 고쳐서
안녕하세요와Rust가 두 줄로 출력되게 하세요.
fn main() {
println("안녕하세요")
println!('Rust');
}
정답 예시
1번
fn main() {
// 한 줄씩 출력하고 줄을 바꿔요
println!("이름: 김러스트");
println!("언어: Rust");
println!("목표: 38강 완주!");
}
이름: 김러스트
언어: Rust
목표: 38강 완주!
2번
fn main() {
// print!는 줄을 바꾸지 않으므로 한 줄로 이어져요
print!("Hello, ");
print!("Rust!");
// 빈 println!으로 줄을 바꿔요
println!();
// {} 자리에 10 * 3의 계산 결과가 들어가요
println!("10 * 3 = {}", 10 * 3);
}
Hello, Rust!
10 * 3 = 30
3번
fn main() {
// println 뒤에 !를 붙이고 끝에 세미콜론을 추가
println!("안녕하세요");
// 문자열은 큰따옴표로 감싸기
println!("Rust");
}
안녕하세요
Rust
첫 줄에는 !와 ;가 빠져 있었고, 둘째 줄은 문자열을 작은따옴표로 감싼 것이 문제였어요.
핵심 정리
- 러스트는 C/C++ 수준의 성능과 컴파일 단계의 메모리 안전성을 함께 제공하는 언어예요.
- 설치는 공식 도구 rustup으로 하고,
rustc --version과cargo --version으로 확인해요. - 윈도우는 MSVC 빌드 도구, macOS는 Xcode 명령줄 도구가 함께 필요해요.
cargo new 이름으로 프로젝트를 만들고, 그 폴더 안에서cargo run으로 컴파일과 실행을 한 번에 해요.- 프로그램은
fn main()에서 시작하고,println!으로 출력해요.!는 매크로라는 표시예요. - 문자열은 큰따옴표, 문장 끝은 세미콜론을 꼭 지켜요.
- 오류 메시지에는 해결 방법이 적혀 있는 경우가 많으니 끝까지 읽어 보세요.
강좌 이어 보기
- 다음 강좌: 2강 Cargo로 프로젝트 관리 (곧 올라옵니다)
- 러스트 강좌 전체 목차 보기