← 가이드 목록 T-Taxi · 개발자

아키텍처 검토 & 추천 설계

현행 기술스택·인프라 적절성 + 최적화 + 서버비용 절감 + To-Be 설계. (원본 MD: docs/architecture/architecture-review.md)

!결론 한눈에

현행 스택은 잘 골랐습니다. Cloudflare 엣지 서버리스 + Next.js 정적 + Hono + Drizzle은 이 규모에 매우 적절하고, 초기 기획서의 AWS 설계 대비 월 비용을 이미 1/10~1/40로 절감한 상태.

개선 필요 5가지(우선순위):

P1 🟡DB 단일 서버 SPOF자동 백업 실가동(2026-06-01, 가이드, 복구 리허설 통과). 공용 서버라 추천 B로 보강
P2 ✅DispatchObject DO alarm 30초 vs 운영 300초 불일치해결(2026-06-01): dead DO 확정 후 제거(commit cb459dc)
P3 ✅매분 cron 중복해소: P2에서 DO alarm 제거 → 이 cron이 유일 타임아웃 메커니즘(중복 아님, 그대로 유지)
P4 ✅04-시스템아키텍처.md 불일치완료(2026-06-01): "초기 기획·미채택" 배너 + 본 문서 링크 추가
P5 ⏸️공개 read 캐싱 확대 — 보류(9 users 규모, 조기 최적화. 트래픽 시 진행)
💰 비용 절감 핵심 레버 1개: 자체 DB 서버(고정비+운영부담)를 관리형 서버리스 Postgres 전환 또는 자동 백업·모니터링 강화. Hyperdrive가 연결을 추상화해 전환 마찰이 작음.

1현재 스택 — 적절성

모노레포pnpm 10 + Turborepo 2.5 — ✅
프론트Next 15 정적 export ×3 + React 19 → Pages(무료) — ✅
APIHono 4 on Workers(엣지, 콜드스타트≈0) — ✅
실시간Durable Objects ×4 (WebSocket + alarm) — ✅
DBDrizzle + Postgres 16 + PostGIS — ✅ / Hyperdrive 풀링 — ✅
엣지 데이터KV(캐시·토큰·rate-limit) · R2(업로드) · Queues ×2 +DLQ — ✅
푸시/배치Web Push(VAPID 자체) · flight-poller cron — ✅
품질Biome + Vitest(594 테스트) — ✅

전 레이어 2025~26 최신·일관·TypeScript 단일화. 기술부채성 선택 없음. 규모: API ~73파일, DB ~22테이블(주요 테이블 인덱스 3~5개씩 양호), 마이그레이션 0001~0020.

2토폴로지

[PWA ×3] ─► Cloudflare Pages (정적, 무료)
   ├─ /v1/* ─► ktaxi-api (Hono)
   │            ├─ Hyperdrive ─► (외부) Postgres/PostGIS  ◄ ⚠️P1 단일 서버
   │            ├─ KV CACHE / SHARE_TOKENS   ├─ R2 STORAGE
   │            ├─ Queue → notifications / settlements
   │            └─ Cron * * * * * (sweep)            ◄ ⚠️P3 매분
   ├─ WSS ─► ktaxi-realtime (DO ×4)
   │            └─ DispatchObject alarm 30s          ◄ ⚠️P2 운영 300s와 불일치
   ├─ 큐소비 ─► consumer-notification / -settlement
   └─ cron */5 ─► ktaxi-flight-poller ─► Web Push

3문서 ↔ 실제 괴리 (P4)

04-시스템아키텍처.md초기 기획(미채택)이며 실제와 다름:

모바일Flutter 앱 → 실제 Next.js PWA
APIExpress on EC2 ×2 → 실제 Hono on Workers
실시간WebSocket EC2 → 실제 Durable Objects
DBRDS Multi-AZ + Replica → 실제 자체 Docker PG 1대
캐시/LBElastiCache·CloudFront·ALB → 실제 KV·엣지 내장
월 비용문서 ~$444 → 실측 ~$6~50
→ 04 문서 상단에 "초기 기획(미채택)" 배너 + 본 문서 링크 추가 필요.

4이슈 상세

