서비스와 책임 경계
경계를 통일하되 모든 상태가 같은 저장소에 속한다고 가정하지 마세요.
| 구성 요소 | 책임 |
|---|---|
| Game client | 상호작용, 렌더링, 미리보기 |
| Bridge | 공개 HTTP 인증, 검증, 요청 접수 |
| World | 실시간 월드 시뮬레이션과 세션 상태의 권위 |
| Communicate | 실시간 커뮤니케이션 |
| Internal API | 계약 조회·브로드캐스트의 중앙 접근과 내부 동작 |
| Internal Worker | 백그라운드 작업, outbox 처리, 서명자별 거래 |
| Admin | 운영 입력과 관리 |
요청과 비동기 작업
주요 동기 체인 경로는 client → Bridge → Internal API → Gnoland입니다. 비동기 작업은 DB outbox와 Kafka를 거쳐 Internal Worker, Internal API로 이어집니다. 두 서비스가 같은 의존성에 접근할 수 있다는 이유로 이 책임을 우회하지 마세요.
목적에 따라 나뉘는 저장
PostgreSQL은 영속 게임 기록과 정의를 저장합니다. Redis는 런타임 조정과 체크포인트에 사용됩니다. 청크 저장에는 outbox 처리와 Garage 오브젝트 저장소도 관여합니다. Gno 계약은 자신에게 배정된 체인 상태를 소유합니다.
일반 인벤토리 변경과 트랜잭션에 민감한 동작의 저장 시점은 다릅니다. 클라이언트 애니메이션은 커밋이 아니며 대기열에 들어간 체인 요청은 최종 확정이 아닙니다. 장애 복구 보장은 소유 경계에서 검증해야 합니다.
오류 경계
정규화 계약에 따라 안전한 공개 Problem과 비공개 진단을 분리하세요. 전송 실패, 명령 거부, 앱 오류는 계속 구분합니다.