13 KiB
13 KiB
12. 메타시스템 — 수상한 잡화점
작성일: 2026-04-17 작성자: 개발팀장 상태: v1 (초판, Phase 0-B 연계 문서) 대상: 세이브/로드 · 진행도 · 상점 · 성장(장비·각성·인장) · 시즌패스 · 탐험 · 출석 관련 문서:
05_서버연동_현황_v1.md,09_카드시스템_아키텍처_v1.md,10_데이터로딩_구조_v1.md,11_UI아키텍처_v1.md
1. 목적 (P18 §결정의 배경)
수상한 잡화점의 비전투(메타) 시스템 전체 계층을 식별하여:
- 전투(08) · 카드(09) · 데이터(10) · UI(11)에 이은 Phase 0-B 최종 완결
- 서버 역할 문서(05·PD 지시 #30·#31)와의 메타 시스템 측 대응표 제공
- 차기 프로젝트 프레임워크
NerdNavis.Save·NerdNavis.EconomyTier 2 설계에 필요한 실증 패턴 공급 - 기획 밸런싱·유저 경험 변경 시 영향 범위 식별 SOT
2. 메타시스템 전체 맵
메타시스템 = "전투 외 유저 진행·성장·경제 시스템"
┌─────────────────────────────────────────────────────────────┐
│ 클라이언트 로컬 상태 (Assets/Script/Info/) │
│ ├── ActorInfo — 캐릭터·영웅 상태 │
│ ├── InGameInfo — 인게임 진행 상태 │
│ ├── InappInfo — 인앱 결제 영수증·트랜잭션 │
│ ├── OptionInfo — 유저 옵션(사운드·언어·그래픽) │
│ ├── TitleInfo — 타이틀·공지 │
│ ├── ADInfo — 광고 상태 │
│ ├── SoundInfo, WebViewInfo, UtilInfo, Popup, NetWait │
│ └── (*.Info 단일 데이터 클래스 + 매니저 스타일) │
└─────────────────────────────────────────────────────────────┘
↕ (마스터 테이블 조회, 10 문서)
┌─────────────────────────────────────────────────────────────┐
│ 서버 연동 (Assets/Script/Server/) │
│ ├── ServerClass.cs — 서버 응답/요청 DTO │
│ ├── ServerInfo.cs — 서버 상태·세션 관리 │
│ └── (PlayFab 전제, 05 문서 및 서버 지시서 v1.1/v1.2 참조) │
└─────────────────────────────────────────────────────────────┘
↕ (UI 표시, 11 문서)
┌─────────────────────────────────────────────────────────────┐
│ UI 계층 (Assets/Script/UGUI/Lobby/) │
│ └── 본 문서 §4 각 시스템별 UI 매핑 │
└─────────────────────────────────────────────────────────────┘
3. 세이브/로드 구조
3-1. 현 구조 (PlayFab 중심)
- 원본: PlayFab(
UserData/TitleData/PlayerStatistics) — 서버 지시서 v1.1 §4·§5 기준 - 로컬 캐시:
Info/*.Info각 클래스 내부에 필드 보존 + 필요 시PlayerPrefs부분 저장(옵션·로컬 전용) - 인코딩: JSON(PlayFab 기본 직렬화) +
My/CryptoUtil.cs적용분은 일부 (세이브 전반 체계화 안 됨)
3-2. 약점·리스크
- SOT 분리 모호 —
*.Info클래스가 "런타임 상태 + 저장 대상" 이중 역할 - 세이브 스키마 버전 관리 부재 — 필드 추가/제거 시 마이그레이션 전략 없음
- 로컬/서버 동기화 타이밍이 호출부에 산재 — 조회 시마다 서버 호출 or 캐시 사용 판단 분산
3-3. Tier 2 NerdNavis.Save 설계 반영 포인트
ISaveProvider인터페이스 (PlayerPrefs / JSON / 암호화 / 클라우드)- 버전 마이그레이션 훅(
IMigration) 신설 - 세이브 대상 POCO와 런타임 상태 클래스 분리 (DTO 패턴)
4. 진행도 · 성장 · 경제 시스템 (영역별)
4-1. 영웅·카드·장비·각성·인장 (성장)
| 시스템 | 클라 코드 위치 | UI 클러스터 | 마스터 테이블 |
|---|---|---|---|
| 영웅 (Hero) | Info/ActorInfo.cs + 스킬·스펙 서브 |
Lobby/MainMenu/1_Hero/ |
Hero, Skill, HeroSkill |
| 카드 (Card) | 09 문서 런타임 모듈 + Info/ |
Lobby/MainMenu/2_Card/ |
Card, CardEffect |
| 장비 (Equipment) | Info/·CatTrade 관련 |
Lobby/MainMenu/3_Equipment/·Lobby/CatTrade/CatTradeUI_Equipment.cs |
Equipment, EquipmentOption |
| 미션 (Mission) | Info/·CatTradeUI_MainMission |
Lobby/MainMenu/4_Mission/·Lobby/CatTrade/CatTradeUI_MainMission.cs |
Mission, MissionReward |
| 인장 (Seal) | CatTrade Seal 서브 | Lobby/CatTrade/CatTradeUI_Seal.cs·GetSealUI.cs·SealRoulleteCard.cs·SealSlotScroller.cs |
Seal, SealOption |
4-2. 상점 (CatTrade — 고양이 상인)
- 구조: 단일 상인이 5개 카테고리(재화·장비·인장·메인 미션 + 공통 Goods) 통합 제공
- UI 클러스터:
Lobby/CatTrade/11개 스크립트 (로비 최대 클러스터, 11 문서 §6-2 참조) - 특수 로직:
- 인장 룰렛(
SealRoulleteCard·SealSlotScroller): 슬롯머신 연출 — 확률 기반 획득 - 장비 구매 팝업(
CatTradeEquipmentBuyPopup) + 기존 보유 장비 비교(EquipmentTradeInvenCard)
- 인장 룰렛(
4-3. 탐험 (Explore — 스테이지 선택)
- 구조: 맵 → 스테이지 노드 선택 → 전투 진입 or 이벤트
- UI 클러스터:
Lobby/Explore/7개 스크립트 (11 문서 §6-3) - 저장 대상:
- 현재 탐험 지도 ID·해제된 노드
- 각 노드 클리어 여부·최고 스코어(3성 조건 달성)
- 탐험 보상 수령 이력
- P17 연계: 스테이지별 ★ 조건 배치는 마스터 테이블(기획팀
Stage·StarCondition)에서 읽어ExploreUI_StageSelect에 표시
4-4. 시즌 패스
- UI:
Lobby/SeasonPass/SeasonPassUI.cs·SeasonPassCard.cs - 저장 대상: 현재 시즌 ID·시즌 진행도 경험치·무료/유료 트랙별 수령 레벨
- 서버 동기화 필요: 시즌 교체·유료 트랙 결제 영수증 (PlayFab)
4-5. 출석
- UI:
Lobby/Attandance/AttandanceUI.cs·AttandanceCard.cs - 저장 대상: 현재 월/회차·연속 출석일·수령 이력
- 서버 시간 의존: 날짜 조작 방지 위해 서버 시간 기준 (서버 지시서 §3 참고)
5. 재화·경제 시스템
5-1. 재화 종류
- 수상한 잡화점은 복수 재화 체계 (골드·다이아·이벤트 화폐·카드 조각 등)
- 현 구조:
Info/*.Info내 변수 + 마스터 테이블Goods·Currency참조 추정 - 표시 UI:
Lobby/LobbyTopUI.cs+Lobby/MoneyCard.cs+ 인게임IngameTopUI.cs
5-2. 획득 경로
- 전투 클리어(
Ingame/Result/StageClearRewards) - 탐험 보상(
Lobby/Explore/ExploreRewardPopup) - 상점 구매(
Lobby/CatTrade/MerchantBuyPopup포함) - 인앱 결제(
Info/InappInfo.cs+ PlayFab 영수증 검증) - 광고 시청(
Info/ADInfo.cs) - 출석·시즌 패스 보상
5-3. 차기 프로젝트 흡수 (NerdNavis.Economy)
Goods범용 재화 모델 (타입·수량·최대치·오버플로 정책) — 01 설계안 §6-0 기정립- 인벤토리·획득 이벤트 훅(
EventBus연동) - 본 프로젝트 특수 로직(재화 종류·상점 UX)은 흡수 불가 — 프레임워크는 "재화 모델 컨테이너"만 제공
6. 서버 연동 상태 (05 문서 연계)
6-1. 현 서버 범위 (PlayFab)
- 세션/인증 →
ServerInfo.cs - 유저 데이터 로드/저장 →
ServerClass.csDTO 매핑 - 스테이지 결과 기록 →
Save_StageResultAPI (서버 지시서 §6 샘플) - 인앱 영수증 검증 → PlayFab 영수증 검증
6-2. 서버 역할 경계 (서버 지시서 §5·§6)
- 클라 100% 책임: 어뷰징 판정 (
is_abuse_flag만 서버 전송, 경계값 보관·검증 안 함) - 서버 100% 책임: 시간 기반 판정(출석·시즌 만료) · 영수증 검증 · 로그 집계
- 양쪽 책임: 세이브 동기화 (클라 전송 + 서버 검증 최소 필터)
7. 메타시스템 의존성 그래프 (핵심 흐름)
로그인 → Title_Mgr
↓ (서버 인증 → PlayFab)
ServerInfo.Login → *.Info 다중 로드
↓ (마스터 테이블 로드, 10 문서)
DataCheckMgr·AddrResourceMgr
↓
LobbyUIManager.Initialize
├→ LobbyTopUI (재화 표시)
├→ MainMenu (영웅·카드·장비·미션 탭)
├→ CatTrade (상점 진입)
├→ Explore (탐험 진입)
│ ↓ (스테이지 선택)
│ IngameUIManager → 08 전투 FSM
│ ↓ (전투 종료)
│ StageClearRewards → *.Info 갱신 → ServerClass 전송
│ ↓
│ LobbyUIManager 복귀
├→ SeasonPass / Attandance (보상 수령)
└→ Option/WebView 등
8. 기획 연동 포인트 (밸런싱·UX 변경 영향 범위)
| 기획 변경 범주 | 영향 메타 모듈 |
|---|---|
| 재화 밸런스 (획득량·환율) | Info/*.Info 재화 필드 + LobbyTopUI·MoneyCard·IngameTopUI + 상점 UI 전체 |
| 성장 곡선 (장비 레벨·인장 등급) | MainMenu_Equipment·CatTrade Seal 계열 + 마스터 테이블 Equipment·Seal |
| 시즌 패스 트랙 구성 | SeasonPassUI·SeasonPassCard + 서버 시즌 ID 갱신 |
| 출석 보상 트랙 | AttandanceUI·AttandanceCard + 서버 시간 의존 |
| 탐험 맵 구조 (노드·분기) | ExploreUI_Map·ExploreStageCard + 마스터 ExploreMap·Stage |
| 상점 가격·확률 (룰렛 등) | CatTrade* 전체 + 마스터 Shop·Seal |
9. 프레임워크 흡수 계획 (Tier 2 설계 반영)
| 프레임워크 모듈 | 수상한 잡화점 출처 | 흡수 수준 |
|---|---|---|
NerdNavis.Save.ISaveProvider |
현 *.Info + PlayFab 호출 패턴 |
🟡 신규 인터페이스 (기존 구조는 참고만) |
NerdNavis.Save.IMigration |
없음 (부재 자체가 교훈) | 🔴 신규 설계 |
NerdNavis.Economy.Goods |
MoneyCard·재화 Info 필드 |
🟢 구조 계승, 네이밍만 변경 |
NerdNavis.Economy.Inventory |
장비·인장·카드 목록 패턴 | 🟡 범용 컨테이너 추출 |
NerdNavis.Network.IReceiptVerifier |
Info/InappInfo.cs + PlayFab 영수증 |
🟡 Tier 3 편입 (서버팀 합류 시점) |
10. 현 프로젝트에서의 차기 개선 안건 (차기 프로젝트 참고 자료)
헌법 제1원칙 목표 2 원칙 B: 수상한 잡화점 인사이트를 차기 프로젝트 참고 자료로.
*.Info단일 클래스에 "런타임 상태 + 직렬화 대상 + 서버 통신 DTO"를 모두 담는 구조는 차기 프로젝트에서 반드시 분리 (DTO + 상태 + 리포지토리 3계층)- 세이브 버전 관리 부재 → 차기 프로젝트
IMigration훅 필수 - 서버/클라 동기화 타이밍이 호출부에 분산 → 차기 프로젝트는 중앙 동기화 매니저 도입
- 재화 종류가 하드코딩(필드 단위) → 차기 프로젝트는
Goods범용 모델 + 타입 enum 기반 Dictionary 저장
11. 검증 방법 (P18 §검증)
- 각 Info/Server/UGUI 파일 경로는 실제 Unity 프로젝트에서 실존 확인 완료 (작성 시
ls+find실측) find기반으로PlayFab·SaveData·UserData키워드를 검색한 결과는ServerClass.cs·ServerInfo.cs·Info/6개 파일로 집중됨 — 본 문서 §2 구조와 일치- 마스터 테이블 이름은 10 문서(데이터 로딩) 및 서버 지시서 §6 샘플을 교차 참조하여 추정 (기획팀 테이블 정의 재확인 필요 표시)
12. 기각안 (P24 §기각안)
- 기각안 A: 각 Info 클래스의 필드별 세이브 대상 분류표 작성 — 토큰 비용 + 프레임워크 흡수 대비 정보량 과다. 구조 수준 분류로 대체. 필요 시 Phase 0-C에서 세부 감사
- 기각안 B: 서버 API 전수 매핑 — 서버 지시서 v1.1/v1.2가 별도 SOT로 존재. 본 문서는 클라 메타 구조에 집중
- 기각안 C: 메타시스템 보안 취약점 감사 —
05_서버연동_현황_v1.mdCritical 3건이 이미 추적 중(#2 보류). 본 문서는 중복 분석 안 함
부록 A. 변경 이력
- v1 (2026-04-17): 초판. 개발팀장 Phase 0-B 최종 완결 작업(B-5)으로 작성. Unity 프로젝트
Assets/Script/전수ls+ 키워드find실측 기반. 서버 지시서 v1.1/v1.2·05 문서·09·10·11 문서 교차 참조.