본문 바로가기
Unity/용어정리

Unity 프로젝트 에셋 관리: Asset Bundle (에셋번들)

by 혜이든 2025. 5. 8.

 

 

  Asset Bundle
비유 ⦁ 미리 포장된 도시락을 필요할 때 꺼내서 먹는 것
= Asset Bundle은 게임을 빌드할 때 필요한 에셋을 미리 묶어서(포장해서) 저장해두는 방식.

⦁ 학교에 갈 때 미리 싸둔 도시락(Asset Bundle)을 가져가면, 나중에 따로 요리할 필요 없이 바로 먹을 수 있다.
⦁ 하지만 한 번 포장된 도시락을 수정하려면 다시 싸야(빌드해야) 하는 번거로움이 있다.
정의 ⦁  Unity에서 특정 에셋(텍스처, 모델, 오디오, 프리팹 등)을 하나의 파일로 패키징하여
   배포 및 로드할 수 있도록 하는 시스템.
⦁  초기 앱 설치 크기를 줄이고, 필요한 에셋만 동적으로 로드하여 메모리 최적화가 가능.
⦁  앱 업데이트 없이 새로운 콘텐츠를 추가할 수 있는 기능을 제공.
장점 ⦁  앱 크기 감소: 초기 앱 설치 크기를 줄이고, 필요한 에셋만 다운로드하여 저장 공간 절약.
⦁  동적 로드(Selective Loading): 필요한 순간에만 에셋을 로드하여 메모리 사용량 최적화.
⦁  온디맨드 콘텐츠 업데이트: 앱 재배포 없이 새로운 에셋을 서버에서 다운로드하여 교체 가능.
⦁  모듈화 및 유지보수성 향상: 에셋을 독립적인 번들로 분리하여 관리하면, 프로젝트 구조가 깔끔해지고
   유지보수가 쉬워짐.
⦁  플랫폼별 최적화 지원: Android, iOS, PC 등 각 플랫폼에 맞게 에셋 번들을 최적화하여 빌드 가능.
⦁  서버 배포 가능: 클라우드 또는 CDN을 활용하여 원격에서 에셋을 제공할 수 있음.
단점 ⦁  복잡한 관리: 에셋 번들 간 의존성을 수동으로 관리해야 함. 잘못 구성하면 중복된 에셋이 포함되어 용량이 증가할 수
    있음. 버전 관리가 어려워, 변경 사항을 일일이 추적해야 함.
⦁  메모리 및 로드 문제: 캐싱, 로드, 언로드 로직을 직접 구현해야 하므로 개발 부담 증가. 번들을 언로드하지 않으면 메모
    리 누수 발생 가능 → 적절한 메모리 관리 필요. 런타임 로드 오버헤드 발생: 번들을 불러오는 데 시간이 걸릴 수 있음.
⦁  빌드 및 배포 시간 증가: 에셋 번들을 생성하는 데 시간이 많이 걸릴 수 있으며, 빌드 파이프라인을 최적화하지 않으면
    전체 개발 속도가 느려질 수 있음.
