BurningTimesAi/프로젝트/수상한잡화점/개발/02_개발자관점_점검_v1.md

14 KiB
Raw Blame History

수상한 잡화점 — 개발자 관점 점검

작성일: 2026-04-14 목적: 기획실 인수 내용에 대해 개발자 관점(C11)에서 보완/추가 확인이 필요한 사항 도출 판단 기준: 자원 효율성 / 코드 구조 직관성 / 코드 범용성


📌 발견 요약

기획실은 게임 수치·밸런싱 관점에서 프로젝트를 완전히 파악했으나, 코드·아키텍처 관점의 공백이 존재한다. 개발실이 추가로 확인·보완해야 할 항목은 아래 12개다.

우선순위: 🔴 즉시 필요 / 🟡 Phase 3 착수 전 / 🟢 상시 점검


1. 시뮬레이터 이원화 문제 🔴🟡 해소 착수

업데이트 (2026-04-14): PD님 지시로 기획실 Phase 3 HOLD 되었으며, 본 이슈 해소를 최우선 작업으로 착수. 상세 계획: 07_시뮬레이터_이원화_해소_착수계획_v1.md (→ 2026-04-17 아카이브됨, Unity MCP 전환 / 시뮬레이터/01_아키텍처_v1 참조)

현황

  • 기획실은 Python으로 3개 시뮬레이터 구현 (battle_sim.py, full_stage_sim.py, stage_sim_v2.py)
  • Unity에는 C#으로 실제 전투 로직이 구현되어 있을 것으로 추정 (미확인)
  • Python 시뮬과 Unity C# 구현이 별개로 존재 → 이원화 리스크

개발자 관점 문제

  • [자원 효율성] 동일 로직을 두 언어로 유지 = 유지비 2배, 괴리 발생 시 밸런싱 신뢰도 붕괴
  • [코드 직관성] 기획이 시뮬 수정 → 개발이 Unity 수정 → 재시뮬 검증 → 괴리 발견의 무한 루프 위험
  • [범용성] 다른 프로젝트에도 이 문제 반복 발생

권장 조치

  • Option A: Unity 전투 코드를 Headless로 추출 → CLI에서 dotnet 실행 → 시뮬레이터를 C#으로 일원화
  • Option B: Python 시뮬을 "참조 구현"으로 두고 Unity와 자동 동기화 검증 테스트 작성
  • 담당: /게임플레이 + /qa 합동

2. 데이터 테이블 로딩·캐싱 구조 🟡

확인 필요 항목

  • 76개 JSON을 언제·어디서 로드하는가? (앱 시작 / 씬 진입 / 필요 시)
  • Addressable 사용 중인가, Resources.Load인가, StreamingAssets인가?
  • 메모리 상주 크기 총합은?
  • 핫 리로드(기획 수치 변경 시 재빌드 없이 반영) 가능한가?

개발자 관점 문제

  • [자원 효율성] 76개 전부 메모리 상주 시 저사양 기기 이슈 가능
  • [코드 직관성] 테이블 조회 API가 일관된 패턴인가 (TableManager.Get<CardData>(id) 같은 통일 인터페이스)
  • [범용성] 이 로딩 시스템이 BurningTimesCore에 있는가, 프로젝트 코드에 있는가? → 후자라면 범용화 필요

담당

  • /클라이언트팀장 (구조 파악)
  • /최적화 (메모리 측정)

3. 카드 효과 311장 구현 방식 🔴

확인 필요 항목

  • 311장이 데이터 드리븐 (효과 타입 enum + 파라미터)인가, 카드별 개별 스크립트인가?
  • e_CardTypeenum인지 string key인지
  • 시너지 계산(처치 시 경험치 추가 × 경험치 비례 데미지 보너스 같은 상호작용)이 어떻게 구현되어 있는가?
  • 신규 카드 추가 시 코드 수정 필요 여부

개발자 관점 문제

  • [코드 직관성] 카드별 스크립트 311개는 유지보수 불가능 수준 → 데이터 드리븐 강제
  • [범용성] 카드 효과 시스템이 다음 덱빌딩 프로젝트에 재활용 가능한 범용 모듈이 되어야 함
  • [자원 효율성] 시너지 체크를 매 프레임 계산하면 GC·CPU 오버헤드 → 이벤트 기반 구조 필요

핵심 판단 질의

"신규 카드 추가가 JSON 한 줄 수정으로 끝나는가?" 이 질문의 답이 "아니오"면 아키텍처 리팩토링 대상

담당

  • /게임플레이 (구현 방식 파악)
  • /클라이언트팀장 (범용성 리뷰)

4. 터치 방어 / 회피 메커닉의 SOT 불일치 🔴

현황

  • 기획문서: "다음 공격 1회 피해 50% 감소" — 쿨다운 미확인
  • Python 시뮬: 단순 50% 감소로 구현
  • Unity 실제 코드: 미확인

개발자 관점 문제

  • [코드 직관성] 기획-시뮬-실코드 3자가 다른 동작 → 버그의 온상
  • 메커닉 SOT는 "실제 Unity 코드"여야 함 — 기획·시뮬은 이를 참조해야 함

