Rust를 배워야 하는 이유 — 성능과 안전성의 완벽한 균형
메모리 안전성을 보장하면서도 C/C++ 수준의 성능을 제공하는 Rust. 왜 시스템 프로그래밍의 미래인지 살펴봅니다.
Rust가 주목받는 이유
2006년 Mozilla 직원 Graydon Hoare가 개인 프로젝트로 시작한 Rust는 이제 스택오버플로우 개발자 설문에서 10년 연속 가장 사랑받는 언어로 선정되고 있습니다. 구글, 마이크로소프트, 아마존 같은 빅테크 기업들이 코어 시스템에 도입하고 있으며, 리눅스 커널에도 C와 함께 공식 언어로 채택됐습니다.
소유권 시스템 — 컴파일 타임 메모리 안전성
Rust의 핵심은 소유권(Ownership) 시스템입니다. 메모리 할당과 해제가 컴파일 타임에 결정되어 가비지 컬렉터 없이도 메모리 누수와 댕글링 포인터를 원천 차단합니다.
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1의 소유권이 s2로 이동
// println!("{}", s1); // 컴파일 에러! s1은 더 이상 유효하지 않음
println!("{}", s2); // OK
}빌림 검사기(Borrow Checker)
소유권을 '빌려오는' 참조자(Reference)는 읽기 전용 참조는 여러 개, 쓰기 가능한 참조는 오직 하나만 동시에 존재할 수 있습니다. 이 규칙이 데이터 레이스를 컴파일 단계에서 완전히 제거합니다.
처음에는 빌림 검사기와 씨름하게 됩니다. 하지만 이 제약이 결국 안전한 동시성 코드를 강제하는 설계임을 알게 됩니다.
[!info] Rust의 소유권 규칙은 런타임 비용보다 컴파일 단계의 피드백을 늘리는 방향의 설계입니다.
C/C++ 수준의 성능
Rust는 **제로 비용 추상화(Zero-cost Abstraction)**를 표방합니다. 고수준 언어의 편의 기능을 사용하더라도 런타임 오버헤드가 없습니다.
| 언어 | GC 필요 | 메모리 안전 | 성능 |
|---|---|---|---|
| C | ✗ | ✗ | ★★★ |
| C++ | ✗ | △ | ★★★ |
| Rust | ✗ | ✓ | ★★★ |
| Go | ✓ | ✓ | ★★ |
이터레이터, 클로저, 제네릭 모두 컴파일 시 인라이닝되어 직접 작성한 C 코드와 동등한 어셈블리가 생성됩니다.
성숙해가는 생태계
cargo라는 공식 패키지 매니저와 빌드 시스템이 있어 의존성 관리가 편리합니다.
- crates.io — 10만 개 이상의 크레이트
- Tokio — 비동기 런타임
- Axum — 웹 프레임워크
- Serde — 직렬화 라이브러리
# Cargo.toml
[dependencies]
tokio = { version = "1", features = ["full"] }
axum = "0.7"
serde = { version = "1", features = ["derive"] }긴 코드 줄은 자동으로 줄바꿈하지 않고 블럭 내부에서 좌우로 스크롤됩니다.
fn configure_server(address: &str, workers: usize, graceful_shutdown: bool, request_timeout_ms: u64) -> Result<(), Box<dyn std::error::Error>> {
println!("starting server at {address} with {workers} workers (timeout: {request_timeout_ms}ms, graceful: {graceful_shutdown})");
Ok(())
}실행형 예제
아래 예제는 글 안에서 직접 실행할 수 있는 React TypeScript playground입니다. 일반 코드블럭과 분리해서, 필요한 글에서만 <Playground />를 사용합니다.
import { useState } from "react"; export default function App() { const [count, setCount] = useState(0); return ( <main style={{ minHeight: "100vh", display: "grid", placeContent: "center", gap: 12, background: "#f8fafc", color: "#111827", fontFamily: "system-ui, sans-serif" }}> <p>Rust 글 안에 들어간 실행형 UI 예제</p> <button onClick={() => setCount((value) => value + 1)} style={{ border: 0, borderRadius: 6, background: "#8b5cf6", color: "white", cursor: "pointer", fontWeight: 700, padding: "10px 14px" }} > Count: {count} </button> </main> ); }
언제 Rust를 선택해야 할까
성능이 중요한 CLI 도구, 시스템 프로그래밍, WebAssembly, 임베디드, 네트워크 서버에서 탁월합니다. Rust는 진입 장벽이 있지만 그 투자는 분명히 회수됩니다.

댓글