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_record와outbox_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...