권장 조치

  1. /게임플레이가 실제 Unity 구현을 읽고 정확한 동작 문서화
  2. 해당 문서를 기획실에 전달 (공유/개발실→기획실/)
  3. Python 시뮬을 실제 동작에 맞춰 동기화

5. 결정론 / 재현성 (시뮬레이터 신뢰도) 🟡

확인 필요 항목

  • 전투 로직에 랜덤(회피, 치명타, 드롭) 사용
  • 시뮬이 동일 시드로 동일 결과를 내는가?
  • Unity 실제 게임도 재현 가능한 시드 시스템이 있는가?

개발자 관점 문제

  • [코드 직관성] 재현 불가능한 버그는 디버깅 지옥
  • [QA 자동화] 시드 기반 리플레이 없으면 회귀 테스트 자동화 불가

담당

  • /게임플레이 + /qa

6. BurningTimesCore 범용 라이브러리 내용 파악 🟡

확인 필요 항목

  • BurningTimesCore.Runtime.csproj, BurningTimesCore.Editor.csproj 존재 확인됨
  • 이 코어에 무엇이 들어있는가? (UI 프레임워크, 데이터 테이블, 네트워크, 세이브 시스템 등)
  • 수상한 잡화점 코드와 명확히 분리되어 있는가?

개발자 관점 문제

  • [범용성] 코어가 명확히 분리되면 다음 프로젝트에서 그대로 재활용 가능 → 개발 가속
  • [코드 직관성] 코어에 프로젝트 특수 로직이 섞이면 코어 오염

판단 포인트

"이번에 만드는 덱빌딩 시스템의 어느 레벨까지가 코어(다음 프로젝트 재활용)이고, 어느 레벨부터가 프로젝트 전용인가?"

담당

  • /개발실장 (경계 설계)
  • /클라이언트팀장 + /서버팀장 (현황 조사)

7. PlayFab / Firebase 서버 연동 범위 🟡

확인 필요 항목

  • PlayFab.csproj 존재 — 어디까지 PlayFab이 처리하는가? (인증, 클라우드스크립트, 리더보드, 경제, 결제)
  • Firebase 용도 (Analytics? Crashlytics? Remote Config?)
  • 서버 권위로 처리되는 로직 vs 클라이언트 권위 로직 경계

개발자 관점 문제

  • [치트 방지] 인게임 결과가 클라 계산이면 해킹 가능 → 서버 권위 필요 영역 식별
  • [자원 효율성] 모든 액션을 서버로 보내면 통신 폭증 → 배치 전략 필요
  • [범용성] PlayFab/Firebase 의존도가 지나치면 서비스 이전 시 락인

담당

  • /서버팀장 (아키텍처 파악)
  • /백엔드 (연동 포인트 파악)

8. 저장 데이터 / 세이브 구조 🟡

확인 필요 항목

  • 런 진행 상태 저장 방식 (인게임 도중 저장/복구 되는가?)
  • 아웃게임 성장 데이터 저장 위치 (로컬 PlayerPrefs? PlayFab 서버?)
  • 치트 방지를 위한 암호화 / 서명 여부
  • 데이터 마이그레이션 전략 (구버전 세이브 → 신버전 호환)

담당

  • /서버팀장 (세이브 전략)
  • /db (데이터 구조)

9. 모바일 성능 예산 미설정 🟢

현황

  • 기획은 "노드 클리어 ≤30초" 같은 게임 템포 예산만 정의
  • 기술 예산(프레임레이트 목표, 메모리 상한, 드로우콜 한계, 빌드 사이즈 상한) 미정의

개발자 관점 문제

  • [자원 효율성] 예산 없으면 최적화 기준 없음 → "일단 만들고 나중에 최적화" 안티패턴

권장

  • /최적화가 타겟 디바이스별 성능 예산 수립
  • 예: 저사양(Galaxy S10): 30fps / 중사양(S22): 60fps / 메모리 1.5GB 상한 / 드로우콜 100 이하

담당

  • /최적화 + /개발실장

10. 데이터 테이블 무결성 검증 자동화 🟢

현황

  • 기획실 G-5에 "FK 무결성 검증, 스탯 범위 이상 탐지" 요청 언급됨
  • 76개 테이블 간 참조 무결성(MonsterID, CardID, RewardID 등) 검증 도구 필요

개발자 관점 판단

  • [코드 범용성] 이 검증 시스템은 모든 프로젝트 공통 필요 기능BurningTimesCore에 범용 툴로 넣을 것
  • [자원 효율성] CI/CD에 자동 연결되면 기획 데이터 실수 조기 차단

담당

  • /qa (검증 규칙 정의)
  • /devops (CI 연동)
  • 범용화 판단: /클라이언트팀장

11. VFX / 이펙트 범용성 🟢

확인 필요 항목

  • 신성 / 번개 / 치명타 / 시체 폭발 등 카드 효과별 VFX가 카드 효과 시스템과 결합되어 있는가, 파라미터로 분리되어 있는가?
  • 새 카드 추가 시 VFX 새로 만들어야 하는가, 기존 VFX를 파라미터로 커스터마이즈 가능한가?

