🛠 언니네 산지부엌 — 개발자 문서

데이터 계약 · 아키텍처 (원본: docs/api-schema/ — 이 페이지는 원본 파일을 fetch 렌더, 원본 수정 = 자동 동기화) ← 기획서 본문

아키텍처 개요 (OPS_SPEC §3-3·§3-5 요약)

저장 4계층 — "유저가 느리다고 느끼면 안 된다"

L1 클라 로컬 (ETag·낙관적 표시 — 체감 지연 0)
  → L2 Cloudflare CDN (config·번들 — 오리진 요청 소멸)
    → L3 Redis = 운영 상태 주 저장소 (핫패스 완결, p95 <30ms)
      → L4 Aurora = 내구 원본 (원장·돈 경로 동기 + 상태 비동기 반영)

아웃박스 이벤트 파이프라인 (v6.0 — 원자성 보장)

[커밋 요청] → 유저 락(SET NX) → 멱등성 키 확인
  → Lua 원자 실행: 상한 검증(ARGV 주입) + 상태 갱신 + outbox:{userId} XADD
  → 즉답 (ack·corrections·badges)
[릴레이] outbox XREADGROUP → Kinesis PutRecords(재시도) → XACK+트림
  → 컨슈머: Aurora 반영 (30s 코얼레싱 upsert + currency_daily 누적) / S3 보존
장애 시: Redis 유실 → 레플리카 승격(AOF ≤1s) → 최악: 스냅샷+리플레이 (RPO 초 단위)

재화 중복·다중 커밋 방지 4겹 (§3-5 C)

1겹 유저 락 (SET NX PX 500 — 실패 = 즉시 409)
2겹 멱등성 키 (결과 24h 캐시 — 재실행 불가)
3겹 커밋 단조 seq + 버전 CAS (재시도 = 동일 seq·key·payload / 다른 key = 409)
4겹 DB 유니크 제약 (mail_claims·coupon·mission·transaction_id·ssv_nonces)
+사후: 정합성 대사 배치 → 이중 지급 자동 플래그

DB 스키마 · ERD

ERD 관계도

users ──1:N──┬ player_state (1:1)   ┬ inventory        ┬ player_menus
             ├ player_staff          ├ player_interior  ├ player_collections
             ├ mission_progress      ├ attendance       ├ social_progress
             ├ currency_ledger(월파티션) + currency_daily(집계)
             ├ iap_receipts ── ssv_nonces(전역 디듀프)   ├ ad_views(월파티션)
             ├ friends ⇄ (양방향 2행) ├ alba_visits      └ cheat_flags
mail(글로벌 1행) ──lazy──▶ mail_claims(user×mail UNIQUE)
coupons ──▶ coupon_redemptions(user×coupon UNIQUE)
item_catalog ◀─참조─ mail.rewards / coupons.rewards / player_interior
campaigns ◀─연결─ mail·coupons·event_missions·ledger.ref_id
leaderboard_weekly (전역 — user_id 선두 예외 명단)
원본: docs/api-schema/db-schema.md
db-schema.md 로딩…

원장 Reason 코드 (단일 소스: reason-codes.json)

와이어·DB의 reason은 항상 숫자 ID. tier 2 = currency_daily 일 집계 (100·101·102 뿐), 나머지 = 원장 개별 행. ID 불변 — 신규는 JSON에 추가 후 사용.
reason-codes.json 로딩…
이벤트 포맷·타입: 아래 스키마 파일 탭의 events.md 참조

Redis 키 인벤토리

원본: docs/api-schema/redis-keys.md
redis-keys.md 로딩…

API 엔드포인트

원본: docs/api-schema/api-endpoints.md
api-endpoints.md 로딩…

스키마 파일 원문

events.md — 이벤트 계약

로딩…

commit.schema.json — 배치 커밋 (JSON Schema)

로딩…

README.md — 규격 규칙·게이트

로딩…

동기화 규칙

  • 원본 = 레포 docs/api-schema/ — 수정 후 pwsh scripts/deploy-docs.ps1 실행 (api-schema를 site로 복사 + 배포)
  • 이 페이지는 복사된 원본을 fetch 렌더 — 별도 HTML 수정 불필요 (기획서 본문 index.html과 달리 자동 동기)
  • 기획 변경 = GDD 버전업 규칙 그대로 (CLAUDE.md)