ECS (Entity Component System)
객체 지향 설계의 물리적 한계를 극복하기 위해 데이터 중심 설계(Data-Oriented Design)를 도입하여, CPU 캐시 적중률과 수리 병렬성을 극대화하는 신개념 엔진 아키텍처를 다룹니다.
sys.entry
M
Me
hyunyoun's Blog
posts6 min read
1. Overview
엔티티-컴포넌트-시스템(Entity Component System, ECS)은 전통적인 객체 지향(OOP)의 상속 물리 기반 설계를 데이터 흐름 중심의 '조립식 물리학'으로 전환하여, 현대 하드웨어의 성능을 극한으로 끌어올리는 아키텍처 거버넌스입니다.
학습자는 상태 정보만을 담은 컴포넌트를 메모리에 물리적으로 연속 배치하는 SoA(Structure of Arrays) 구조와, 이를 일괄 처리하는 시스템의 수리적 수순을 배옵니다. 특히, CPU가 데이터를 미리 읽어오는 캐시 로컬리티(Cache Locality) 수치를 극대화하여 연산 속도를 물리적으로 수십 배 상향시키는 기제를 익힙니다. 이를 통해 수만 개의 독자적 물리 개체를 성능 저하 없이 실시간 업데이트하는 하이엔드 데이터 엔진 역량을 확보합니다.
2. Scope & Boundaries
In-Scope
- Data-Oriented Design Foundations: 하드웨어 물리 구조에 최적화된 수리 데이터 배치 전략
- Entity Identification Logic: 고유 ID 수치를 통한 컴포넌트 조합 및 물리적 수명 관리
- Archetype & Chunking Physics: 유사한 컴포넌트 뭉치들을 물리적으로 그룹화하여 메모리 탐색 최적화
- System Job Parallelism: 시스템 간의 수리적 의존성을 분석하여 하드웨어 멀티코어에 물리 분산
- Cache Hit Dynamics: L1/L2/L3 캐시 점유 수치를 높이는 수리적 데이터 시퀀스 설계
Out-of-Scope
- 일반적인 비즈니스 로직에서의 관계형 엔터티 매핑 (06-01-XX 영역에서 분담)
- 웹 프런트엔드 컴포넌트 기반 아키텍처 (React 스타일, 14-XX-XX 영역에서 분담)
Boundaries
- ECS vs. OOP: 객체 지향이 '개념적 추상화와 상속'에 집중한다면, ECS는 '하드웨어 물리적 데이터 접근 효율과 수리적 일괄 처리'라는 로우레벨 성능 거버넌스에 집중하여 구분합니다.
3. Counterexample
- 단순히 "상속 대신 컴포넌트 붙이기"라 설명하는 것은 ECS 학습이 아닙니다. 왜 일반적인 객체 배열이 물리적인 **캐시 미스(Cache Miss)**를 유발하여 수리 성능을 갉아먹는지 데이터 포인터 수치로 증명할 수 있어야 하며, 순차적 메모리 접근 수순이 누락된 채 이름만 ECS라 부르는 설계가 왜 하이엔드 성능에 도달하지 못하는지 논증하지 못한다면 데이터 중심 설계의 본질을 이해하지 못한 것입니다.
4. Prerequisites
- Computer Architecture (Basic): 02-01-XX의 CPU 캐시 계층 및 메모리 물리 구조 이해가 필수입니다.
- Data Structures & Algorithms (Recommended): 04-XX-XX의 배열(Array)과 포인터 수리 역학 이해가 권합됩니다.
5. Learning Map
- Cache is King: CPU의 물리적 속도를 따라잡지 못하는 메모리 성능 수치를 극복하는 데이터 배치론을 배웁니다.
- Logic Separation: 상태 수치(컴포넌트)와 연산 물리(시스템)를 물리적으로 완전 격리하는 법을 익힙니다.
- Job System Sync: 수천 개의 수리 연산 단위를 하드웨어 코어 수에 맞춰 물리 분산시키는 스케줄링을 연마합니다.
- Massive Scale Governance: 100,000개 이상의 물리 개체가 동시에 살아 움직이는 하이엔드 복잡계를 실현합니다.
6. Learning Topics
Basic
Core: 데이터 중심 설계의 물리적 근거 (DOD Fundamentals)
- Why to Learn: 현대 CPU 하드웨어는 데이터를 순차적으로 읽을 때 가장 빠른 수리 성능을 내기 때문입니다.
- What to Learn:
- Memory Wall Physics: CPU 연산 수치와 RAM 전송 수치 간의 물리적 괴리
- AOS vs SOA Logic: 객체 구조체()와 하드웨어 최적화 배열 구조() 대조
- Data Locality Principle: 물리적으로 인접한 데이터를 수리적으로 선호하는 기제
- How to Learn:
- 10만 개의 포인트 수치를 무작위 포인터 접근과 순차적 배열 접근으로 각각 연산하며 처리 시간 수치 대조 실습
- L1 Cache size 수치를 확인하고, 데이터 덩어리()를 그 크기에 맞춰 물리 분할하는 기법 연구
- Implement: 데이터 수치들을 물리적으로 연속된 메모리에 재배치하여 성능을 측정하는 기초
Cache_Locality_Tester
Recommended
Core: ECS 3대 요소의 수리적 연동 (Entity-Component-System)
- Why to Learn: 거대하고 복잡한 물리 세계를 데이터 단위로 쪼개어 수리적으로 조립하기 위해서입니다.
- What to Learn:
- Entity ID Governance: 단순 정수 수치로 객체의 물리적 실재를 정의
- Component Storage: 상태 데이터 수치를 물리 유형별로 관리하는 저장소 기하학
- System Lifecycle: 특정 컴포넌트 조합()만을 수리 필터링하여 루프 구동
- How to Learn:
- '위치'와 '속도' 컴포넌트를 가진 엔티티만을 수리적으로 골라내어 물리 이동 시스템을 구현하는 실습
- 엔티티에 컴포넌트를 실시간으로 추가/제거하며, 수리적 메모리 레이아웃이 물리적으로 어떻게 재구성되는지 분석
- Implement: 컴포넌트 타입 수치에 따라 엔티티 목록을 탐색/반환하는
ECS_Query_Engine
Practical
Core: 아키타이프와 청크 관리 (Memory Chunking)
- Why to Learn: 컴포넌트 구성이 동일한 엔티티들을 물리적으로 묶어 수리 탐색 비용을 0에 가깝게 만들기 위해서입니다.
- What to Learn:
- Archetype Mapping: 컴포넌트 수치 조합에 따른 물리 유형 분류 기제
- Chunk Internal Layout: 고정된 물리 크기의 메모리 블록 내 데이터 시퀀스
- Structural Changes Dynamics: 컴포넌트 추가 시 엔티티를 다른 물리 청크로 전이시키는 비용
- How to Learn:
- Sparse Set 기반과 Archetype 기반의 ECS 수리 모델을 비교하며, 물리적 메모리 단편화 수치 대조 실습
- 수천 번의 컴포넌트 전이가 발생할 때 하드웨어 부하 수치를 측정하고 이를 수리 최적화하는 훈련
- Implement: 동일한 수리 구조를 가진 엔티티들을 물리 그룹으로 묶어주는
Archetype_Governance_Module
Advanced
Core: 잡 시스템과 멀티스레드 병렬화 (Job System Physics)
- Why to Learn: ECS의 독립적인 데이터 구조를 활용해 하드웨어의 모든 수리 코어를 물리적으로 100% 활용하기 위함입니다.
- What to Learn:
- Write Hazard Analysis: 동일 수리 데이터에 대한 물리적 동시 접근 충돌 방지
- Dependency Graph Logic: 시스템 간의 선후 관계를 수리 시각화하여 잡 생성
- SIMD Acceleration: 단일 물리 명령으로 여러 수치 데이터를 한 번에 처리(AVX 등)
- How to Learn:
- Job Graph 시뮬레이터를 구동하며, 병렬 물리 실행 시의 수리적 '유휴 스레드()'를 최소화하는 전략 수립 실습
- Profiler View 수치 분석을 통해 하드웨어 코어 간의 물리적 워크로드 밸런싱을 하이엔드로 조정하는 프로젝트
- Implement: 시스템 간의 수리적 의존성을 풀어 병렬 잡 물리 시퀀스를 생성하는
Parallel_Job_Scheduler
7. Terminology
8. References
Primary
- [P1] CS2023 - Computer Architecture - Memory System Hierarchy — Performance foundations.
- [Data-Oriented Design] Richard Fabian — The definitive guide to Dodge/ECS physics.
Secondary
- [Unity: Entities (ECS) Package Documentation] — Practical industrial implementation.
- [Overwatch Gameplay Architecture and Netcode] Blizzard GDC talk — High-end ECS case study.
Industry
- [flecs: A Lightweight ECS for C & C++] — Standardizing low-level ECS rules.
- [EnTT: A Modern C++ ECS] — High-performance industrial library standards.
9. Final Checklist
Primary
- '메모리 정렬()' 수치가 어떻게 CPU의 물리적 '캐시 라인' 인출 효율을 상향시키는지 설명 가능한가? (P1)
- ECS 구조가 '상속()' 기반 설계보다 왜 물리적으로 더 '유연하고 빠른지' 수리적 근거로 논증할 수 있는 가? (P1)
Secondary
- '데이터 캐시 미스' 수치가 하드웨어의 전체 수리 성능을 얼마나 물리적으로 갉아먹는지 소통 가능한가?
- SIMD 명령어를 사용하여 반복적인 수리 연산 물리량을 하드웨어적으로 압축할 수 있는 가?
Industry
- 실무 아키텍처 검수 시, 수만 개의 Dynamic Entity가 하드웨어 점유 수치를 초과하지 않도록 수리 예산안을 제안할 수 있는 가? (SFIA)
- Frame Timeline Audit 수치 분석을 통해 잡 하드웨어 간의 물리적 '레이스 컨디션' 가능성을 수리적으로 진단할 수 있는 가?