Version: 2019.2
YAML 클래스 ID 레퍼런스
스크립팅으로 소스 에셋 수정

캐시 서버

Unity는 완전한 자동 에셋 파이프 라인을 가지고 있습니다. .psd 파일이나 .fbx 파일과 같은 에셋 소스가 변경되면 Unity는 변경사항을 감지하고 자동으로 다시 파일을 임포트합니다. 파일에서 임포트된 데이터는 즉시 내부 형식으로 변환되어 저장됩니다.

이 정렬 방식은 각 사용자 작업의 흐름을 최대한 효율적이고 유연하게 만들기 위해서 설계되었습니다. 그러나 팀으로 작업할 때는 다른 사용자들이 계속 변경하는 에셋을 임포트해야 하는 상황을 맞이하게 됩니다. 거기에 더해서 데스크탑에서 모바일 빌드 타겟 플랫폼으로 전환 시 에셋을 다시 임포트해야 합니다. 이러한 전환은 큰 프로젝트일 수록 더 많은 시간을 소모합니다.

임포트한 에셋 데이터를 __캐시 서버__에 캐시하는 것은 에셋을 임포트하는 시간을 현저하게 줄입니다.

Unity는 다음에 기반하여 각 에셋 임포트를 캐싱합니다.

  • 에셋 파일 자체
  • 임포트 설정
  • 에셋 임포터 버전
  • 현재 플랫폼

위 항목 중 하나가 변경되면 Unity는 에셋을 다시 임포트합니다. 아니면 Unity가 캐시 서버에서 다운로드할 수도 있습니다.

캐시 서버를 사용하는 경우 여러 프로젝트에서 에셋 임포트를 공유(즉, 임포트 작업은 하나의 컴퓨터에서 수행하고 그 결과를 다른 곳과 공유)할 수 있습니다.

참고: 일단 캐시 서버를 설정하고 활성화하면 이 과정은 완전히 자동으로 이루어지며 추가 워크플로가 요구되지 않습니다. 따라서 사용자의 추가 개입 없이도 프로젝트를 더욱 빠르게 임포트할 수 있습니다.

캐시 서버 활성화

캐시 서버를 활성화하려면 다음 단계를 따르십시오.

  1. Unity Preferences 창(메인 메뉴: MacOS의 Unity > Preferences 또는 Windows 및 Linux의 Edit > Preferences)을 엽니다.
  2. 왼쪽 카테고리 리스트에서 Cache Server를 선택합니다. 그러면 오른쪽 상세 정보 창에 Cache Server 설정이 나타납니다.
  3. Cache Server Mode 드롭다운 상자에서 Remote 또는 Local 을 선택합니다. 그러면 선택한 모드에 해당하는 프로퍼티가 나타납니다.
  4. 선택한 모드에 대한 캐시 서버 환경 설정을 지정합니다.

팁: 하드 드라이브는 크기 제한이 따르므로 가능하면 별도의 컴퓨터에서 캐시 서버를 호스트하는 것이 좋습니다.

참고: 로컬 캐시 서버에 커스텀 위치가 있고 해당 위치를 이용할 수 없게 되면 Unity는 다음과 같은 경고를 표시합니다.

로컬 캐시 디렉토리가 존재하지 않습니다 - 캐시 폴더에 접속할 수 있으며 쓰기 권한이 있는지 확인하시기 바랍니다.

관리자로서 캐시 서버 설정

관리자는 캐싱된 에셋을 호스트하는 캐시 서버 컴퓨터를 설정해야 합니다.

원격 서버에 캐시 서버를 설정하려면 다음 단계를 따르십시오.

  1. 캐시 서버를 다운로드합니다.
    • Unity 다운로드 아카이브 페이지를 엽니다.
    • 사용할 Unity 버전을 찾은 후 타겟 서버의 운영체제에 맞는 Downloads 버튼을 클릭합니다.
    • Cache Server 링크를 클릭하여 다운로드를 시작합니다.
  2. 파일의 압축을 풀면 다음과 같은 모습으로 보입니다.
  3. 운영체제에 맞는 커맨드 스크립트를 실행합니다. 캐시 서버가 백그라운드에서 실행 중임을 나타내는 터미널 창이 나타납니다.

중요: 캐시 서버는 매우 큰 스토리지가 있는 안정적인 컴퓨터에 설치되어야 합니다. 여러 버전의 임포트된 리소스를 저장하기 위해 프로젝트 자체의 크기보다 훨씬 커야 합니다. 하드디스크 용량이 가득 차면 캐시 서버의 성능이 저하될 수 있습니다.

서비스로 캐시 서버(Cache Server)를 설치

