---
type: tutorial
title: 커스텀 게임을 게이트 가능하게 만들기
summary: 자체 호스팅 게임의 헤드리스 재생 산출물을 업로드해 서버가 판정을 다시 도출하게 하세요, 커스텀 게임이 게임 게이트를 충족하게 하는 단계.
---

[자체 호스팅 게임](/docs/custom-game-development/self-hosted-game)은 `game-src`를 그것으로 향하게 하는 즉시 돌고 검증합니다. 하지만 방문자가 통과하려면 그것을 풀어야 하는 [게임 게이트](/docs/site-keys/games)로 쓰려면, Caputchin은 브라우저를 신뢰하는 게 아니라 결과를 직접 다시 도출할 수 있어야 합니다. 그것이 **재생 산출물**의 목적입니다. 이 튜토리얼이 끝나면 당신의 커스텀 게임은 게이트 자격이 됩니다.

이것이 결정론의 보상입니다: 당신의 게임이 [트레이스](/docs/custom-game-development/self-hosted-game)를 기록하고 모든 것을 시드에서 도출하므로, 서버는 당신 로직의 헤드리스 사본을 같은 시드와 트레이스를 상대로 돌려 같은 판정에 독립적으로 닿을 수 있습니다.

## 재생 산출물이 무엇인가

산출물은 렌더링도, DOM도, 네트워크도 없는, 그저 당신의 **게임 로직**의 작고 자족적인 JavaScript 번들입니다. 서버는 그것을 격리된 샌드박스에 로드하고 돌려 `(seed, trace)`에서 판정을 냅니다. 그것은 당신의 플레이 가능한 게임이 아닙니다; 그것은 당신의 플레이 가능한 게임의 헤드리스 심판입니다.

두 속성이 필수입니다:

- **자족적.** 아이솔레이트가 해소할 수 없는 어떤 것도 임포트할 수 없습니다; 모든 것을 번들에 넣으세요. 업로드는 2 MB로 제한되며, 그것은 전형적인 로직 번들을 훨씬 넘습니다.
- **결정론적이고 라이브 게임과 일치.** 같은 시드와 당신의 라이브 게임이 낸 트레이스가 주어지면, 라이브 게임이 주장한 같은 판정에 닿아야 합니다. 그것들이 어긋나면, 진짜 플레이어가 거짓 거부를 받습니다.

## 1. 커스텀 게임 등록하기

아직 안 했다면, 게임이 id와 산출물을 담을 곳을 갖도록 대시보드에서 등록하세요. 사이트 키(또는 팀)의 **게임** 페이지에서, **게임 추가** 패널의 **커스텀 게임** 입력을 쓰세요: id를 입력하고 **Define**을 클릭하세요. 이 단계는 [커스텀 게임](/docs/game-customization/custom-games)을, 당신이 정의하는 [스키마](/docs/custom-game-development/dashboard-schema)를 보세요.

## 2. 산출물 업로드하기

등록된 게임의 **설정** 탭에서, 재생 번들을 업로드하세요. 그것은 단일 파일로 보내집니다; Caputchin이 그것을 콘텐츠 해싱하고(같은 바이트 다시 업로드는 no-op) 즉시 **자체 확인**을 돌립니다.

## 3. 자체 확인

자체 확인은 당신이 업로드한 산출물을 재생 아이솔레이트에서 합성 시드(그리고 당신이 제공하면, 당신이 커밋한 트레이스 샘플)를 상대로 돌리고 그것이 깔끔한 판정을 냈는지 기록합니다:

- **통과** → 설치가 게이트 자격이 됩니다. **재생 불가** 배지가 지워지고, 이제 이 게임을 풀에 둔 채 [게임 요구](/docs/site-keys/games)를 켤 수 있습니다.
- **실패** → 산출물은 여전히 저장되지만(오류를 들여다볼 수 있도록), 설치는 게이트 비자격으로 남습니다. 로직을 고치고 다시 업로드하세요.

실패한 자체 확인은 헤드리스 심판이 자기 자신과 일치하지 않거나 돌 수 없다고 시스템이 당신에게 말하는 것입니다; 그것은 정확히 프로덕션에서 거짓 거부를 일으켰을 그 불일치를, 어떤 방문자가 닿기 전에 잡은 것입니다.

## 4. 게이트 켜기

자체 확인이 통과하면, 게임은 키의 [게이트 풀](/docs/site-keys/games)에 있습니다. 키의 보안 페이지에서 **게임 요구**(또는 팀의 게임 강제 천장)를 켜면, Caputchin이 당신의 커스텀 게임을 내고, 플레이어의 트레이스를 받고, 각 검증을 정하려고 당신의 산출물을 서버 측에서 다시 실행합니다.

## 둘을 동기화 유지하기

라이브 게임(`game-src`로 로드됨)과 재생 산출물은 같은 로직의 두 빌드입니다. 결과에 영향을 주는 무엇이든 바꿀 때, 둘이 여전히 일치하도록 산출물을 다시 빌드하고 다시 업로드하세요. 그것들이 드리프트하면, 자체 확인이나 프로덕션 리플레이가 진짜 승리를 거부하기 시작합니다. 하나의 공유 로직 모듈에서 둘 다 빌드하는 것이 그것들을 동일하게 유지하는 믿을 만한 방법입니다.

## 함께 보기

- [자체 호스팅 게임 빌드하기](/docs/custom-game-development/self-hosted-game): 이 산출물이 리플레이하는 트레이스 내기.
- [게임과 게임 게이트](/docs/site-keys/games): 게이트 켜기와 재생 가능성 요건.
- [커스텀 게임](/docs/game-customization/custom-games): 등록과 재생 불가 배지.
- [대시보드 스키마 레퍼런스](/docs/custom-game-development/dashboard-schema): 게임이 그 팩토리 컨텍스트에서 읽는 필드.
