728x90
반응형
📕오늘의 공부 주제
DOTS(Data-Oriented Technology Stack) 기초
🤔Why?
Unity는 전통적으로 **객체 지향(Object-Oriented)** 방식의 GameObject-Component 구조를 사용해왔습니다. 하지만 대규모 데이터를 빠르게 처리하는 데에는 한계가 있어, **데이터 중심(Data-Oriented)** 설계 방식인 DOTS를 도입했습니다. DOTS를 이해하면 **멀티스레드 성능 극대화**, **메모리 접근 효율 향상**이 가능해집니다.
📖오늘의 공부 내용
1. DOTS란?
DOTS는 Unity의 고성능 게임 개발 프레임워크로, 세 가지 핵심 요소로 구성됩니다.
- ECS (Entity Component System) — 데이터 중심 설계 구조
- Job System — 멀티스레드 작업 관리
- Burst Compiler — 네이티브 수준의 성능 최적화
2. DOTS의 핵심 개념
(1) ECS (Entity Component System)
- Entity: 게임에서 존재하는 최소 단위(고유 ID)
- Component: 순수 데이터 구조체(상태만 가짐)
- System: 컴포넌트를 읽고/변경하는 로직
📌 특징: 데이터와 로직을 분리, 대량 데이터 병렬 처리 최적화
(2) Job System
- Unity가 제공하는 멀티스레드 환경
- 안전한 데이터 접근을 위해 Native Container 사용
- IJob, IJobParallelFor, IJobChunk 등 다양한 인터페이스 제공
(3) Burst Compiler
- C# 코드를 네이티브 머신 코드로 변환
- SIMD(Vectorization) 활용
- CPU 연산 성능을 수배~수십배 향상
3. 기존 OOP 방식과 DOTS 비교
| 구분 | OOP (GameObject) | DOTS (ECS) |
|---|---|---|
| 구조 | 데이터+로직 혼합 | 데이터와 로직 분리 |
| 메모리 접근 | 비연속적(캐시 미스 多) | 연속적(캐시 히트 ↑) |
| 성능 | 단일 스레드 위주 | 멀티스레드 최적화 |
| 확장성 | 직관적, 쉬움 | 초기 러닝 커브 높음 |
4. 간단한 DOTS 예시
using Unity.Entities;
public struct MoveSpeed : IComponentData
{
public float Value;
}
public partial class MoveSystem : SystemBase
{
protected override void OnUpdate()
{
float deltaTime = SystemAPI.Time.DeltaTime;
Entities.ForEach((ref Translation pos, in MoveSpeed speed) =>
{
pos.Value.y += speed.Value * deltaTime;
}).ScheduleParallel();
}
}
5. DOTS 장점
- 성능 극대화 — 멀티스레드 + 캐시 친화적 메모리 구조
- 대규모 데이터 처리 — 수만~수십만 Entity도 안정적으로 처리
- 모듈화 — 데이터와 로직의 명확한 분리
6. DOTS 단점
- 러닝 커브 높음
- 기존 GameObject 워크플로우와의 혼합 사용 시 복잡성 증가
- 디버깅 난이도 상승
7. 결론
DOTS는 고성능 게임 개발을 위한 미래 지향적 아키텍처입니다.
작은 규모의 게임에는 과할 수 있지만, 대규모 시뮬레이션, AI, 오픈 월드 개발에서는 큰 장점을 제공합니다.
728x90
반응형
'프로그래밍 공부 > TIL' 카테고리의 다른 글
| 2025-08-12 TIL (2) | 2025.08.12 |
|---|---|
| 2025-08-11 TIL (0) | 2025.08.11 |
| 2025-08-07 TIL (0) | 2025.08.07 |
| 2025-08-06 TIL (0) | 2025.08.06 |
| 20250805 - TIL (0) | 2025.08.05 |
