에셋 번들 패치 시스템 (AssetBundlePatchSystem)


Categories: GameSystem

에셋번들 패치 시스템

작성 계기

  • 면접을 봤는데 한 1년전 작업했던 에셋번들 패치 시스템에 대해서 제대로 설명하지 못해 다시 기억할겸 개념 정리를 위해 작성한다. 이 글에서는 코드 구현에 대해서 자세히 다루지는 않고 구현 방식에 대한 개념을 다룬다.

에셋번들 생성

  • 에셋번들 패치 시스템은 크게 총 3가지 단계로 나눠진다.

참고 이미지


1. 에셋번들 생성

  • 유니티에서 에셋번들을 생성하는 과정으로 별도의 툴을 제작하여 에셋번들과 버전 정보를 생성하는 과정이다.
    • 에셋번들 : 프로젝트 구성이나 설계 방식에 맞게 에셋번들 생성
    • 에셋 리스트 정보 : 리스트 정보는 파일 이름 / CRC값 / 파일 버전 정보 들이 포함 되어 있어야한다.
      • 파일 이름 : 파일 이름
      • CRC값 : 이전 번들 파일과 새로 생성한 번들 파일이 새로 생성되어 변화 되었는지 검토하기 위해 필요하다.
      • 파일 버전 정보 : 이전 버전의 번들과 새로 만들어진 번들의 CRC값이 틀릴때마다 버전 정보를 올려준다. CRC값으로만 파일의 변화를 체크 해도 되지만 버전별로 관리 하기 위해 사용 한다.
    • 에셋 버전 정보 : 에셋번들 메인 버전 정보, 에셋번들 파일을 새로 생성하거나 파일에 변화가 있을때 마다 에셋 버전 정보를 올려준다. 클라이언트에서 에셋번들 파일에 변화가 있는지 없는지 검토하기 위해 필요하다.

서버 업로드

2. 다운로드 서버 업로드

  • 이 단계는 간단하다. 에셋번들 생성 과정에서 만들어진 파일을 다운로드 서버에 업로드 해놓기만 하면 된다.

클라이언트 버전 체크 및 다운로드

3. 클라이언트 버전 체크 및 다운로드

  • 최종적으로 다운로드 서버에 업로드된 에셋번들과 클라이언트에 있는 에셋번들의 버전을 체크하여 새로 받거나 수정된 에셋번들을 다운로드 하여 교체 하는 과정이다.
    • 에셋 버전 정보 체크 : 다운로드 서버 or DB 서버 등에서 가지고 있는 에셋 버전 정보와 클라이언트의 에셋 버전 정보를 비교하여 클라이언트 에셋 버전 정보가 낮으면 에셋 리스트 정보를 가져와서 비교한다.
    • 에셋 리스트 정보 체크 : 서버에서 가져온 에셋 리스트 정보에서 클라이언트에 존재하는 에셋 리스트 정보를 비교한다.
    • 에셋 다운로드 : 에셋 리스트 정보에서 서버의 에셋 리스트 정보가 틀린 에셋에 대해서 다운로드 하여 패치한다.

핵심

  • 에셋 번들 패치 시스템에서 가장 핵심은 CRC값을 이용한 버전 관리 이다.

    CRC란? 순환 중복 검사(cyclic redundancy check), 네트워크 등을 통하여 데이터를 전송할 때 전송된 데이터에 오류가 있는지 확인하기 위한 체크값을 결정하는 방식을 말한다. (WikipediaLINK)

  • 에셋번들 생성시 CRC값을 만들수 있는데 A에셋의 용량이 1,2345byte 이고 CRC값이 12345라면 A에셋의 에셋번들을 계속 생성해도 CRC값은 12345가 나온다. 만약 A에셋이 수정이 되어 용량이 2,345byte라면 CRC값은 거기에 맞게 새로 생성된다.

Comments