PART 4 · 강의 4/4

메모리 버짓 설계

플랫폼별 메모리 배분 전략과 모니터링

01

플랫폼별 메모리 버짓

카테고리별 배분 예시

카테고리 PS5 (8GB) PC (16GB)
엔진 코어 500MB 500MB
렌더 타겟 1.5GB 2GB
텍스처 스트리밍 2GB 4GB
메시/지오메트리 1.5GB 3GB
오디오 300MB 500MB
애니메이션 500MB 1GB
물리/AI 800MB 1.5GB
여유/버퍼 900MB 3.5GB
버퍼 중요성

항상 10-15% 여유를 남겨두세요. 예상치 못한 피크 사용량과 OS 오버헤드를 위한 버퍼입니다.

02

커스텀 LLM 태그 활용

카테고리별 모니터링

⭐ 게임 시스템별 LLM 태그
코드 숨기기
// 헤더에서 선언 LLM_DECLARE_TAG(Weapons); LLM_DECLARE_TAG(Characters); LLM_DECLARE_TAG(Environment); LLM_DECLARE_TAG(UI); // 소스에서 정의 LLM_DEFINE_TAG(Weapons); LLM_DEFINE_TAG(Characters); LLM_DEFINE_TAG(Environment); LLM_DEFINE_TAG(UI); // 사용 void UWeaponManager::LoadWeaponAssets() { LLM_SCOPE(Weapons); // 모든 할당이 Weapons 태그로 추적됨 }
stat LLMFULL로 확인
코드 보기
# 콘솔에서 stat LLMFULL # 출력 예시 Weapons: 128.5 MB Characters: 256.2 MB Environment: 512.8 MB UI: 64.3 MB
03

버짓 초과 대응

메모리 압박 시 전략

단계별 대응

  • 1단계 (경고): 텍스처 품질 한 단계 하향, 덜 중요한 에셋 언로드
  • 2단계 (위험): LOD 강제 적용, 오디오 품질 감소, 파티클 수 제한
  • 3단계 (크리티컬): 비필수 시스템 비활성화, GC 강제 실행
메모리 경고 시스템 예시
코드 보기
void UMemoryManager::CheckMemoryBudget() { float UsedMB = GetTotalMemoryUsage(); float BudgetMB = GetMemoryBudget(); float Ratio = UsedMB / BudgetMB; if (Ratio > 0.9f) { OnMemoryCritical.Broadcast(); } else if (Ratio > 0.8f) { OnMemoryWarning.Broadcast(); } }
04

자동화된 메모리 모니터링

CI/CD와 연동한 메모리 검증

메모리 버짓 준수를 수동으로 확인하는 것은 비효율적입니다. 자동화된 테스트와 커맨드렛을 활용하여 빌드 파이프라인에서 메모리를 검증하세요.

// 메모리 버짓 자동 검증 테스트 IMPLEMENT_SIMPLE_AUTOMATION_TEST(FMemoryBudgetTest, "Project.Performance.MemoryBudget", EAutomationTestFlags::EditorContext | EAutomationTestFlags::ProductFilter) bool FMemoryBudgetTest::RunTest(const FString& Params) { // 현재 메모리 사용량 조회 FPlatformMemoryStats MemStats = FPlatformMemory::GetStats(); const int64 BudgetMB = 4096; // 4GB 버짓 const int64 UsedMB = MemStats.UsedPhysical / (1024 * 1024); TestTrue( FString::Printf(TEXT("Memory %lld MB within budget %lld MB"), UsedMB, BudgetMB), UsedMB <= BudgetMB ); return true; } // 커맨드렛으로 메모리 리포트 생성 // UE5Editor.exe Project -run=MemReport -AllMemory
Gauntlet 테스트

UE5의 Gauntlet Automation Framework를 사용하면 실제 게임 실행 중 메모리를 자동으로 기록하고 기준치를 초과하면 빌드를 실패시킬 수 있습니다.

메모리 누수 탐지

주기적으로 memreport -full 콘솔 명령을 실행하여 Saved 폴더의 MemReports를 비교하세요. 시간이 지남에 따라 증가하는 카테고리가 누수 후보입니다.

SUMMARY

핵심 요약

  • 메모리 버짓: 플랫폼별로 카테고리 배분 계획
  • 여유 버퍼: 항상 10-15% 남겨두기
  • 커스텀 LLM 태그: 게임 시스템별 메모리 추적
  • 단계별 대응: 경고/위험/크리티컬 레벨 정의
  • 자동화 테스트: CI/CD 연동으로 메모리 버짓 자동 검증
  • 모니터링: stat LLMFULL, memreport로 실시간 확인
Part 4 완료!

메모리 최적화를 마스터했습니다! 다음 Part에서는 스레딩 및 빌드 최적화를 다룹니다.

PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: LLM 태그 시스템 구축

프로젝트의 주요 시스템(무기, 캐릭터, 환경, UI)에 커스텀 LLM 태그를 등록하고, stat LLMFULL로 각 시스템의 실시간 메모리 사용량을 확인하세요.

실습 2: 메모리 경고 시스템

FPlatformMemory::GetStats()를 활용하여 메모리 사용률이 80%를 넘으면 Warning, 90%를 넘으면 Critical 이벤트를 브로드캐스트하는 메모리 모니터를 구현하세요.

심화 과제

Automation Test로 메모리 버짓 검증 테스트를 작성하고, Gauntlet을 연동하여 실제 게임 플레이 중 메모리 피크가 목표 버짓(4GB)을 초과하면 빌드가 실패하도록 CI/CD 파이프라인을 구성하세요.