Rust로 만들 수 있는 것들 — 초급부터 상급까지 프로젝트 로드맵
Hello World 다음에 뭘 만들지 막막할 때
Rust 문법을 한 바퀴 돌았다. The Rust Book도 읽었다. 근데 "이제 뭘 만들지?"가 막막하다. Ruby에서는 rails new하면 바로 뭔가 나왔는데, Rust는 그게 없다.
실제로 만들 수 있는 프로젝트를 난이도별로 정리했다. 각 단계에서 어떤 Rust 개념을 연습할 수 있는지도 같이.
🟢 초급 — 소유권과 기본 문법에 익숙해지기
이 단계의 목표: 컴파일러와 싸우는 데 익숙해지는 것. 프로젝트 규모는 작아도 된다.
1. grep 클론 (minigrep)
The Rust Book에도 나오는 고전. 파일에서 문자열을 검색하는 CLI 도구.
배우는 것: 파일 I/O, Result 에러 처리, 커맨드라인 인자, 이터레이터
$ minigrep "pattern" filename.txt
2. todo CLI
터미널에서 할 일을 추가/삭제/목록 표시하는 도구. 파일(JSON이나 텍스트)에 저장.
배우는 것: struct, enum, 파일 읽기/쓰기, serde(JSON 직렬화)
$ todo add "Rust 공부"
$ todo list
$ todo done 1
3. 숫자 맞추기 게임
랜덤 숫자를 생성하고 사용자가 맞출 때까지 힌트를 주는 게임.
배우는 것: 사용자 입력(stdin), 랜덤(rand crate), loop, match
4. 단위 변환기
온도(섭씨↔화씨), 길이(km↔mile), 무게(kg↔lb) 변환 CLI.
배우는 것: enum으로 단위 표현, 함수 설계, 타입 변환
5. 마크다운 → HTML 변환기
간단한 마크다운(제목, 볼드, 리스트)을 HTML로 변환.
배우는 것: 문자열 파싱, String vs &str, 정규표현식(regex crate)
🟡 중급 — 실제로 쓸 수 있는 도구 만들기
이 단계의 목표: 남이 쓸 수 있는 수준의 완성도. 에러 처리, 테스트, 문서화까지.
6. JSON 포매터 / jq 클론
JSON을 예쁘게 출력하거나, 특정 필드를 추출하는 CLI.
배우는 것: serde_json, 트레이트 구현, 재귀 구조 처리
$ cat data.json | rjq '.users[0].name'
7. 파일 감시자 (file watcher)
디렉토리를 감시하다가 파일이 변경되면 명령어를 실행. Ruby의 guard gem과 비슷.
배우는 것: notify crate, 이벤트 루프, 프로세스 실행(std::process)
$ fwatch ./src "cargo test"
8. HTTP 서버 (from scratch)
TCP 소켓으로 직접 HTTP 요청을 파싱하고 응답을 만드는 서버. 프레임워크 없이.
배우는 것: std::net::TcpListener, 스레드, HTTP 프로토콜, 버퍼 관리
이걸 한 번 해봐야 axum/actix 같은 프레임워크가 뭘 해주는지 이해된다.
9. REST API 서버
axum이나 actix-web으로 CRUD API 구현. DB 연결 포함.
배우는 것: axum/actix-web, sqlx(DB), async/await, 미들웨어, JSON 직렬화
GET /api/users
POST /api/users
GET /api/users/:id
DELETE /api/users/:id
Rubyist라면 Rails API와 비교하면서 만들면 재미있다.
10. 채팅 서버 (TCP/WebSocket)
여러 클라이언트가 접속해서 메시지를 주고받는 서버.
배우는 것: tokio(비동기), Arc/Mutex(공유 상태), 채널(mpsc), WebSocket
11. 정적 사이트 생성기 (SSG)
마크다운 파일을 읽어서 HTML 사이트를 생성. Jekyll/Hugo의 초소형 버전.
배우는 것: 파일 시스템 탐색, 템플릿 엔진(tera), 마크다운 파싱(pulldown-cmark)
12. 이미지 리사이저 CLI
이미지를 읽어서 크기를 변경하고 저장. 배치 처리 지원.
배우는 것: image crate, 바이너리 데이터 처리, 병렬 처리(rayon)
$ imgrs resize --width 800 *.jpg --output ./resized/
🔴 상급 — Rust의 진짜 힘이 나오는 영역
이 단계의 목표: Rust를 선택한 이유가 드러나는 프로젝트. 성능, 안전성, 시스템 레벨 접근.
13. 데이터베이스 엔진
B-tree 기반 키-값 스토어. 디스크에 데이터를 영속화.
배우는 것: 파일 I/O 저수준, 바이너리 직렬화, B-tree 구현, 트랜잭션
SQLite가 어떻게 동작하는지 직접 만들어보는 경험.
14. 프로그래밍 언어 인터프리터
자기만의 작은 언어를 만든다. Lexer → Parser → AST → Evaluator.
배우는 것: enum으로 토큰/AST 표현, 재귀 하강 파싱, Box로 재귀 구조, 패턴 매칭
Rust의 enum + match가 빛나는 프로젝트.
15. WASM 웹 앱
Rust를 WebAssembly로 컴파일해서 브라우저에서 실행. 이미지 처리, 게임 로직 등 CPU 집약적 작업.
배우는 것: wasm-bindgen, wasm-pack, JavaScript 인터페이스, 메모리 관리
16. Ray Tracer (레이트레이서)
3D 장면을 렌더링하는 프로그램. "Ray Tracing in One Weekend"를 Rust로 구현.
배우는 것: 벡터 수학, 병렬 처리(rayon), 이미지 생성, 수치 최적화
결과물이 이미지로 나오니까 성취감이 크다.
17. OS 커널 (교육용)
베어메탈에서 부팅되는 미니 OS. "Writing an OS in Rust" 시리즈 따라하기.
배우는 것: no_std, 인라인 어셈블리, 메모리 관리, 인터럽트 핸들링
Rust가 시스템 프로그래밍 언어인 이유를 체감하는 프로젝트.
18. 게임 (Bevy 엔진)
Bevy ECS 엔진으로 2D/3D 게임 제작.
배우는 것: ECS(Entity Component System) 패턴, 게임 루프, 물리 엔진 연동, 에셋 관리
어디서 시작하면 좋을까
Ruby 배경이라면 이 순서를 추천한다:
- minigrep → 기초 체력 만들기
- todo CLI → struct/enum 연습
- REST API (axum) → Rails와 비교하면서 배우기
- 채팅 서버 → 비동기 + 동시성
- WASM 웹 앱 또는 인터프리터 → Rust의 진짜 재미
Ruby에서 만들어본 것을 Rust로 다시 만들어보는 것도 좋다. 같은 기능인데 구현 방식이 얼마나 다른지 비교하면 두 언어의 설계 철학 차이가 선명하게 보인다.
핵심 포인트
초급: minigrep, todo CLI, 숫자 게임, 단위 변환, MD→HTML
중급: jq 클론, 파일 감시, HTTP 서버, REST API, 채팅, SSG, 이미지 처리
상급: DB 엔진, 인터프리터, WASM, 레이트레이서, OS 커널, 게임
Rubyist 추천 순서: minigrep → todo → REST API → 채팅 → WASM/인터프리터
장점
- ✓ 각 프로젝트가 특정 Rust 개념(소유권, async, trait 등)을 집중 연습시킨다
- ✓ 초급→상급 순서대로 하면 자연스럽게 역량이 쌓인다
단점
- ✗ 상급 프로젝트는 Rust 외에도 해당 분야 지식(DB, 컴파일러 등)이 필요하다
- ✗ 중급부터는 외부 crate 의존이 많아져서 생태계 학습도 병행해야 한다