P1 · DB 단일 서버 (🟡 백업 실가동)
42.127.251.21공용 서버(~20개 컨테이너 공존). 조치(2026-06-01): 호스트 cron이 매일 03:00 one-shot 컨테이너로 pg_dump→age→R2 업로드(14개 보존), netns 127.0.0.1 trust + R2 API토큰. 복구 리허설 통과(스크래치 DB 복원, 행수 일치). 가이드.
잔존: ≤24h RPO. 공용 서버라 비용상 자체 PG 유지(추천 B)가 합리적, HA 필요 시 warm standby.
P2 · 디스패치 타임아웃 불일치 — ✅ 해결(2026-06-01)
조사 결과 dead DO로 확정: env.DISPATCH가 어디서도 인스턴스화 안 됨(.get()/.idFromName() 0건). 실제 디스패치는 api의 dispatch_logs + 300초 cron sweep + WS/Push로 처리되고 DO·alarm은 미실행 잔재였음.
→ DispatchObject 제거 + realtime v4 deleted_classes 마이그레이션(인스턴스 0개라 data-safe). DO 4→3. 594/594 테스트 통과 + prod 배포·smoke 정상.
P3 · 매분 cron — ✅ 해소
원래 DO alarm과 중복으로 봤으나, P2에서 DispatchObject 제거 후 이 * * * * * sweep가 유일한 stale-dispatch 타임아웃 메커니즘 → 중복 아님. 매분 실행도 비용 미미·적정이라 그대로 유지.
P5 · 읽기 캐싱 (Low)
현재 KV 캐시 ~7곳+공개설정 양호. 차량·리뷰·요금 등 read-heavy에 Cache API/KV TTL 확대 → Hyperdrive/DB 부하·지연↓.

5비용 분석 (월, 추정)

Workers Paid$5 — DO·Queues·Cron 사용 → 필수(사실상 하한, 충분히 저렴)
Pages ×3$0 — 정적 무료 무제한
KV/R2/Queues/DO~$0~5 — 저트래픽 포함량 내, R2 egress 0
Hyperdrive$0
자체 DB 서버사실상 $0 — 공용 서버 공유(~20개 컨테이너), ktaxi 한계비용 ≈ 0
합계약 $6~50/월 (옛 기획 $444 대비 1/10~1/40)

가장 큰 절감 대상은 자체 DB 서버 고정비 + 운영 인건비. 나머지는 트래픽 비례 소액.

To-Be

6추천 아키텍처

방향: 현행 Cloudflare-네이티브 유지 + 데이터 계층 신뢰성/비용 개선 + 이벤트화·캐싱·관측성 보강.

데이터 계층 — 2가지 안 (P1 해소)

안 A. 관리형 서버리스 Postgres 전환 (권장)
Neon(PostGIS·브랜칭·PITR·scale-to-zero) 또는 Supabase(PostGIS·일백업). Hyperdrive 앞단이라 connection-string만 교체, 앱 코드 거의 무변경.
효과: 자동 백업·PITR·HA·패치 위임 → 운영부담 제거 + SPOF 해소. 전용 VPS($20~40) 대비 동급 이하(Neon Launch ~$19 / Supabase Pro ~$25).
⚠️ scale-to-zero 콜드스타트 → 실시간 배차엔 warm 티어 권장(Hyperdrive 캐싱이 read 지연 완화). PostGIS 확장·풀러 호환 점검.
안 B. 자체 PG 유지 + 신뢰성 보강(서버가 이미 매몰/무료일 때)
필수: ① 자동 백업 cron(pg_dump → R2 오프사이트) ② 복구 리허설 문서화 ③ 모니터링/알림(디스크·커넥션·헬스) ④ 가능 시 warm standby.
장점: 현금비용 최소 / 단점: HA·운영 여전히 수동.

판단: 유료 전용 VPS면 → 안 A(동급 비용에 백업·HA·무운영). 기존 공용/무료 서버면 → 안 B + 백업 자동화(비협상).

실시간/배치/캐싱

비용 비교 (월, 추정)

현재추천 A추천 B
Workers+엣지$5~10$5~10$5~10
DB$0~40
(백업無)
$19~25
(백업·PITR)
$0~40
+R2백업~$0
운영부담높음낮음중간
SPOF/HA
합계$6~50$24~35$6~50

추천 A는 비슷한 비용으로 백업·PITR·무운영·SPOF 해소(실질 TCO↓). 현금 최소화가 절대 우선+서버 보유 시 추천 B(백업 자동화 필수).

7실행 로드맵

  1. [P1] 자동 백업 + 복구 리허설실가동 완료(2026-06-01, 서버 cron + 복구 리허설 통과)
  2. [P2] DispatchObject 제거 ✅ 완료(commit cb459dc)
  3. [P4] 04 문서 "초기 기획·미채택" 배너 ✅ 완료(2026-06-01)
  4. [P3] cron 조정 ✅ 해소(P2 제거로 불필요)
  5. [P1·결정·여유] 공용 서버라 추천 B 확정. HA 필요 시 warm standby/관리형 PG 재검토
  6. [P5·보류] read 캐싱 — 트래픽 증가 시 데이터 기반(예산 알림만 선택 권장)
DB 전환/이전 실무 절차는 인프라 이전 가이드 Part A(pg_dump/restore + Hyperdrive 재지정)를 그대로 재사용.