Unreal Engine DDC 정리법, 로컬·공유 캐시와 셰이더 끊김을 나누는 기준
AI를 활용하여 생성한 이미지입니다.
Unreal Engine 프로젝트를 다른 PC나 브랜치로 옮긴 뒤 첫 실행마다 셰이더를 다시 만들면, 소스 파일이 손상됐다고 단정하기 전에 캐시 경로부터 확인하는 편이 좋습니다. Derived Data Cache(DDC)는 .uasset 같은 프로젝트 원본이 아니라, 엔진이 플랫폼과 설정에 맞게 생성한 파생 데이터를 보관합니다.[1] 따라서 DDC를 비워도 원본 프로젝트가 곧바로 삭제되는 것은 아니지만, 필요한 데이터를 다시 만드는 시간과 디스크 사용량은 달라질 수 있습니다.
DDC를 세 가지 관점으로 나누면 판단이 쉬워집니다
| 구분 | 역할 | 어울리는 상황 |
|---|---|---|
| 로컬 DDC | 내 컴퓨터에서 빠르게 재사용하는 캐시 | 개인 작업, 노트북, 오프라인 작업 |
| 공유 DDC | 한 사람이 만든 파생 데이터를 팀이 함께 사용 | 지연이 낮은 사내망과 빌드 머신 |
| DDC Pak | 미리 채운 읽기 전용 캐시를 배포 | 엔진·샘플·초기 실행 데이터 |
Epic 문서는 여러 캐시 위치를 빠른 곳부터 확인하고, 찾은 데이터는 빠른 로컬 캐시에 복사하는 흐름을 설명합니다.[1] 그래서 공유 DDC를 사용해도 로컬 디스크가 커질 수 있습니다. 공유 캐시가 로컬 캐시를 완전히 대체한다고 생각하면 저장 공간이나 재사용 동작을 잘못 해석하기 쉽습니다.
셰이더 컴파일과 DDC 전체를 같은 문제로 보지 마세요
셰이더는 DDC에 들어갈 수 있는 여러 파생 데이터 중 하나입니다. 셰이더 조합이 늘면 컴파일에 필요한 메모리와 시간이 늘 수 있고, 게임 실행 중 첫 장면의 끊김은 에디터의 캐시 생성과 별도로 셰이더 파이프라인 상태의 영향을 받을 수 있습니다.[2][3] 따라서 증상을 먼저 나누어 기록해야 합니다.
- 에디터를 열 때마다 같은 셰이더를 다시 만드는지 확인합니다.
- 컴파일 진행률이 오래 멈추는지, 아니면 게임 플레이 중 특정 장면에서만 hitch가 생기는지 구분합니다.
- 문제가 엔진 버전 변경 뒤 생겼는지, 그래픽 API·플랫폼·렌더러를 바꾼 뒤 생겼는지 적습니다.
에디터 시작 지연은 DDC 경로와 파생 데이터 생성 순서를 먼저 볼 문제입니다. 반대로 에디터 컴파일이 끝난 뒤 게임에서만 순간적으로 끊긴다면 FShaderCache처럼 런타임 셰이더 끊김을 줄이는 별도 메커니즘과 게임 설정을 함께 살펴야 합니다.[2] 캐시 폴더를 반복해서 삭제하는 것만으로 두 증상을 동시에 해결할 수 있다고 기대하면 안 됩니다.
캐시를 지우기 전에 할 일
정리의 목적은 가장 큰 폴더를 무조건 없애는 것이 아니라, 어떤 캐시가 원인인지 분리하는 것입니다. 다음 순서로 기록을 남겨 보세요.
- Unreal Editor와 관련 빌드 도구를 종료합니다.
Config/DefaultEngine.ini와 엔진 설정의 DDC 관련 부분을 별도 파일에 복사합니다.[1]- 현재 사용 중인 로컬 경로, 공유 경로, DDC Pak 여부를 로그와 설정에서 확인합니다.
- 로컬 캐시 폴더의 이름을 바꾸어 보존합니다. 바로 삭제하지 않으면 비교가 끝난 뒤 복원할 수 있습니다.
- 같은 프로젝트를 다시 열어 첫 생성 시간과 두 번째 실행 시간을 별도로 기록합니다.
이때 소스 관리 폴더나 팀의 공유 DDC 경로를 로컬 캐시로 착각하지 않도록 경로를 복사해 두어야 합니다. 새 엔진 버전에서는 로컬 저장소로 Unreal Zen Store가 사용될 수 있으므로, 예전에 보던 폴더만 지우면 실제 사용 중인 저장소를 건드리지 못할 수도 있습니다.[1]
공유 DDC가 오히려 느려지는 경우
공유 DDC의 목적은 첫 사용자가 만든 파생 데이터를 팀원이 재사용하게 하는 것입니다. 그러나 네트워크 파일 접근이 빠른 로컬 SSD보다 느리면, 작은 파일을 여러 번 주고받는 비용이 캐시 재생성보다 커질 수 있습니다. Epic도 공유 DDC를 팀과 빌드 머신이 읽고 쓸 수 있는 환경에 맞추고, 원격 환경에서는 지연 때문에 일시적으로 끄는 방법을 함께 설명합니다.[1]
재택근무나 VPN에서 “공유 캐시를 쓰는데도 매번 멈춘다”면 캐시가 비어 있다고만 보지 마세요. 같은 프로젝트와 같은 엔진 설정으로 공유 DDC 사용, 로컬 우선, 공유 DDC 비활성화 조건을 나누어 비교합니다. 프로젝트를 여는 시각, 에디터에서 작업 가능한 시점, 셰이더 완료 시점, 게임 중 hitch를 따로 적어야 어느 단계의 지연인지 알 수 있습니다.
DDC Pak과 사전 채우기는 언제 유용할까요?
Epic 문서는 UnrealEditor.exe ProjectName -run=DerivedDataCache -fill 형태로 파생 데이터를 미리 채우는 방법을 안내합니다.[1] 다만 모든 개발자가 매일 실행할 명령은 아닙니다. 엔진 버전과 플랫폼, 브랜치가 비교적 고정되어 있고 많은 사람이 같은 샘플이나 셰이더를 반복해서 받아야 하는 빌드 머신이라면 검토할 만합니다.
반대로 브랜치마다 설정이 크게 다르거나 자주 바뀌는 개인 프로젝트라면 미사용 파생 데이터가 쌓일 수 있습니다. 브랜치·엔진·플랫폼을 경로 또는 정책으로 구분하고, 남은 용량과 정리 주기를 정하세요. DDC는 재생성 가능한 결과물이지만, 캐시가 프로젝트 원본의 백업을 대신하지는 않습니다. 복구 계획에서도 소스와 캐시를 서로 다른 대상으로 다뤄야 합니다.
엔진과 프로젝트 설정을 바꾼 뒤에는 캐시 무효화를 의심하세요
엔진 버전이나 대상 플랫폼을 바꾼 직후 같은 파생 데이터를 다시 만드는 것은 이전 캐시가 새 조건과 맞지 않아서일 수 있습니다. 이때 “재컴파일이 늘었다”는 사실만으로 오류라고 단정하지 말고, 변경 전후의 엔진 버전, 브랜치, 렌더러, 플랫폼을 함께 기록하세요. 조건이 바뀌었다면 어느 정도의 재생성은 정상적인 비용일 수 있습니다.
팀에서 공유 경로를 운영한다면 오래된 캐시를 누가 언제 정리하는지도 정해야 합니다. 사용 중인 브랜치의 캐시를 먼저 지우면 다른 사람이 같은 데이터를 다시 만들게 될 수 있으므로, 사용량과 마지막 접근 시각을 확인할 수 있는 정책이 필요합니다. 정리 스크립트를 도입하더라도 엔진·플랫폼·브랜치 구분을 확인한 뒤 실행하도록 제한하세요.
문제별 판단표
| 증상 | 먼저 볼 곳 | 다음 행동 |
|---|---|---|
| 매번 같은 셰이더를 컴파일함 | 엔진 버전, 렌더러, 실제 DDC 경로 | 설정과 로그를 기록한 뒤 로컬 캐시를 격리해 비교 |
| VPN에서 에디터가 느림 | 공유 DDC의 네트워크 지연 | 로컬 우선 또는 공유 비활성화 조건과 비교 |
| 게임 첫 구간만 끊김 | 런타임 셰이더 캐시와 게임 설정 | 에디터 DDC 삭제와 별도로 셰이더 hitch를 관찰 |
| 캐시 정리 뒤 복구가 어려움 | 백업한 경로와 설정 파일 | 이름을 바꾼 보존본을 기준으로 원인 확인 |
자주 묻는 질문
DDC를 삭제하면 프로젝트가 망가질까요?
DDC는 파생 데이터이므로 원본 자산과 같은 복구 대상은 아닙니다. 다만 다시 생성하는 동안 긴 대기 시간이 생길 수 있고, 잘못된 경로를 지우면 팀 캐시나 다른 작업에 영향을 줄 수 있으므로 먼저 이름을 바꾸어 격리하는 편이 안전합니다.
공유 DDC를 쓰면 로컬 캐시는 필요 없나요?
아닙니다. 공식 문서가 설명하듯 찾은 데이터가 빠른 로컬 캐시에 복사될 수 있습니다.[1] 로컬 저장 공간과 공유 경로의 역할을 따로 관리해야 합니다.
셰이더 컴파일이 끝나면 게임 끊김도 없어지나요?
보장되지 않습니다. 에디터의 파생 데이터 생성과 게임 실행 중 셰이더 hitch는 확인해야 할 경로가 다릅니다.[2][3] 같은 장면에서 별도로 비교하세요.
DDC를 소스 관리에 넣어야 하나요?
DDC는 프로젝트 원본이 아니라 재생성 가능한 파생 결과물입니다. 팀이 공유 캐시나 DDC Pak을 운영할 수는 있지만, 캐시가 없어도 소스에서 다시 만들 수 있는지와 재생성 시간, 저장 공간을 별도로 판단해야 합니다. 캐시를 백업한다고 해서 소스 복구가 되는 것은 아닙니다.
Sources
- [1] Epic Games, Using Derived Data Cache in Unreal Engine
- [2] Epic Games, FShaderCache in Unreal Engine
- [3] Epic Games, Shader Development in Unreal Engine
관련 글: PS5 M.2 SSD 확장 가이드
[…] 프로젝트의 로컬·공유 Derived Data Cache를 정리하는 방법은 Unreal Engine DDC 정리와 셰이더 끊김 구분하기에서 이어서 확인할 수 있어요. DDC와 PSO 캐시는 이름이 비슷해도 저장 […]