본문 바로가기
Projects (개인)

StayVista

Links

2025~Present. 숙소/티켓/체험/패키지를 단일 예약 도메인으로 통합하고, 검색·지도·AI 컨시어지까지 연결한 OTA 아키텍처 설계/구현 프로젝트.

Tech Stack

  • Kotlin
  • Spring Boot 4
  • React (Vite)
  • MySQL
  • Redis
  • Kafka
  • OpenSearch
  • Ollama (Local LLM)
  • MapLibre
  • Saga Orchestration
  • Idempotency + Outbox
  • Micrometer
  • Prometheus
  • Grafana
  • k6

Overview

  • 통합 OTA 시나리오에서 예약 정합성(hold/confirm/cancel), 검색 성능, AI 추천 실행성을 한 시스템으로 구현
  • 숙소/티켓/패키지 구매 플로우를 동일한 인증·멱등성·에러 계약으로 통합
  • 최근 반영: 예약 세션 preflight(GET /v1/me/session), hold 재사용/만료 hold 즉시정리, AI copilot orchestrator 및 위젯 관측성 확장

Architecture

  • 단일 Spring Boot API 내 도메인 모듈(booking, ticket, package, search, poi, chat, promotion, auth) 구조
  • 재고 차감은 조건부 UPDATE 기반 원자 처리, DB 재시도(Deadlock/Lock wait) 정책 내장
  • 패키지 구매는 Saga 오케스트레이션으로 하위 도메인 호출 + 실패 시 보상(booking cancel) 처리
  • idempotency_recordoutbox_event를 트랜잭션 경계에 결합해 재시도 안전성과 비동기 확장성 확보

Data Flow

  • Search Path: Autocomplete(Redis/OpenSearch/DB fallback) → Property Search(OpenSearch + DB fallback) → Facets/Price Calendar/FX
  • Booking Path: Session Probe → Hold(조건부 UPDATE + Idempotency) → Payment Stub/Auth → Confirm or Cancel
  • Event Path: Domain Write + Outbox → Outbox Relay → Kafka Publish + Search Index Sync
  • AI Path: Concierge Widget → Copilot Orchestrator(search/price/availability tools) → Action(apply_filters, open_property, retry_with_patch) → Telemetry Ingest

Ops

  • 트래픽 보호: Redis rate limit + bot strict policy + Queue token gate(선택)
  • 핵심 지표: booking_overbooked_total, booking_hold_reused_total, auth_guard_reject_total, AI handoff/clarify/widget funnel metrics
  • SLO 기준: Search p95<250ms/p99<800ms, Price Calendar p95<150ms, Booking Confirm p95<400ms, 5xx<0.5%
  • k6 시나리오 기반 성능 회귀 점검(search, autocomplete, price_calendar, full_funnel)

Architecture Diagram

diagram rendering...