Company
교육 철학

Resource Management(리소스 관리)

리소스 관리

관련 소스 파일
GameFramework/FileSystem/FileSystem.cs
GameFramework/FileSystem/FileSystemManager.cs
GameFramework/FileSystem/IFileSystem.cs
GameFramework/FileSystem/IFileSystemManager.cs
GameFramework/GameFramework.csproj
GameFramework/ObjectPool/ObjectPoolManager.ObjectPool.cs
GameFramework/Resource/IResourceManager.cs
GameFramework/Resource/ResourceManager.ResourceChecker.cs
GameFramework/Resource/ResourceManager.ResourceIniter.cs
GameFramework/Resource/ResourceManager.ResourceLoader.AssetObject.cs
GameFramework/Resource/ResourceManager.ResourceLoader.LoadResourceAgent.cs
GameFramework/Resource/ResourceManager.ResourceLoader.ResourceObject.cs
GameFramework/Resource/ResourceManager.ResourceLoader.cs
GameFramework/Resource/ResourceManager.ResourceUpdater.cs
GameFramework/Resource/ResourceManager.VersionListProcessor.cs
GameFramework/Resource/ResourceManager.cs
GameFramework/Utility/Utility.Encryption.cs

개요와 목적

리소스 관리 시스템은 GameFramework의 핵심 모듈로, 게임 에셋을 로드, 업데이트, 관리하는 종합적인 솔루션을 제공합니다.
이 시스템은 리소스 버전 관리, 의존성 관리, 에셋 풀링, 파일 작업을 지원하며, 다양한 배포 모드를 제공합니다.
이 시스템은 Entity, UI, Sound 관리 등 다른 프레임워크 모듈들의 기반이 되며, 이 모듈들이 필요한 에셋에 접근하고 관리할 수 있도록 합니다.
특정 에셋 타입 로드에 대한 자세한 정보는 Entity Framework 또는 UI Manager를 참고하세요.

리소스 관리 아키텍처

리소스 관리 시스템은 IResourceManager 인터페이스를 구현하는 ResourceManager 클래스를 중심으로 구성됩니다.
이 클래스는 리소스 관리의 다양한 측면을 처리하는 여러 구성 요소를 조율합니다.
ResourceLoader: 에셋 로딩, 의존성 추적, 오브젝트 풀 관리
ResourceUpdater: 리소스 업데이트, 다운로드, 적용 관리
ResourceChecker: 초기화 시 리소스 검증
ResourceIniter: 다양한 모드에서 리소스 시스템 초기화
ResourceVerifier: 리소스 무결성 검증
VersionListProcessor: 리소스 업데이트를 위한 버전 리스트 처리

리소스 모드

시스템은 리소스 로드·업데이트 방식에 따라 세 가지 모드를 지원합니다.
모드
설명
사용 사례
Package
모든 리소스가 애플리케이션에 번들됨. 업데이트 없음.
싱글플레이 게임, 독립 실행형 앱
Updatable
원격 서버에서 리소스를 업데이트 가능
주기적 업데이트가 필요한 온라인 게임
UpdatableWhilePlaying
실행 중에도 리소스 업데이트 가능
라이브 서비스 게임, 지속적인 콘텐츠 업데이트
리소스 모드는 SetResourceMode 메서드로 초기화 시 설정합니다.

리소스 경로와 저장소

시스템은 두 가지 주요 경로를 사용합니다.
읽기 전용 경로(Read-Only Path): 수정 불가능한 기본 리소스 저장
읽기/쓰기 경로(Read-Write Path): 다운로드되거나 업데이트된 리소스 저장
읽기/쓰기 경로에 있는 리소스가 읽기 전용 경로보다 우선합니다.
또한, FileSystemManager를 통해 파일 시스템 내에 저장할 수 있으며, 효율적인 리소스 관리를 지원합니다.

버전 관리

시스템은 버전 리스트를 통해 리소스 버전을 추적·관리합니다.
PackageVersionList: Package 모드에서 사용
UpdatableVersionList: Updatable 모드에서 원격 서버가 사용
ReadOnlyVersionList: Updatable 모드의 기본 리소스
ReadWriteVersionList: 다운로드/업데이트된 리소스
ResourcePackVersionList: 리소스 팩용
버전 리스트 다운로드·처리는 VersionListProcessor에서 담당합니다.

리소스 로딩 시스템

리소스 로딩은 ResourceLoader가 관리합니다.

에셋 로딩 과정

1.
클라이언트가 LoadAsset 요청
2.
이미 로드되었거나 풀에 있는지 확인
3.
없으면 의존성 체크 후 먼저 의존성 로드
4.
로딩 작업 생성 후 사용 가능한 에이전트에 할당
5.
에이전트가 리소스 파일 로드 (파일 시스템 또는 디스크에서)
6.
로드된 리소스를 처리 후 풀에 저장
7.
에셋 인스턴스화 및 캐싱
8.
콜백으로 로딩 완료 알림

리소스 업데이트 시스템

리소스 업데이트는 ResourceUpdater가 담당합니다.

업데이트 과정

1.
ResourceChecker가 로컬·원격 버전 리스트 비교
2.
업데이트 필요한 리소스 마킹
3.
ResourceUpdater가 리소스 다운로드
4.
해시 코드로 무결성 검증
5.
읽기/쓰기 경로에 적용
6.
새로운 읽기/쓰기 버전 리스트 생성

파일 시스템 통합

FileSystemManager를 활용해 다수 리소스를 단일 파일에 효율적으로 저장·관리합니다.
여러 리소스를 한 파일에 저장
빠른 접근 속도
관련 리소스를 논리적으로 그룹화

리소스 오브젝트 풀링

에셋·리소스 모두에 대해 오브젝트 풀링을 적용하여 메모리 할당 최소화 및 성능 향상.
사용하지 않는 리소스 자동 해제
용량 및 만료 시간 설정 가능
의존성 추적으로 조기 해제 방지
용량 초과 시 우선순위 기반 해제

리소스 암호화 및 보안

민감한 에셋 보호를 위해 암호화·복호화를 지원.
LoadFromMemoryAndQuickDecrypt: 빠른 암호화
LoadFromMemoryAndDecrypt: 완전 암호화
LoadFromBinaryAndQuickDecrypt: 바이너리용 빠른 암호화
LoadFromBinaryAndDecrypt: 바이너리 완전 암호화

다른 시스템과의 통합

다음 시스템들과 연계됩니다.
ObjectPoolManager: 에셋·리소스 풀링 제공
FileSystemManager: 리소스 저장·검색
DownloadManager: 원격 리소스 다운로드
EntityManager: 리소스를 이용해 게임 엔티티 생성
UIManager: UI 에셋 로드
SoundManager: 오디오 에셋 로드
DataTableManager: 데이터 테이블 로드
LocalizationManager: 로컬라이제이션 데이터 로드

요약

리소스 관리 시스템은 다음 기능을 제공합니다.
에셋 로드·언로드
리소스 버전 관리·업데이트
파일 시스템 기반 효율적 저장
의존성 관리
리소스 암호화·보안
오브젝트 풀링 기반 성능 최적화
다른 게임 시스템과의 통합
이 시스템은 모든 게임 에셋 접근의 기반이며 GameFramework의 핵심입니다.