728x90
반응형

📕오늘의 공부 주제



DOTS(Data-Oriented Technology Stack) 기초

🤔Why?



Unity는 전통적으로 **객체 지향(Object-Oriented)** 방식의 GameObject-Component 구조를 사용해왔습니다. 하지만 대규모 데이터를 빠르게 처리하는 데에는 한계가 있어, **데이터 중심(Data-Oriented)** 설계 방식인 DOTS를 도입했습니다. DOTS를 이해하면 **멀티스레드 성능 극대화**, **메모리 접근 효율 향상**이 가능해집니다.

📖오늘의 공부 내용



1. DOTS란?

DOTS는 Unity의 고성능 게임 개발 프레임워크로, 세 가지 핵심 요소로 구성됩니다.

  1. ECS (Entity Component System) — 데이터 중심 설계 구조
  2. Job System — 멀티스레드 작업 관리
  3. 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 장점

  1. 성능 극대화 — 멀티스레드 + 캐시 친화적 메모리 구조
  2. 대규모 데이터 처리 — 수만~수십만 Entity도 안정적으로 처리
  3. 모듈화 — 데이터와 로직의 명확한 분리

6. DOTS 단점

  1. 러닝 커브 높음
  2. 기존 GameObject 워크플로우와의 혼합 사용 시 복잡성 증가
  3. 디버깅 난이도 상승

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