---
title: Entity Forge 0.3.0 자동 렌더링 경로와 대량 생명주기 보강
date: 2026-11-03T04:14:14.459Z
version: v1.0.0
status: 검증 대기
state: verification
project: entityforge
type: 수정사항
report_kind: result
category: 수정사항
summary: 자동 프록시의 불필요한 동작 처리와 프레임별 데이터 배열 복사를 분리하고 생성·해제·진단 경로를 추가했습니다.
format: tracefolio-v2
priority: normal
severity: normal
reporter: Codex
assignee: Codex
payload: ../assets/submissions/2026-11-03-result-20261103041414459-v1.0.0.json
---

## 작업 결과

첫 추가 개발 묶음을 0.3.0-preview에 반영했습니다. 자동 프록시는 ForgeMotion 없이 렌더 쿼리에만 참여하며, 동작 쿼리가 비어 있으면 동작 Job/명령 버퍼를 실행하지 않습니다. 렌더 데이터는 지속 버퍼에 모으고 프리팹 엔티티를 일괄 생성·제거합니다. 실제 성능 개선율과 네이티브 실행은 미확인입니다.

## 변경 내용

### 적용 내용

- **자동 렌더링과 ECS 동작 분리**: 프록시 전용 아키타입과 별도 동작 쿼리. 비어 있는 백엔드는 조기 반환합니다. 기존 GameObject 스크립트·물리 동작은 유지합니다.
- **렌더 데이터 준비**: 매 Tick의 ToComponentDataArray 두 개를 제거하고 지속 NativeList와 Burst 속성을 가진 청크 행렬 수집 작업으로 변경했습니다. 버퍼는 최대 수요에 맞춰 커지고 Dispose에서 해제합니다.
- **생성·해제**: 아키타입별 일괄 생성, 일괄 삭제, Entity 조회와 밀집 swap-remove 저장소로 프리팹 자신의 항목을 직접 제거합니다. 삭제된 소스는 정리하고 원래 렌더러를 복원합니다. 재등록·중복 Dispose와 실패 경로도 보강했습니다.
- **중복 처리 억제/폴백**: 정지한 소스의 변환값 쓰기를 생략하고 같은 머티리얼 복사를 Tick당 한 번으로 제한합니다. Transform.hasChanged는 변경하지 않습니다. 인스턴싱 불가 시 자동 대상은 원래 렌더러로, 명시적 엔티티는 개별 DrawMesh로 폴백합니다.
- **진단 추가**: EntityForge.SyncSources / Simulation / RenderGather / Draw Profiler 구간, ForgeBatch.RuntimeStats의 마지막 Tick 처리 카운터, 선택 측정 JSON의 backendStatsAtCapture를 추가했습니다. 카운터는 성능 개선율이 아닙니다.
- **버전/문서/패키지**: 9개 언어 가이드와 개발 아키텍처에 새 경로와 검증 경계를 반영했습니다. 패키지 생성기는 Version.json을 읽고 0.3.0을 별도 고정하며 이전 0.2.0 산출물을 보존합니다.

## 검증

[검증 요약](../assets/runtime-fastpath-20261103/verification.json) · [실제 등록 저장소 테스트](../assets/runtime-fastpath-20261103/registry-tests.txt) · [컴파일 소스 해시](../assets/runtime-fastpath-20261103/compiled-source-hashes.json).

- 7개 어셈블리 C# 컴파일과 현재 소스 해시 대조 통과. 본체 asmdef는 샘플 어셈블리를 참조하지 않습니다.
- 실제 ForgeDenseRegistry 코드를 비GUI .NET에서 실행: 1만 개 추가, 임의 순서 제거, 재등록, 중복 제거, 100회 초기화/재사용 통과. 워밍업 후 10만 회 추가/제거에서 해당 저장소 단독 관리 메모리 할당은 0바이트였습니다. 전체 백엔드/엔진 무할당을 뜻하지 않습니다.
- 첫 정적 검사기의 manager/world.EntityManager 문자열 불일치 실패를 [보존](../assets/runtime-fastpath-20261103/verification-attempt1.txt)하고 검사기를 수정해 재검증했습니다. 제품 소스를 이 실패에 맞춰 변경하지 않았습니다.
- 9개 가이드와 126개 링크 통과. 0.3.0 패키지 402개 에셋 원본/해시 대조 및 이전 산출물 해시 보존 통과. SHA-256: 2ccfbd7d7769dda2590c387203742992142d7fdee08ff37f02b7a3d912d80e9f.
- 원래 렌더러 복원·비활성/재활성·호환성 변경·생성/해제·수명·이동·개별 드로우를 확인할 명시적 ForgeRuntimeFastpathQA.Run을 작성·컴파일했지만 실행하지 않았습니다.

화면 조작, Unity/플레이어 신규 실행, 실제 플레이어 빌드는 하지 않았습니다. 실제 실행 화면 캡처도 사용자 실행 제한으로 미실행이며 가짜 화면으로 대체하지 않았습니다.

## 남은 사항

**제품 출시에 필요한 미완료 검증**: 네이티브 Burst 컴파일/Job safety, 프리팹 및 장면 생명주기, 렌더링·원래 행동 동등성, 인스턴싱 폴백, 최신 패키지 새 프로젝트 설치와 샘플 제거 회귀, 동일 부하의 CPU/GPU 시간·메모리 비교가 필요합니다. 성능 개선 퍼센트는 아직 없습니다. 재사용 버퍼는 최대 용량을 유지하므로 총 메모리가 줄었다고 주장하지 않습니다. 일반 MonoBehaviour의 무컴포넌트 ECS 동작 변환과 Resources/Addressables/AssetBundle 로더는 후속 범위입니다.

교훈 검토: C# 컴파일·순수 저장소 무할당·Burst 속성 존재를 네이티브 실행/전체 성능 검증으로 확대하지 않습니다. 기존 전역 근거/실행 권한 지침과 중복되어 전역 변경 없이 프로젝트 Architecture.md와 메뉴얼에 반영했습니다.

## 작업 시간

- 제안 시간: 첫 개발 묶음 20~40분 · 시작 2026-11-03 12:42:35 KST
- 실제로 완료된 시간: 구현·컴파일·순수 로직·문서·패키지 검사 26분 18초 · 2026-11-03 13:08:53 KST. 공개 기록 배포는 이후 별도 확인.
- XERJ: 실패 — Xerj.ps1 Status에서 XERJ node is not running 확인. rg와 현재 Runtime/DOTS/어셈블리 소스로 대조했습니다.