제공된 .sh.cmd 스크립트는 서비스로 서버에 설치 되어야 합니다. 캐시 서버는 원자적 파일 연산을 사용하기 때문에 언제든지 안전하게 끄고 다시 시작할 수 있습니다.

새 캐시 서버(Cache Server) 및 레거시 캐시 서버(Cache Server)

기본적으로 두 캐시 서버 프로세스가 시작됩니다. 레거시 캐시 서버는 Unity 5.0 이전 버전에서 사용됩니다. 새 캐시 서버는 Unity 5.0 및 이후 버전에서 사용됩니다. 서로 다른 두 캐시 서버의 설정, 활성화, 비활성화에 관한 자세한 내용은 아래의 캐시 서버 설정을 참조하십시오.

캐시 서버(Cache Server) 설정

간단하게 스크립트를 실행하여 시작하면 레거시 캐시 서버는 8125포트에, 새 캐시 서버는 8126포트에 실행합니다. 또한 스크립트와 같은 디렉토리에 “cache”와 “cache5.0” 디렉토리를 생성하고 같은 곳에 데이터를 저장합니다. 캐시 디렉토리는 기본적으로 50GB까지 커질 수 있도록 설정되어 있습니다. 데이터의 크기 또는 위치 설정은 아래와 같이 커맨드 라인 옵션을 사용하여 변경할 수 있습니다.

./RunOSX.command --path ~/mycachePath --size 2000000000

또는

./RunOSX.command --path ~/mycachePath --port 8199 --nolegacy

다음의 커맨드 라인 옵션을 사용하여 캐시 서버를 설정할 수 있습니다.

  • 서버 포트를 지정하려면 --port를 사용해야 합니다. 새로운 캐시 서버에만 적용됩니다. 디폴트값은 8126입니다.
  • 캐시 위치 경로를 지정하려면 --path를 사용해야 합니다. 새로운 캐시 서버에만 적용됩니다. 디폴트값은 ./cache5.0입니다.
  • 캐시 위치 경로를 지정하려면 --legacypath를 사용해야 합니다. 레거시 캐시 서버에만 적용됩니다. 디폴트값은 ./cache입니다.
  • 양쪽 캐시 서버에 최대 캐시 크기를 바이트 단위로 지정하려면 --size를 사용해야 합니다. 최대 캐시 크기를 초과하게 되면 최근에 사용되지 않은 파일은 자동으로 폐기됩니다.
  • 레거시 캐시 서버 시작을 멈추려면 --nolegacy를 사용해야 합니다. 그렇지 않으면 레거시 캐시 서버는 8125 포트에서 시작합니다.

캐시 서버를 호스팅하는 시스템의 요구 사항

최상의 성능을 얻기 위해 임포트된 프로젝트 폴더 전체를 망라할 수 있는 충분한 RAM이 필요합니다. 또한 빠른 하드 드라이브와 고속 이더넷 연결이 가능한 컴퓨터가 가장 좋습니다. 하드 드라이브는 충분한 여유 공간이 있는 것이 더 좋습니다. 한편, 캐시 서버의 CPU 점유율은 매우 낮습니다.

캐시 서버와 버전 관리의 주요 차이점은 캐시된 데이터가 항상 로컬 시스템에서 재구성될 수 있다는 점입니다. 이것은 퍼포먼스 개선을 위한 단순한 툴입니다. 이러한 이유로 인터넷을 통한 캐시 서버의 이용은 좋은 방법이 아닙니다. 팀이 분산되어 있다면 각 지점에 별도의 캐시 서버를 설치해야 합니다.

캐시 서버는 Linux 또는 Mac OS X 컴퓨터에서 가장 잘 실행됩니다. Windows 파일 시스템은 캐시 서버가 데이터를 저장하는 방식에 최적화되어 있지 않고 Windows의 파일 잠금 문제는 Linux 및 Mac OS X에서는 발생하지 않으며 문제를 일으킬 수 있습니다.

캐시 서버(Cache Server) FAQ

더 많은 리소스를 임포트하고 저장할 때마다 캐시 서버의 데이터베이스 크기는 무한히 커지게 됩니까?

캐시 서버는 자동으로 일정기간 사용되지 않는 에셋을 제거합니다(물론 해당 에셋이 다시 필요해지면 다음에 사용할 때 다시 만들어 집니다).

캐시 서버는 에셋(Asset) 서버에서만 작동합니까?

캐시 서버는 소스​/버전 관리 시스템에서 쉽게 볼 수 있도록 설계되었기 때문에 Unity의 에셋 서버만 사용하도록 제한되지 않습니다.

