10 KiB
클라이언트팀장 시행착오 아카이브 v1
조직: BurningTimes (구 NerdNavis 계승) 담당: 클라이언트팀장 대상 원본: 수상한잡화점 (Unity
6000.0.67f1, 외부 레포FilGoodBandits/DeckBuilding) 계승 대상: EerieVillage (Unity6000.3.13f1 LTS, 2D PlatformerMicrogame 템플릿)
1. 개요 — 핵심 교훈 8건
- Unity MCP 편집 = 6단계 표준 불가침:
apply_text_edits/script_apply_edits는 Read-then-Edit 관성 미발생. SHA→Read→백업→commit→편집→검증 - Unity 프로젝트는 외부 git 레포: 조직 레포와 분리. 작업 전
git fetch && git status선행(C30) - 시뮬레이션은 MCP EditMode가 정답: Actor.cs 4,545줄 Headless 추출(07안)을
execute_code+ EditMode로 대체, 이원화 근본 해소 - 핫리로드는 hook 기반
.live/증분 주입:@import·/compact·.claude/rules/는 세션 중 갱신 불가. UserPromptSubmit hook + SHA1 diff만 유효 - CLI 병렬은
--worktree격리: 같은 디렉토리 다중 세션은 덮어쓰기 위험. 연속 작업은 워크트리 강제 - 기획팀 협업 = 실측 교차 검증: 문서-실체 괴리(GameManager.cs 부재·Spine 추가·Res_Addr 확장·xlsm SOT 이중화)는 정기 실측만 감지
- Tool 버그 점검은 "점검만" 집행 분리: 3축 증거 기반 판정. 수정안은 옵션 분리(PD 결정 영역)
- BT.Framework Tier 1 16/16은 차기부터 적용: 수상한잡화점 미도입 확정(P29 원칙 A). 범용 패턴 추출만 수행
2. 시도한 방법·이유·결과·교훈
2-1. Unity MCP 편집 표준 워크플로우 (2026-04-20)
| 시도 | 이유 | 결과 | 교훈 |
|---|---|---|---|
#57 A 실측 후 script_apply_edits 직접 치환 |
PM 프롬프트 "C6-1 백업"은 있었으나 MCP 구체 수단(manage_script read→저장) 미명시 |
편집·검증 정상이나 .bak_* 분리 누락 → C6-1 위반. 복구 3중(보고서·역방향·undo) 실질 손실 0 |
MCP 원자 편집은 Read-then-Edit 관성 미발생. 절차 명문화 불가침 |
| C31-B 본문 수정 직접 집행 검토 | Unity MCP 1회성 원본 변형 대응 | 팀장 재량 밖(C36-2 방향·원칙, PD 선행) → C31-G(feedback 선행 Read)로 흡수 | 방향·원칙 변경은 팀장 재량 금지 |
백업 경로 공유/개발팀_백업/{프로젝트}/{원본명}.bak_{YYYYMMDD_HHMM}.{확장자} |
PC 독립·git 추적·포맷 통일 | 단일 SOT. 긴급 시 git stash push -u |
조직 레포 내 고정. 절대 경로·Unix timestamp 금지 |
2-2. 시뮬레이션 방향 전환 (07 Python 추출 → 11 Unity MCP EditMode)
| 시도 | 이유 | 결과 | 교훈 |
|---|---|---|---|
| 07안: BattleCore 도메인 추출 + netstandard2.1 + dotnet CLI | Python-Unity 결과 불일치 해소 + 엔진 완전 분리 | Actor.cs 4,545줄 리팩터링·재빌드 동기화 부담 | 추출 자체가 근본 아님. 두 구현 유지비 0이 정답 |
11 신안: execute_code(EditMode) 주력 + Batch Mode 보조 |
Editor 내 C# Eval → Actor.cs 실클래스 호출. stub 7종(IRandomSource·IClock·ITickDriver·IBattlePresenter·ITableLoader 등) DI |
08/09/10 SOT 100%·07 60% 재활용. "단일 SOT = Unity 프로젝트 자체" | Unity 전제면 EditMode가 결정론·유지비·접근성 3축 우위 |
| Python vs Unity MCP 5건 교차 검증 후 아카이브 | Phase 3 HOLD 해제 요건 | 비트 단위 일치 확증 후 HOLD 해제 | 방향 전환 시 병행 검증 필수. 즉시 전환 금지 |
2-3. 핫리로드 대안 → .live/ 증분 주입 (C34 승격)
| 시도 | 이유 | 결과 | 교훈 |
|---|---|---|---|
| PD 원안 CLAUDE_LIVE.md 공용 파일 | 세션 중 갱신·참조 | @import·.claude/rules/는 세션 시작 1회(A 불가). SessionStart hook은 재시작 시만(C 부분). UserPromptSubmit hook + SHA1 diff만 유효(B) |
CLAUDE.md 재읽기는 세션 시작//compact/서브디렉토리 접근 시만. 동적 갱신은 hook 외 불가 |
| B+C 혼합: SessionStart 전량 + UserPromptSubmit 변경 감지 | 토큰 최소 + 매 턴 반영 양립 | 변경 없는 턴 0, 변경 시 ~1,200 토큰. 9,500자 이내(10,000자 한도) | C14 실증. 해시 비교가 핵심 |
.live/ 증분 주입 → C34 헌법급 |
worktree 격리로 주입 실패 실증 → 중앙 Junction | 조직 핵심 자산. 설정·규칙·에이전트 9종 대상. PC 내 모든 세션 공유 비용 0 | worktree 경계 끊김은 생존 이슈. 근본 해결(중앙 저장소 + junction) 필수 |
2-4. 콘솔 병렬·하이브리드 구조
| 시도 | 이유 | 결과 | 교훈 |
|---|---|---|---|
| CLI 방법 A(같은 디렉토리) | 간단·독립 세션·독립 MCP | 같은 파일 동시 수정 시 덮어쓰기·git 이력 혼란 | 작업 영역 분리 원칙. 세션별 수정 디렉토리 명시 |
CLI 방법 B(--worktree) |
독립 파일시스템 복사본 + 독립 브랜치 | 충돌 없음. 완료 후 main merge | 동시 수정 가능성 있으면 워크트리 강제 |
| PM에 모든 작업 보고 | C13 완전 준수 | 토큰 폭증·C14 위반·PM 세션 오염 | 이벤트 드리븐. 상태 전환·타 부서 영향·헌법급만 push |
| PM 허브 Agent 호출로 부서 전담 | 단일 세션 단순화 | 컨텍스트 단절 — 영속 대화 컨텍스트 무지 | 연속 작업은 PD님 부서 직접 진입. Agent는 조회·단건 한정 |
2-5. Tool_Left 점검·기획팀 협업·BT.Framework
| 시도 | 이유 | 결과 | 교훈 |
|---|---|---|---|
| Tool_Left #58 3축 점검(호출 경로·직렬화·스키마) | "버그 유무 판정"만 지시 범위 | 3축 정상. 125 스테이지 중 122건(97.6%) 빈 배열은 2026-04-08 스키마 변경 시 수동 복구 미실행 잔재. #57 A 런타임 자동 복구로 해소 | 점검은 점검만. 수정안은 옵션 분리 |
| 기획팀 유니티 교차 검증 | 문서 vs 실체 유효성 | 유효 8·변경 4·확인불가 3. GameManager.cs 부재·Spine 추가·Res_Addr 11개·_Ino.xlsm 오늘 수정 |
정기 실측 필수 |
| BT.Framework Tier 1 16/16 완결 | 차기 조직 자산 | Log·ServiceLocator·CoroutineRunner·MonoSingleton·EventBus·Observable{List,Dict,Queue}·ObjectPool·Factory·DataTable·Attribute3·Util6 + NUnit 28+ | Tier 1은 게임 없이 완결. 2/3은 게임 진행과 축적 |
| 수상한잡화점 Framework 도입 | 자체 코어 사용 중 | P29 원칙 A — 미도입. 범용 패턴 추출만 | 신 프레임워크는 차기 출발 시점이 최적 |
싱글톤 4종 → MonoSingleton<T> + 옵션 |
재작성 기회 중복 해소 | WaitCahe→WaitCache 수정. DG.*→BurningTimes.* |
재작성은 오탈자·중복 통합 기회 |
3. BT 착수 시 체크리스트 (EerieVillage·Unity 6000.3.13f1)
Unity 작업 전 필수: ${UNITY_PROJECT_ROOT} git fetch && git status (C30) · paths.local.json 경로 등록 · MCP Stdio(6400) 연결 · 표준 워크플로우 6단계 준수
Unity MCP 편집 6단계(불가침): (1) get_sha → (2) manage_script(read) → (3) 공유/개발팀_백업/EerieVillage/{원본명}.bak_{YYYYMMDD_HHMM}.{확장자} 저장 → (4) 백업 commit(긴급 시 git stash push -u) → (5) apply_text_edits/script_apply_edits(precondition_sha_256 지정) → (6) SHA 재확인 + refresh_unity + read_console error 0
BT.Framework 도입 배선: manifest.json에 "com.nerdnavis.framework": "<Gitea URL>#<tag>"(C안) · Framework 동시 개발자는 로컬 file:../BT.Framework(H1) · 2D PlatformerMicrogame 템플릿 샘플은 EerieVillage/Samples/ 격리 · EventBus·ObservableList·DataTable·ServiceLocator 4종 출발점 배선(§04)
시뮬레이션: execute_code(EditMode) 주력·07 Python 추출안 재도입 금지 · IRandomSource·IClock·ITickDriver DI · 동일 시드 비트 단위 동일 결과 검증
기획팀 협업 주기 실측: 산출물 참조 경로·파일 실존·최근 수정일 · xlsm SOT 단일화(이중화 시 즉시 문의) · 스크립트·씬·Res_Addr 변동 감지
4. PM 보고 안건
- C31-B 본문 확장 안건 (PD 승인 대기): Unity MCP 1회성 원본 변형 집행을 자기검증 명시 대상 추가. C36-2 (a) 해당·팀장 재량 금지. 현 C31-G로 커버. PM 상정 후 PD 승인 시 C36-3로 반영
- 표준 워크플로우 확장 검토(차후): filesystem·sqlite MCP·외부 레포 직접 편집 적용 여부. 현 시점 Unity MCP 전용 유지. 실증 누적 후 v2·v3 판단
- BT.Framework 차기 도입 경로: C안(UPM Git URL) + H1(로컬 file:) 배선 확정. Gitea 태그 정책·PD NAS Git 접근 방식 최종 확정. 2D PlatformerMicrogame 템플릿과 공존 방식 설계(Samples 격리)
- Editor 상시 기동 의존: EditMode
execute_code는 Unity Editor 기동 + MCP Stdio 전제. 대량 배치(1만+)는 경로 D(BatchMode 병렬) 별도. 재연결 자동화 스크립트 검토 - Unity 전제 정합성: MCP 방향은 Unity 전제 위 재활용 한정. 비-Unity 엔진 이관 시 재추출 필요. EerieVillage·차차기 Unity 전제 PD 재확인 권고
5. 참조 원본 파일 목록
Unity MCP 편집 워크플로우
공유/개발팀_자산/Unity_MCP_편집_표준_워크플로우_v1.md공유/소통/개발팀→PM/2026-04-20_C6-1_재발방지_Unity_MCP_워크플로우.mdmemory/org/feedback_c6_backup_before_edit_violation.md
기술 검토 (2026-04-16~17)
공유/소통/완료/2026-04-16_콘솔병렬실행_기술검토_개발팀.md공유/소통/완료/2026-04-16_핫리로드대안_기술검토_개발팀.md공유/소통/완료/2026-04-16_하이브리드구조_개발실의견.md공유/소통/완료/2026-04-16_유니티프로젝트_점검_기획팀.md공유/소통/완료/2026-04-17_Unity_MCP_시뮬레이션_기술검토_개발팀.md
Tool_Left 점검
공유/소통/개발팀→PM/2026-04-20_Tool_Left_버그유무_점검.md
BT.Framework 설계
프로젝트/코어프레임워크/01_아키텍처_개요_v1.md·03_배포방식_안건_v1.md·04_Tier1_3종_상호작용_설계_v1.md
대화로그: 공유/대화로그/코어프레임워크/2026-04-16.md·2026-04-17.md·2026-04-18.md