개발자 관점 문제

  • [범용성] VFX가 파라미터화되면 다음 프로젝트 재활용 + 신규 카드 생산성 증대
  • [자원 효율성] 중복 VFX가 텍스처·메모리 낭비

담당

  • /테크아트

12. 빌드 파이프라인 / CI 현황 🟢

확인 필요 항목

  • Unity Cloud Build / Jenkins / GitHub Actions 중 어떤 CI 사용 중?
  • Android/iOS 빌드 자동화 수준
  • 데이터 테이블 빌드 자동화 (xlsx → JSON 변환 자동화 여부)
  • 테스트 빌드 배포 경로 (TestFlight, Internal Testing 등)

담당

  • /devops

📋 개발실 Phase 0 작업 제안 (선행 숙지)

기획실의 Phase 3 작업(성장 요소 기여도)이 시작되기 전에 개발실이 완료해야 할 숙지 작업:

Phase 0-A: 코드 전반 매핑 (3 영역 병렬)

작업 담당 산출물
Unity 프로젝트 구조 · 어셈블리 의존성 파악 /클라이언트팀장 03_Unity프로젝트_구조.md
BurningTimesCore vs 프로젝트 코드 경계 파악 /개발실장 04_코어_범용성_분석.md
서버 연동 포인트 (PlayFab·Firebase) 파악 /서버팀장 05_서버연동_현황.md

Phase 0-B: 핵심 로직 검증 (🔴 우선순위)

작업 담당 산출물
전투 시스템 코드 리뷰 + 터치방어·회피 SOT 확정 /게임플레이 06_전투시스템_SOT.md
카드 효과 311장 구현 방식 파악 /게임플레이 07_카드시스템_아키텍처.md
데이터 테이블 로딩·캐싱 구조 파악 /클라이언트팀장 08_데이터로딩_구조.md

Phase 0-C: 기획 요청 사전 대응

작업 담당 산출물
기획실 Q-P1/P2/P3 질문에 대한 답변 준비 /게임플레이 공유/개발실→기획실/ 응답서
시뮬레이터 일원화 방안 수립 /게임플레이 + /qa 09_시뮬레이터_전략.md

📚 교훈 기록 (개발실 로컬)

작성 시점: 2026-04-14 (PD님 지시로 P18 신설과 연계)

L-1. 설계 문서 누락 재발 방지

  • 발생 사실: 본 문서에서 06_신규코어_설계안_v1.md를 참조하였으나 실제 파일이 부재한 상태로 존재 (05_서버연동_현황_v1.md도 동일 참조 보유)
  • 원인: 설계 결정사항(기존 BurningTimesCore 소유권 전환 → 신규 코어 제작 결정)을 참조 표기만 하고 본문 작성 누락
  • 재발 방지 조치:
    1. 공통 규칙 P18 (설계 문서화 의무) 신설됨 — 참조된 설계 문서는 반드시 실제 존재
    2. 문서 간 참조 링크가 추가될 때 해당 파일의 존재 여부를 즉시 확인하는 습관 정착
    3. 설계 결정사항은 회의록·구두·요약이 아닌 전용 설계 문서로 반드시 명문화
    4. 팀장급은 자기 팀 산출물의 교차 참조 무결성을 주기적으로 점검
  • 연관: 06_신규코어_설계안_v1.md (본 교훈을 계기로 작성됨), 공통 규칙 §교훈 [2026-04-14] 항목

L-2. 시뮬레이터 이원화 해소 착수 (Phase 3 HOLD 해제 조건)

  • 발생 맥락: 본 문서 §1에서 지적한 Python·C# 이원화 상태가 기획실 Phase 3 (성장 요소 기여도 설정) 착수를 막는 블로커로 승격
  • 조치: 07_시뮬레이터_이원화_해소_착수계획_v1.md 작성하여 Unity C# 로직 Headless 추출 방향으로 일원화 추진
  • 교훈: 이원화는 초기에 차단해야 한다 — 누적되면 밸런싱 신뢰도 붕괴 + 유지비 2배 + 불일치 조용히 축적. C11 관점에서 "동일 로직 이중 유지"는 자원 효율성·직관성·범용성 모두 위배

💡 개발자 관점에서의 최종 판단

기획실이 제공한 정보는 수치·밸런싱 레벨에서는 훌륭하나, 개발팀이 실제 작업에 착수하기 위해서는 코드 아키텍처 정보가 턱없이 부족합니다.

지금 당장 기획 요청(Phase 3) 업무를 받아도 제대로 처리할 수 없는 상태이며, 위 Phase 0 작업(특히 🔴 항목)을 선행 완료해야 합니다.

또한 C11에 따라 개발실은 다음 원칙을 유지합니다:

  • 시뮬레이터 일원화 — 동일 로직 이중 유지 거부
  • 카드 시스템 데이터 드리븐 강제 — 카드당 스크립트 금지
  • 코어 분리 — BurningTimesCore에 들어갈 범용 기능과 수상한 잡화점 전용 로직 명확히 구분
  • 성능 예산 먼저 — "일단 만들고 나중에 최적화" 금지

이상이 개발자 관점의 점검 결과입니다.