어떤 것을 변경하면 임포트된 파일이 재생성됩니까?

Unity가 에셋을 임포트하려고 할 때 모든 소스 데이터의 MD5 해시를 생성합니다.

예를 들어, 텍스처는 다음과 같이 구성되어 있습니다.

  • 소스 에셋: “myTexture.psd” 파일
  • 메타 파일: “myTexture.psd.meta”(모든 임포터 설정을 저장합니다.)
  • 텍스처 임포터의 내부 버전 번호
  • 모든 AssetPostprocessors 버전의 해시

캐시 서버에 저장되어있는 것과 다른 해시라면, 에셋이 다시 임포트됩니다. 그렇지 않으면 캐시된 버전이 다운로드됩니다. 클라이언트 Unity 에디터는 필요할 때만 서버에서 에셋을 가져옵니다. 에셋이 변경될 때마다 각각의 프로젝트로 보내지는 것은 아닙니다.

에셋(Asset) 종속성은 어떻게 해야됩니까?

캐시 서버는 종속성에 관여하지 않습니다. Unity 에셋 파이프 라인은 종속성 개념을 다루지 않습니다. 그렇게 설계된 이유는 에셋간의 종속성 충돌 문제를 피하기 위해서입니다. AssetPostprocessor클래스는 에셋 임포터를 자신에 맞게 커스터마이징하는 일반적인 기법입니다. 예를 들어, .fbx 파일의 게임 오브젝트에 이름과 태그에 따라 MeshCollider를 추가할 수 있습니다.

또한, AssetPostprocessor를 사용하여 종속성을 쉽게 도입할 수 있습니다. 예를 들어, 에셋의 텍스트 파일 데이터를 사용해서 임포트된 게임 오브젝트에 추가적인 컴포넌트를 더할 수 있습니다. 이것은 캐시 서버에서 지원되지 않습니다. 캐시 서버를 사용하고 싶다면 프로젝트 폴더의 ​​다른 에셋에 대한 종속성을 제거해야 합니다. 캐시 서버는 포스트 프로세서의 종속성에 대해 아무것도 모르기 때문에 변경 사항을 전혀 모르고 캐시된 버전의 에셋을 사용하게 됩니다.

실제로, 캐시 서버에서 작업을 원활히 하기 위해 에셋 포스트프로세스를 실행할 수 있는 방법은 많이 있습니다. 다음을 사용할 수 있습니다.

  • 임포트된 에셋의 경로
  • 에셋의 모든 임포트 설정
  • 소스 에셋 자체 또는 에셋 포스트 프로세서에서 사용자에게 전달된 소스 에셋에서 생성된 모든 데이터.

머티리얼(Materials)로 작업할 때 문제가 있습니까?

이미 존재하는 머티리얼을 변경하면 문제가 발생할 수 있습니다. 캐시 서버를 사용할 때 Unity는 머티리얼에 대한 레퍼런스가 유효한지 확인합니다. 그러나 포스트 프로세스가 호출되지 않기 때문에 캐시 서버를 통해 임포트되는 모델에서는 머티리얼의 내용이 변경될 수 없습니다. 따라서 캐시 서버에서 임포트하는 경우와 하지 않는 경우 다른 결과를 얻을 수 있습니다.

에셋 포스트프로세서의 디스크에 이미 존재하는 머티리얼은 수정하지 마십시오. 캐시 서버를 통해 fbx 파일을 다운로드하면 이를 임포트할 프로세스가 실행되지 않습니다. 따라서 모델 임포터가 실행될 때마다 생성된 머티리얼을 생성된 일부 기본값으로 재설정하면, 캐싱된 fbx 파일을 임포트할 때 이 에셋 포스트프로세서가 실행되지 않습니다.

서버에서 캐시되지 않는 에셋(Asset)의 종류가 있습니까?

서버에 캐시되지 않는 일부 에셋 데이터가 있습니다. 스크립트 파일을 캐시하는 것으로 얻을 수 있는 점이 없기 때문에 서버는 이를 무시합니다. 또한 3D 모델링 소프트웨어(Autodesk® Maya®, Autodesk® 3ds Max® 등)에서 사용되는 네이티브 파일은 어플리케이션 단에서 FBX로 변환됩니다. 현재 에셋 서버는 기본 파일과 임포트 프로세스에서 생성된 중간 FBX 파일 전부를 캐시하지 않습니다. 하지만 모델링 소프트웨어에서 FBX로 익스포트된 파일을 Unity 프로젝트에 추가함으로써 캐시할 수 있습니다.


  • 2018–11–09 페이지 수정됨
YAML 클래스 ID 레퍼런스
스크립팅으로 소스 에셋 수정