DaleSchool

실전 프로젝트 시작하기

중급10분

학습 목표

  • 프로젝트 요구사항을 분석하고 기능을 정리할 수 있다
  • Cargo workspace·모듈 구조를 설계할 수 있다
  • README, 이슈, 배포 계획을 포함한 공개 저장소를 준비할 수 있다

어떤 프로젝트를 고를까?

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이 최고예요.

킥오프 체크리스트

  1. 문제 정의 — “누가 사용할까? 어떤 상황에서 필요할까?”를 한 문단으로 써 봅니다.
  2. 기능 MVP — 필수 기능 3~5개만 골라 비카드(Backlog 카드) 형태로 정리해요.
  3. 입·출력 예시 — CLI라면 명령 예시, 서버라면 프로토콜 예시를 미리 적으면 요구사항이 구체화됩니다.
  4. 성공 기준 — “README에 캡처 1장 + 테스트 3개 통과 + GitHub Actions green”처럼 완료 정의(DoD)를 명시하세요.
  5. 시간 상자 — 각 기능에 예상 시간을 붙이고, 캘린더나 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 프로젝트라고 해서 프로세스가 가벼워도 되는 건 아니에요. 최소한 아래 습관을 추천해요.

  1. Issues — 기능, 버그, 문서 작업을 각각 이슈로 등록하고 type, status 라벨을 붙입니다.
  2. 브랜치 네이밍feature/todo-add, fix/serde-default처럼 역할이 드러나게 작성해요.
  3. PR 템플릿 — “문제 요약 / 해결 방법 / 테스트 결과 / 스크린샷” 네 구역만 있어도 리뷰가 빨라집니다.
  4. 릴리즈 노트 — 태그(v0.1.0)를 달고 CHANGELOG.md에 추가한 뒤 README 다운로드 링크를 업데이트하세요.

README와 문서 뼈대

README는 프로젝트의 첫인상입니다. 아래 섹션만 채워도 충분히 프로페셔널해 보여요.

  1. 프로젝트 설명 (문제 + 해결책)
  2. 빠른 데모 (GIF, 캡처, asciinema 링크)
  3. 설치 & 실행
  4. 테스트 방법 (cargo test, cargo fmt --check 등)
  5. Roadmap / TODO
  6. 라이선스 및 기여 가이드

추가로 /docs 폴더에 API 사용법이나 아키텍처 다이어그램을 정리하면 장기적으로 도움이 됩니다.

프로젝트 킥오프 미션

  1. 위 다섯 개 프로젝트 중 당장 착수할 하나를 선택하고 이슈를 생성하세요.
  2. Cargo workspace 또는 단일 바이너리 구조 중 하나를 택해 폴더를 초기화하고 cargo fmt로 포맷을 맞추세요.
  3. README 초안과 .gitignore, LICENSE를 작성하고 GitHub에 첫 커밋을 올리세요.
  4. scripts/dev.sh, scripts/test.sh처럼 반복 작업을 자동화할 스크립트를 만들어보세요.
  5. Phase 4 종료 시점에 제출할 (또는 블로그에 공유할) 사용자 가이드 초안을 만들어 두세요. 기능이 완성되면 내용만 업데이트하면 됩니다.

이제 진짜로 “나만의 Rust 앱”을 만들 차례입니다. 다음 모듈에서는 과정을 완주한 뒤 어떤 길로 나아갈지 안내할게요. 🚀