최적화 ⦁  번들 크기 최적화: 필요 없는 에셋을 제거하고, 작은 단위로 분할하여 로드.
⦁  압축 최적화: LZ4/LZMA 압축을 적용하여 로딩 속도와 메모리 사용량 최적화.
⦁  중복 에셋 제거: 여러 번들에서 동일한 에셋을 공유하도록 설계.
⦁  LOD(Level of Detail) 적용: 거리에 따라 저해상도 모델을 사용하여 렌더링 성능 향상.
⦁  밉맵(Mipmap) 활용: 텍스처 로딩 최적화로 성능 개선.
⦁  번들 언로드 전략: 메모리 단편화 방지를 위해 필요 없는 번들은 즉시 언로드.
고려 사항 ⦁  번들 구성 전략: 기능별, 레벨별, 리소스 유형별로 나누어 관리.
⦁  에셋 종속성 최소화: 번들 간 의존성을 줄여 불필요한 로드 방지.
⦁  빌드 파이프라인 자동화: 에셋 번들 빌드 프로세스를 자동화하여 오류 발생 가능성을 줄이고 빌드 시간을 단축.
⦁  버전 관리: 번들의 버전을 체계적으로 관리하여 호환성 문제 방지.
⦁  다운로드 패턴 최적화: 네트워크 상태를 감안하여 최적의 다운로드 전략 수립.
모바일 사용 시
고려사항
⦁  메모리 제약: 작은 크기의 번들로 나누고, 불필요한 에셋은 언로드하여 메모리 누수 방지.
⦁  비동기 로딩: 메인 스레드 블로킹을 최소화하여 원활한 게임플레이 유지.
⦁  네트워크 관리: 다운로드 진행 상태를 효율적으로 관리하고, 데이터 사용량 고려.
⦁  압축 최적화: 대역폭 절약을 위해 적절한 압축 형식(Texture Compression, Mesh Compression 등) 사용.
WebGL 사용 시 고려사항
(브라우저 기반)
⦁  CORS 정책 고려: 원격 서버에서 에셋 다운로드 시 보안 정책 적용 필요.
⦁  브라우저 캐싱 활용: 다운로드한 번들을 캐싱하여 중복 다운로드 방지.
⦁  메모리 제한: WebGL은 메모리 사용이 제한적이므로 불필요한 에셋 즉시 언로드.
⦁  네트워크 종속성: 온라인 환경을 기본으로 하되, IndexedDB를 활용한 오프라인 지원 가능.
온라인 필수 여부 ⦁  선택적: 에셋 번들은 로컬 저장소에서도 로드 가능하지만, 새로운 콘텐츠 다운로드나 업데이트 시 온라인 연결 필요.
⦁  캐싱 전략: 다운로드한 에셋을 캐싱하여 중복 다운로드 방지.
런처(로드) 시간 비교 분석   중간 로딩 속도 (사전 로드 필요)
    ⦁  런처 시간 영향
       - 앱 실행 시 필요한 번들을 미리 로드해야 하므로 초반 로딩 시간이 늘어날 수 있음.
          하지만 번들이 로드되면 빠르게 사용 가능.
       -  번들을 압축하면 로딩 속도가 느려질 수 있음 (LZMA 압축).
    ⦁  실행 중 로딩 속도
       -  번들 크기에 따라 다름, 압축을 최적화하면 비교적 빠른 속도로 로드 가능.
       -  하지만 메모리에 적재된 후에는 빠르게 사용 가능.
언제 사용하면 좋을까? ⦁  사전 정의된 콘텐츠를 번들로 묶어 로드해야 하는 경우.
⦁  정적인 DLC, 확장팩, 특정 레벨별 에셋을 필요할 때 로드해야 하는 경우.
⦁  네트워크 없이도 사용할 수 있도록 로컬에서 로드해야 하는 경우.
사용 예시 ⦁  DLC 및 동적 콘텐츠 업데이트: 게임의 확장팩, 캐릭터 스킨, 언어 데이터 등을 추가할 때 활용.
⦁  대규모 게임에서 레벨별 로딩: 특정 레벨에 필요한 에셋만 로드하여 메모리 사용 최적화.
⦁  레거시 프로젝트 유지보수: 기존 프로젝트에서 에셋을 관리할 때, 새로운 시스템으로 전환이 어려운 경우.
⦁  특정 환경에서 커스텀 로딩 파이프라인이 필요한 경우: 세밀한 제어가 필요한 시스템.
참고 자료 ⦁  Unity 공식 문서 - AssetBundles: 에셋 번들의 기본 개념, 생성, 로딩 방법 등을 설명.
⦁  Unity Learn - Asset Bundles Tutorial: 에셋 번들 튜토리얼.
⦁  How to create asset bundle in Unity: YouTube 에셋 번들 사용법 영상 튜토리얼.
⦁  Unity 에셋 번들 팁 및 위험 요소: Unity 공식 블로그의 에셋 번들 가이드.

 

댓글