Zen Stroage 는 인증없는 스토리지 서버
기존 공유 DDC 같은 경우 해당 원격서버에 접근권한 (로그인) 을 해야 접근가능
또한 I/O 디스패처라는 청크 ID로 주소가 지정된 데이터를 로드하는 새로운 I/O 추상화 계층을 통해
빠른 스테이징 및 디플로이, 파일시스템 오버헤드를 줄여 쿠킹 시간 효율성 향상 (사실 별로 차이가 없음) 을 위한 새 기능



pak - 접근 빈도가 낮은 개별파일들 저장
utoc - 청크 크기 및 오프셋, 압축형식, 청크 암호화 여부 등
ucas - 실제 데이터
참고
언리얼 엔진의 젠 스토리지 서버를 공유 DDC로 구성하기 | 언리얼 엔진 5.7 문서 | Epic Developer Community
뇌피셜
아마 ZenLocal / ZenShared 를 통틀어 ZenServer 라고 하는것 같습니다.
ZenDashboard 에서 확인할 수 있는 ZenLocal, 특정 원격주소로 세팅하여 공유 DDC 저장소가 되는곳을 ZenShared 이라 하는것 같습니다.
서버설정
- {ZenInstall} - 실행파일과 환경설정이 있는 폴더입니다. 시스템 드라이브나 다른 위치에 지정할 수 있습니다. 일반적인 사용 환경에서는 읽기 전용으로 유지되다가 최신 Zenserver 버전으로 업그레이드할 때만 수정됩니다.
- {ZenData} - Zenserver의 운영 데이터가 저장되는 폴더입니다. 시스템 드라이브가 아닌 곳 에 지정하는 것이 좋습니다. 일반적인 사용 환경에서 읽기/쓰기로 사용됩니다.
ZenUsers 에 권한 부여
+ 하위 파일 폴더 에도 쓰기권한 부여
icacls {ZenData 경로} /grant {ZenUsers}:(OI)(CI)(M) /T
- (I) = 상속받았다는 결과 표시
- (OI) = 파일에 상속
- (CI) = 폴더에 상속
- (OI)(CI) = 하위 전부
- (IO) = 부모 제외
/T : 하위 디렉터리 & 파일까지 재귀 적용

zen_config.lua
아래 두 변수만 설정하면 됩니다.
- data_dir - Zen 데이터
- abslog - 로그 파일
-- Zen Store Lua config
server = {
dedicated = true,
datadir = "{ZenData}",
abslog = "{ZenData}\\local.log",
debug = false,
sentry = {
disable = false,
allowpersonalinfo = false,
}
}
network = {
httpserverclass = "httpsys", -- httpsys|asio
port = 8558,
}
gc = {
intervalseconds = 28800, -- every 8 hour
lightweightintervalseconds = 3600, -- every hour
cache = {
maxdurationseconds = 864000, -- 10 days
}
}
cache = {
enable = true,
accesslog = false
upstream = {
upstreamthreadcount = 4,
policy = "disabled", -- readwrite|readonly|writeonly|disabled
},
memlayer = {
targetfootprint = 1073741824, -- 1 GB
triminterval = 120, -- max every 2 minutes
maxage = 172800, -- 2 days
}
}
서버 호스트 컴퓨터의 {ZenInstall} 폴더로 다음 파일을 복사
- Engine\Binaries\Win64\zenserver.exe
- Engine\Binaries\Win64\zenserver.pdb
- Engine\Binaries\Win64\crashpad_handler.exe
- Engine\Binaries\Win64\zen.exe
- Engine\Binaries\Win64\zen.pdb
이 파일들은 {ZenInstall} 폴더 수준에 전부 배치되며, 선택한 {ZenInstall} 폴더의 어떤 서브디렉터리에도 배치되면 안 됩니다.
서비스 생성
아래 명령어들은 관리자 권한으로 실행해야 합니다.
sc create "Zen Store" start=auto binpath="{ZenInstall}\zenserver.exe --config={ZenInstall}\zen_config.lua" obj={ZenUser} password={ZenPassword}

sc failure "Zen Store" reset=60 actions=restart/60000
서비스 시작 / 삭제
sc start "Zen Store"
sc delete "Zen Store"
Server_IP_Address:8558/dashboard 로 접속하였을 때 연결이 되면 성공입니다.

그리고 ZenUsers에게 8558 포트에 대한 권한을 주어야 합니다.
저 같은경우 모두에게 권한을 주었습니다.
8558 포트 엔드포인트 URL 권한
netsh http show urlacl
netsh http delete urlacl url=http://*:8558/
netsh http add urlacl url=http://*:8558/ user=\Everyone
클라 설정
DefaultEngine.ini
[StorageServers]
Local=(Namespace="{DDC_Name}.ddc")
Shared=(Host="{Server_IP_Address:8558}", Namespace="{DDC_Name}.ddc", EnvHostOverride=UE-ZenSharedDataCacheHost, CommandLineHostOverride=ZenSharedDataCacheHost, DeactivateAt=60)
[Zen.AutoLaunch]
;DataPath=%GAMEDIR%DerivedDataCache/Zen/Data
기존 DDC방식의 Local이랑 Zen방식의 Local도 있습니다.
ZenLocal 경로는 기본적으로 사용자 폴더로 되어있습니다.
위와 같이 DataPath를 설정하게되면 프로젝트마다 DDC 공간이 생기니 기본 경로(AppData)를 사용하는게 좋습니다.


ZenLocal 과 ZenShared 연결이 성공적으로 완료되었다면 캐시 통계에서 확인할 수 있습니다.
만약 캐시 통계에서 Zen 관련이 나타나지 않는다면 DerivedDataBackendGraph 에 ZenLocal 노드와 ZenShared 노드를 추가합니다.

아래와 같이 ZenLocal / ZenShared 가 추가되면 성공적으로 연결된 것입니다.

언리얼 엔진의 젠 스토리지 서버를 쿠킹된 출력 저장소로 사용하기 | 언리얼 엔진 5.7 문서 | Epic Developer Community
프로젝트 세팅 - 패키징에서 Zenserver를 쿠킹된 출력 저장소로 사용(Use Zenserver as cooked output store) 를 활성화 합니다.

쿠킹 결과물이 수백만 개의 작은 파일로 쌓이면, Windows I/O작업, 보안, 메타데이터 때문에 쿠킹이 느려지고 삭제도 느립니다.
그래서 해당 옵션을 활성화하면, 파일을 수백만 개로 안 만들고 Zen이 큰 블록 파일 몇 개로 묶어서 저장해줘서 훨씬 빨라지고 안정적이게 됩니다.
언리얼 엔진의 젠 스토리지 서버를 사용하는 쿠킹된 데이터 스냅샷 | 언리얼 엔진 5.7 문서 | Epic Developer Community
기존엔 ZenLocal이 에디터 실행중일때만 활성화가 되었지만, 에디터가 꺼져있을때도 백그라운드로 실행합니다.
DefaultEngine.ini 수정
[Zen.AutoLaunch]
LimitProcessLifetime=false
AllowRemoteNetworkService=true

'언리얼' 카테고리의 다른 글
| SetViewTarget (0) | 2026.03.12 |
|---|---|
| DerivedDataBackendGraph (0) | 2025.12.24 |
| Deproject 위젯 -> 월드 (1) | 2025.11.18 |
| World Widget Depth Test (0) | 2025.09.24 |
| Custom Depth Stencil Pass (0) | 2025.09.19 |