MVP Scope¶
Umbra MVP 는 "유료 전환 가능한 최소 제품" 을 목표로 한다. 세 기둥(Protect / Preserve / Restore) 을 제한된 형태로 모두 포함하며, Pro 플랜의 결제-권한-복구 흐름이 end-to-end 로 동작해야 한다.
Phase¶
MVP (첫 프로덕션 릴리즈)
Why this phase¶
Umbra 의 가치 제안은 단순 백업이 아니라 "Protect / Preserve / Restore" 세 기둥의 조합이다. MVP 에서 한 기둥이라도 빠지면 제품 정체성이 불완전해진다.
- Preserve 만 있으면 → 기존 백업 봇과 차별화 실패
- Restore 만 있으면 → "사고 난 뒤에나 쓸모 있음" 으로 구독 동기 약화
- Protect (Anti-Nuke) 가 빠지면 → Pro 플랜의 가치 부족
따라서 MVP 는 세 기둥을 제한된 범위로 모두 포함 하는 방향을 택한다. 각 기둥의 고급 기능은 Phase 2 로 연기.
동시에 "유료 전환 가능" 이 목표이므로 결제 파이프라인(Toss Billing + 빌링키 + 재시도 + 자동 해지)은 완성도 있게 구현한다. 제품 사용 경험의 모든 접점이 작동해야 유료 전환이 발생한다.
Goals¶
Business goals¶
- Free → Pro 전환 플로우 end-to-end 작동
- 첫 10명의 Pro 고객 유치
- 첫 3건 실제 복구 사례 확보 (마케팅 증거)
- 월 ₩50,000 이상 MRR (상징적 수준)
Technical goals¶
- 결제 파이프라인 production-ready (실패 재시도, 자동 해지, 빌링키 암호화)
- Recovery 워크플로우가 프로세스 장애에도 완주
- Anti-Nuke 감지 + 알림 동작 (자동 대응은 Enterprise 한정)
- 세 프로세스 구조(bot/api/worker) Fly.io 배포
- 전체 관측성 세팅 (Grafana Cloud, OpenTelemetry)
In scope¶
Identity & Auth¶
- Discord OAuth2 로그인
- 세션 관리 (Redis)
- 로그인 / 로그아웃 / 세션 만료
Guild¶
- 봇 설치 시 Guild 등록
- 봇 강퇴 감지 및 처리
- Owner 변경 추적
Member¶
- 웹 조인 플로우 (
join.umbra.ink/{slug}) - OAuth2 콜백 → 멤버 DB 저장
- 자동 역할 부여
-
guilds.joinAPI 로 Discord 가입 처리
Licensing¶
- Free Plan 자동 생성 (봇 설치 시)
- Pro / Enterprise Plan 정의
- Feature gating 중앙 권한 체크
- Plan upgrade / downgrade 즉시 반영 또는 period_end 적용
Billing¶
- Toss 빌링키 발급 (위젯 → 서버)
- 빌링키 AES-256-GCM 암호화 저장
- 첫 결제 흐름 (Pro 구독 시작)
- 정기 결제 cron + ±15분 jitter
- 실패 재시도 (24h/48h/72h → 자동 해지)
- Toss 웹훅 수신 + idempotency
- 사용자 해지 요청 (period_end 까지 유지)
Recovery: Preserve¶
- Live Sync 배치 처리 (Discord 이벤트 → DB)
- 수동 스냅샷 생성 (슬래시 커맨드 + 대시보드)
- 자동 스냅샷 (일별 cron)
- 스냅샷 retention 정책 (Plan 별)
Recovery: Restore¶
- 복구 실행 (Temporal workflow)
- Sync mode (Git reset 스타일)
- 카테고리별 선택 (Roles / Channels / Permission Overrides / Guild Settings)
- diff 미리보기 UI
- Pre-restore 스냅샷 자동 생성 (옵션)
- 복구 진행 상황 실시간 조회
Recovery: Protect (Anti-Nuke)¶
- 4가지 감지 패턴 (mass role/channel delete, mass kick, permission escalation)
- 감지 시 자동 스냅샷
- Owner 에게 Discord DM 알림
- 감사 채널 알림
- Enterprise: 가해자 권한 자동 박탈 (opt-in)
Notification¶
- Discord DM 발송
- 감사 채널 알림
- 결제 관련 알림 (성공, 실패, 해지)
Audit¶
- 도메인 이벤트 전체 기록
- Umbra 대시보드에서 감사 로그 조회
Dashboard (apps/web)¶
- 홈 (구독 현황, Guild 목록)
- Subscription 관리 (시작, 변경, 해지)
- Snapshot 목록 및 상세
- Restore 실행 플로우
- Audit log 조회
- 결제 내역
Infrastructure¶
- Fly.io nrt 에 3 프로세스 배포
- Vercel 에 web 배포
- Cloudflare DNS (umbra.ink 서브도메인)
- Neon PostgreSQL (schema per domain)
- Upstash Redis
- Self-hosted Temporal (Neon 공유)
- Grafana Cloud 관측성 (OTel)
- GitHub Actions CI/CD
Documentation¶
- docs/ 전체 (overview, architecture, domain, data, flows, guides, adr, roadmap)
- 사용자 가이드 (umbra.ink/docs)
- 개인정보 처리방침 및 이용약관
Out of scope¶
Phase 2 이상으로 연기하는 항목:
- 메시지 본문 백업/복구 — ADR-0027 에 의해 영구 제외 원칙
- Member 자동 복원 — 수동 단위 복원만 MVP, 자동은 Phase 2
- Merge mode 복구 — Sync 만 MVP
- 다국어 UI — 한국어만 MVP (영어는 Phase 2)
- Discord 외 플랫폼 — Slack, Matrix 등 미지원
- Open API (외부 개발자용) — Phase 2+ 검토
- 고급 Anti-Nuke 감지 패턴 — 4개 패턴 외 추가는 Phase 2
- 길드 샤딩 — 2,500 길드 이하 단일 Bot 운영
- 멀티 리전 — asia-northeast1 전용
- 모바일 앱 — 반응형 웹만
Dependencies¶
MVP 출시 전 선행 필요:
- Luxtra 사업자등록 완료 (대표 이진욱 명의)
- 사업용 통장 개설
- Toss Payments 가맹 승인
umbra.ink도메인 DNS 설정 (app, join, api)- Google Workspace 활성화 (admin@luxtra.dev)
- Discord Developer Portal 에 Umbra Bot 등록
- 개인정보 처리방침 및 이용약관 법률 검토
Success criteria¶
MVP 완료를 판단하는 기준:
- 기능 완결성 — 위 In scope 체크리스트 100% 달성
- End-to-end 테스트 — 가입 → 결제 → 스냅샷 → 복구 → 해지 전체 흐름이 production 에서 작동
- 결제 신뢰성 — 첫 10건 결제 무사고 처리 (재시도 시나리오 포함)
- Recovery 신뢰성 — 첫 3건 실제 복구 성공 (데이터 손실 0)
- 관측성 — 주요 지표(결제 성공률, 복구 완주율, 이벤트 lag)가 대시보드에 노출
- Anti-Nuke 검증 — 테스트 길드에서 4가지 패턴 모두 감지 확인
Risks¶
Toss 가맹 지연¶
- Likelihood — Medium
- Impact — High (결제 없이는 Pro 불가)
- Mitigation — 가맹 절차를 MVP 개발 초기에 병행 시작
Neon / Fly.io 한국 latency¶
- Likelihood — Low
- Impact — Medium
- Mitigation — MVP 전 benchmark 수행, 30ms 이내 유지 확인
Recovery 중 Discord API rate limit¶
- Likelihood — High
- Impact — Medium (복구 지연 발생)
- Mitigation — Temporal Activity 의 retry + backoff, 대형 길드 복구 시간 예고
Anti-Nuke 오탐¶
- Likelihood — Medium
- Impact — High (잘못된 자동 박탈)
- Mitigation — Pro 는 알림만, Enterprise 자동 대응은 opt-in. 감지 로그 수집 후 임계값 튜닝
진욱 Go 학습 곡선¶
- Likelihood — Low (Go 는 luxtra-bot 의 Rust 대비 낮음)
- Impact — Medium
- Mitigation — Pablo 가 Core 도메인 선구현, 진욱은 Supporting 부터 점진 확장
MVP 출시 전 경쟁 출현¶
- Likelihood — Low
- Impact — Medium
- Mitigation — MVP 출시 속도 우선, Anti-Nuke 차별화 강조
Timeline¶
대략적 기간. 정확한 날짜보다 마일스톤 순서와 의존성에 집중.
gantt
title Umbra MVP Timeline
dateFormat YYYY-MM-DD
section Foundation
Repo structure & tooling :2026-04-01, 14d
docs/ 완성 :2026-04-08, 14d
section Backend Core
Identity / Guild / Member :2026-04-15, 21d
Licensing + Billing (Toss) :2026-05-01, 28d
Recovery: Live Sync :2026-05-15, 14d
Recovery: Snapshot :2026-05-22, 14d
Recovery: Restore (Temporal) :2026-06-01, 28d
Recovery: AntiNuke :2026-06-15, 21d
section Frontend
Dashboard shell :2026-05-01, 14d
Subscription flows :2026-05-15, 21d
Snapshot / Restore UI :2026-06-01, 21d
section Operations
CI/CD, Observability :2026-04-22, 21d
Security review :2026-06-22, 14d
Beta testing :2026-07-01, 21d
section Launch
Soft launch :2026-07-22, 7d
Public launch :2026-08-01, 1d
Next phase¶
MVP 완료 후 다음 단계는 Phase 2 — 기능 확장 및 안정화.
- Next —
roadmap/phase-2.md— 메시지 없는 백업의 차별화를 유지하면서 복구 유연성, 다국어, 외부 API 등 확장
See also¶
overview/what-is-umbra.md— 제품 정체성overview/value-proposition.md— 세 기둥 가치 제안roadmap/phase-2.md— 다음 단계 계획roadmap/rust-rewrite.md— 장기 언어 재작성adr/— MVP 관련 설계 결정 전체