Rust 소개
Rust란?
섹션 제목: “Rust란?”Rust는 시스템 프로그래밍 언어예요. C나 C++가 쓰이는 곳과 같은 분야, 그러니까 운영체제, 게임 엔진, 브라우저, 데이터베이스, 그리고 속도와 세밀한 제어가 중요한 명령줄 도구 같은 걸 만들 때 써요.
Rust가 특별한 이유는 저수준 언어의 성능을 내면서도, 흔히 발등 찍는 실수는 막아 준다는 점이에요. C에서는 이미 해제된 메모리를 실수로 읽거나 데이터 경쟁(data race)을 일으키기 쉬워요. Rust에서는 그런 코드는 대개 컴파일조차 되지 않아요. 빌드하는 시점에 컴파일러가 막아 주거든요.
Rust는 Graydon Hoare의 개인 프로젝트로 시작했어요. 나중에 Mozilla의 후원을 받게 되었고, 2015년에 안정 버전인 1.0이 나왔어요. 지금은 Rust 재단(영어)과 큰 오픈 소스 커뮤니티가 함께 관리하고 있어요.
Rust가 해결하는 문제
섹션 제목: “Rust가 해결하는 문제”예전에는 두 가지 중 하나를 골라야 했어요.
- 저수준 언어(C, C++): 빠르고 하드웨어에 가깝지만, 메모리를 직접 관리해야 해요. 실수하면 프로그램이 죽거나 보안 구멍이 생겨요.
- 고수준 언어(Python, Java, Go): 안전하고 쉽지만, 가비지 컬렉터에 의존해요. 그만큼 성능과 예측 가능성을 손해 봐요.
Rust의 핵심 아이디어는 세 번째 선택지예요. 소유권(ownership)이라는 시스템으로 메모리 안전성을 컴파일 시점에 보장해요(소유권은 이 강좌 뒷부분에서 배워요). 가비지 컬렉터도 없고, free()를 직접 호출할 필요도 없어요. 메모리가 언제 더 이상 필요 없는지는 컴파일러가 알아서 판단해요.
다른 언어와 비교하면
섹션 제목: “다른 언어와 비교하면”여러분이 알고 있을 만한 언어들과 Rust를 대략 비교해 보면 이래요.
| 언어 | 속도 | 메모리 안전성 | 가비지 컬렉터 |
|---|---|---|---|
| C / C++ | 빠름 | 수동 관리, 실수하기 쉬움 | 없음 |
| Go | 좋음 | 안전 | 있음 |
| Python | 느린 편 | 안전 | 있음 |
| Rust | 빠름 | 안전 (컴파일 시점에 검사) | 없음 |
정리하면, Rust는 C 수준의 속도와 고수준 언어의 안전성을 동시에 노려요. 실제 코드로 나란히 비교한 내용은 Rust vs C++, Go, Python에서 볼 수 있어요.
Rust는 어디에 쓰일까?
섹션 제목: “Rust는 어디에 쓰일까?”여러분은 이미 모르는 사이에 Rust로 만든 프로그램을 쓰고 있을지도 몰라요.
- Firefox: 렌더링 엔진의 일부가 Rust로 작성되어 있어요
- Cloudflare와 Discord: 성능이 중요한 백엔드 서비스에 써요
- 리눅스 커널: 이제 Rust로 작성한 드라이버를 받아들여요
- CLI 도구: ripgrep(영어),
bat,fd처럼 빠르기로 유명한 도구들이 있어요 - WebAssembly: 브라우저에서 네이티브 속도로 코드를 돌릴 때 Rust가 가장 인기 있는 선택지 중 하나예요
맛보기
섹션 제목: “맛보기”지금 모든 내용을 이해할 필요는 없어요. 얼마나 읽기 쉬운지만 봐 두세요.
fn main() { let name = "Rustacean"; println!("안녕하세요, {name}님!");}실행 결과:
안녕하세요, Rustacean님!“안전하다”는 게 실제로는 어떤 모습일까?
섹션 제목: ““안전하다”는 게 실제로는 어떤 모습일까?”“메모리 안전성”이라고 하면 막연하게 들리니까, 구체적인 예를 들어 볼게요. 점수 세 개가 담긴 목록이 있는데, 존재하지도 않는 열 번째 점수를 달라고 했다고 해 봐요.
C에서는 이게 허용돼요. 프로그램은 목록 뒤쪽 메모리에 우연히 들어 있는 값을 조용히 읽어 와요. 아무 숫자가 나올 수도 있고, 프로그램이 죽을 수도 있고, 보안 구멍이 될 수도 있어요. 그런데 아무도 경고해 주지 않아요.
Rust는 이걸 그냥 넘어가지 않아요. 컴파일러가 실수를 알아챌 수 있으면 아예 빌드를 거부해요.
fn main() { let scores = [90, 85, 77]; println!("{}", scores[9]);}error: this operation will panic at runtime --> src/main.rs:3:20 |3 | println!("{}", scores[9]); | ^^^^^^^^^ index out of bounds: the length is 3 but the index is 9컴파일러가 “이 연산은 실행 중에 패닉을 일으킬 거예요. 길이가 3인데 인덱스가 9라서 범위를 벗어나요”라고 알려 주고 있어요.
그리고 항목이 있는지 확실하지 않을 때는 Rust가 정중하게 물어보는 방법을 제공해요. .get()은 쓰레기 값을 건네주는 대신 “여기 있어요” 또는 “아무것도 없어요”(None)라고 대답해요.
fn main() { let scores = [90, 85, 77]; println!("첫 번째 점수: {}", scores[0]); println!("열 번째 점수: {:?}", scores.get(9));}실행 결과:
첫 번째 점수: 90열 번째 점수: None[...], .get(), None은 아직 몰라도 괜찮아요. 배열과 Option에서 제대로 배울 거예요. 지금 중요한 건, “읽으면 안 되는 메모리를 읽는” 종류의 버그가 프로그램이 실행되기 전에 잡히거나, 실행 중에 안전하게 처리된다는 점이에요.
Rust는 배우기 어려울까?
섹션 제목: “Rust는 배우기 어려울까?”솔직하게 말하면, 처음 1~2주는 답답할 수 있어요. 소유권이나 대여 같은 개념은 정말로 새롭고, 여러분이 될 거라고 생각한 코드를 컴파일러가 거부할 거예요. 하지만 그 마찰은 컴파일러가 더 안전한 코드를 쓰는 법을 가르쳐 주는 과정이에요. 그리고 대부분의 사람이 예상하는 것보다 빨리 감이 와요.
이 강좌는 그 학습 곡선을 완만하게 만들려고 만들었어요. 작은 단계, 실제 예제, 그리고 모든 예제에 직접 실행해 보기 버튼이 있어요.
연습 문제
섹션 제목: “연습 문제”1. 나에게 인사하기
섹션 제목: “1. 나에게 인사하기”“맛보기” 프로그램을 고쳐서 여러분의 이름으로 인사하게 하고, Rust에 오신 걸 환영해요!라고 출력하는 두 번째 줄을 추가해 보세요. 힌트: println! 하나가 한 줄을 출력하니까, 두 개가 필요해요.
정답 보기
fn main() { let name = "민수"; println!("안녕하세요, {name}님!"); println!("Rust에 오신 걸 환영해요!");}실행 결과:
안녕하세요, 민수님!Rust에 오신 걸 환영해요!2. Rust에 관한 사실 하나
섹션 제목: “2. Rust에 관한 사실 하나”Rust라는 단어와 2015라는 연도를 각각 이름을 붙여 저장한 다음, 둘 다 사용해서 Rust 1.0은 2015년에 출시되었어요.라는 문장을 출력해 보세요. 힌트: 하나의 println! 안에 {name}을 여러 개 넣을 수 있어요.
정답 보기
fn main() { let language = "Rust"; let year = 2015; println!("{language} 1.0은 {year}년에 출시되었어요.");}실행 결과:
Rust 1.0은 2015년에 출시되었어요.- Rust는 빠르고 안전한 시스템 언어예요. C 수준의 속도를 내면서 가비지 컬렉터가 없어요.
- 소유권을 통해 메모리 버그를 컴파일 시점에 막아요.
- 브라우저, 커널, 클라우드 서비스, CLI, WebAssembly에서 쓰여요.
- 학습 곡선은 분명히 있지만 짧아요. 컴파일러는 여러분 편이에요.
다음은 Rust를 설치하고 내 컴퓨터에서 첫 프로그램을 실행해 볼 차례예요.
이해도 점검
섹션 제목: “이해도 점검”이해도 점검
1. Rust는 가비지 컬렉터 없이 어떻게 메모리 안전성을 보장할까요?
2. 비교 표에 따르면 Rust와 Go의 공통점은 무엇일까요?
3. Rust 개발자들은 스스로를 뭐라고 부를까요?
점수: 0 / 3
더 알아보기
섹션 제목: “더 알아보기”- 소개 - 러스트 프로그래밍 언어: 공식 책이 누구를 위한 것이고 어떻게 구성되어 있는지 알려 줘요. 이 강좌와 함께 보기에 가장 좋은 무료 자료예요.
- rust-lang.org (영어): 공식 홈페이지예요. 성능, 신뢰성, 생산성이라는 “왜 Rust인가?“에 대한 설명과 Rust를 쓰는 회사들의 사례가 있어요.
- Learn Rust (영어): Rust by Example, Rustlings 연습 문제 등 공식 학습 자료 목록이에요.
- Announcing Rust 1.0 — Rust Blog (영어): 2015년에 Rust가 안정 버전이 되었음을 알린 글이에요. “안정성”이 여러분의 코드에 무엇을 약속하는지도 설명해요.
- Rust Foundation (영어): Rust 프로젝트와 메인테이너들을 지원하는 비영리 재단이에요.