어떤 프로젝트를 고를까?
Phase 4에서는 최소 하나 이상의 실전 프로젝트를 완성하는 것이 목표예요. 아래 다섯 가지 가이드는 난이도와 적용 기술이 조금씩 달라요.
| 프로젝트 | 한 줄 설명 | 주력 개념 | 난이도 |
| ------------ | -------------------------------- | ------------------------------- | -------- |
| todo | JSON에 저장되는 CLI 할 일 관리자 | serde, clap, 파일 I/O | ⭐⭐ |
| minigrep | 파일에서 텍스트를 검색하는 도구 | 파일 I/O, 이터레이터, 환경 변수 | ⭐⭐ |
| unitconv | 단위 변환 CLI | 트레이트, 제네릭, 테스트 | ⭐⭐ |
| mdhtml | 간단한 Markdown → HTML 변환기 | 열거형(AST), 문자열 처리 | ⭐⭐⭐ |
| minichat | TCP 채팅 서버/클라이언트 | std::net, 스레드, 동시성 | ⭐⭐⭐⭐ |
팁: 처음에는 todo 또는 minigrep로 워밍업하고, 자신감이 붙으면 unitconv나 mdhtml을 도전해 보세요. 네트워크/동시성을 느끼고 싶다면 minichat이 최고예요.
킥오프 체크리스트
- 문제 정의 — “누가 사용할까? 어떤 상황에서 필요할까?”를 한 문단으로 써 봅니다.
- 기능 MVP — 필수 기능 3~5개만 골라 비카드(Backlog 카드) 형태로 정리해요.
- 입·출력 예시 — CLI라면 명령 예시, 서버라면 프로토콜 예시를 미리 적으면 요구사항이 구체화됩니다.
- 성공 기준 — “README에 캡처 1장 + 테스트 3개 통과 + GitHub Actions green”처럼 완료 정의(DoD)를 명시하세요.
- 시간 상자 — 각 기능에 예상 시간을 붙이고, 캘린더나 todo 앱에 블록을 잡아둡니다.
체크리스트를 그대로 README의 첫 섹션으로 복사해도 좋아요. 프로젝트가 어디로 가는지 명확한 나침반이 됩니다.
Cargo workspace & 디렉터리 설계
단일 바이너리로 충분하면 src/main.rs 하나로 시작해도 돼요. 하지만 "라이브러리 + CLI" 구조로 나누면 테스트와 재사용이 쉬워집니다.
# Cargo.toml
description = "todo CLI"
[workspace]
members = ["crates/todo-core", "crates/todo-cli"]
[workspace.package]
edition = "2021"
[workspace.dependencies]
anyhow = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
project-root/
├── crates/
│ ├── todo-core/ # 비즈니스 로직 (lib)
│ │ └── src/lib.rs
│ └── todo-cli/ # clap 기반 CLI (bin)
│ └── src/main.rs
├── tests/ # 통합 테스트
├── fixtures/ # 샘플 입력/출력
└── README.md
- core 크레이트는 순수 로직과 데이터 모델을 담아요. 단위 테스트를 집중 배치하기 좋습니다.
- CLI 크레이트는
clap::Parser와 입출력, 파일 시스템 접근을 맡아요. tests/폴더에 통합 테스트(cargo test)를 작성하면 CLI 시나리오를 자동화할 수 있어요.
이슈·브랜치·릴리즈 흐름 만들기
Rust 프로젝트라고 해서 프로세스가 가벼워도 되는 건 아니에요. 최소한 아래 습관을 추천해요.
- Issues — 기능, 버그, 문서 작업을 각각 이슈로 등록하고
type,status라벨을 붙입니다. - 브랜치 네이밍 —
feature/todo-add,fix/serde-default처럼 역할이 드러나게 작성해요. - PR 템플릿 — “문제 요약 / 해결 방법 / 테스트 결과 / 스크린샷” 네 구역만 있어도 리뷰가 빨라집니다.
- 릴리즈 노트 — 태그(v0.1.0)를 달고 CHANGELOG.md에 추가한 뒤 README 다운로드 링크를 업데이트하세요.
README와 문서 뼈대
README는 프로젝트의 첫인상입니다. 아래 섹션만 채워도 충분히 프로페셔널해 보여요.
- 프로젝트 설명 (문제 + 해결책)
- 빠른 데모 (GIF, 캡처, asciinema 링크)
- 설치 & 실행
- 테스트 방법 (
cargo test,cargo fmt --check등) - Roadmap / TODO
- 라이선스 및 기여 가이드
추가로 /docs 폴더에 API 사용법이나 아키텍처 다이어그램을 정리하면 장기적으로 도움이 됩니다.
프로젝트 킥오프 미션
- 위 다섯 개 프로젝트 중 당장 착수할 하나를 선택하고 이슈를 생성하세요.
- Cargo workspace 또는 단일 바이너리 구조 중 하나를 택해 폴더를 초기화하고
cargo fmt로 포맷을 맞추세요. - README 초안과
.gitignore,LICENSE를 작성하고 GitHub에 첫 커밋을 올리세요. scripts/dev.sh,scripts/test.sh처럼 반복 작업을 자동화할 스크립트를 만들어보세요.- Phase 4 종료 시점에 제출할 (또는 블로그에 공유할) 사용자 가이드 초안을 만들어 두세요. 기능이 완성되면 내용만 업데이트하면 됩니다.
이제 진짜로 “나만의 Rust 앱”을 만들 차례입니다. 다음 모듈에서는 과정을 완주한 뒤 어떤 길로 나아갈지 안내할게요. 🚀