---
type: explanation
title: 당신 자신의 게임 돌리기
summary: 커스텀 게임 개발이 무엇인지, 당신 자신의 게임을 전달하는 두 방법(수동 슬롯 또는 자체 호스팅 iframe), 그리고 대시보드가 더하는 것(스키마, 프리셋, 그리고 커스텀 게임이 게이트하게 하는 재생 산출물).
---

커스텀 게임은 **당신**이 빌드해 호스팅하고, [마켓플레이스](/marketplace) 게임 대신 Caputchin 위젯에서 쓰는 게임입니다. 다른 누구도 그것을 설치할 수 없고, GitHub 토픽도 공개 단계도 없으며, 당신이 코드를 간직합니다. 이 섹션은 그 경로에 대한 상세한, 직접 빌드하는 가이드입니다. (*누구나* 임베드할 게임을 출시하고 싶다면, 그것은 별도 경로인 [마켓플레이스 게임 개발](/docs/marketplace-game-development/overview)입니다.)

커스텀 게임을 전달하는 두 방법이 있고, 그것들은 다른 한계를 둔 진짜로 다른 표면입니다. 당신이 필요로 하는 것으로 고르세요:

```mermaid
flowchart TD
  Q{무엇이 필요한가}
  Q -->|위젯에 내 DOM만,<br/>검증 게이트 없음| M[수동 모드]
  Q -->|검증을 게이트할 수 있는 진짜 게임,<br/>서버 리플레이됨| S[자체 호스팅 iframe 게임]
  M --> MX["&lt;caputchin-game trigger=manual&gt;<br/>당신의 마크업을 직접 슬롯<br/>pass() / fail()을 직접 몰아감"]
  S --> SX["@caputchin/game-sdk를 쓰는 JS 번들<br/>당신이 호스팅, game-src로 로드됨<br/>+ 대시보드에 업로드된 재생 산출물"]
```

## 수동 모드: 당신 자신의 DOM, 게이트 없음

[수동 모드](/docs/custom-game-development/manual-mode)는 가벼운 선택지입니다. `<caputchin-game>`에 `trigger="manual"`을 설정하고, 그 안에 당신 자신의 마크업을 넣고, 방문자가 성공하거나 실패할 때 당신 자신의 코드에서 요소의 `pass()` / `fail()` 메서드를 호출합니다. iframe도 게임 SDK도 없습니다; 위젯은 그저 그 레이아웃 셸과 당신의 마크업 둘레의 검증 배관을 줍니다.

절충: 수동 모드 라운드는 **서버 리플레이될 수 없으니**, 수동 모드 게임은 **[게임 게이트](/docs/site-keys/games)를 충족할 수 없습니다**. 그것은 게이트되지 않은 키에서만(proof-of-work 검증, 당신의 상호작용을 UX로), 또는 검증이 전혀 없는 게임 전용으로 돕니다. 리플레이가 필요한 보안 게이트가 아니라 브랜드된 상호작용에 그것을 쓰세요.

## 자체 호스팅 iframe 게임: 게이트할 수 있음

[자체 호스팅 게임](/docs/custom-game-development/self-hosted-game)은 진짜, 샌드박스된 게임입니다: 위젯의 iframe에서 돌고, SDK 브리지로 호스트와 이야기하고, 서버가 다시 실행할 수 있는 **트레이스**를 보고하는, `@caputchin/game-sdk` 패키지를 상대로 빌드된 JavaScript 번들. 당신이 번들을 직접 호스팅하고 `game-src` 속성으로 위젯을 그것으로 향하게 합니다.

라운드가 재생 가능한 트레이스를 내므로, 자체 호스팅 게임은 사이트 키를 **게이트할 수 있지만**, Caputchin에 [재생 산출물](/docs/custom-game-development/replay-and-gating)을 준 뒤에만입니다: 서버가 판정을 다시 도출하려고 돌리는, 당신 게임 로직의 작은 헤드리스 빌드. 그 산출물이 업로드되어 그 자체 확인을 통과하기 전까지, 커스텀 게임은 **재생 불가**로 보이고 게이트할 수 없습니다.

## 대시보드가 더하는 것

마켓플레이스 게임은 그 맞춤화 필드를 선언하는 `caputchin.json` 매니페스트를 냅니다. 커스텀 게임에는 매니페스트가 없으니, 대신 **당신이 그 필드를 대시보드에서 선언합니다**: 당신이 고르는 id로 [커스텀 게임을 등록](/docs/game-customization/custom-games)하고, 축별(언어, 스킨, 구성)로 그 필드 [스키마](/docs/custom-game-development/dashboard-schema)를 정의하고, 그것을 상대로 프리셋을 작성합니다. 거기서부터 그것은 마켓플레이스 게임과 정확히 똑같이, 같은 요금제 등급에서 해소되어 적용됩니다.

그래서 전체 커스텀 게임 표면은:

| 조각 | 어디서 | 무엇에 필요한가 |
|---|---|---|
| 게임 자체 | 당신의 코드, 당신의 호스트 | 늘 |
| 전달 | `trigger="manual"` 슬롯, 또는 `game-src` iframe | 늘 |
| 필드 스키마 + 프리셋 | 대시보드(당신이 스키마를 정의) | 언어 / 스킨 / 구성 맞춤화 |
| 재생 산출물 | 대시보드 업로드 | 검증 게이트(자체 호스팅만) |

## 함께 보기

- [수동 모드](/docs/custom-game-development/manual-mode): 당신 자신의 DOM을 슬롯하고 pass/fail을 몰아가기.
- [자체 호스팅 게임](/docs/custom-game-development/self-hosted-game): SDK로 재생 가능한 iframe 게임 빌드하기.
- [재생과 게이팅](/docs/custom-game-development/replay-and-gating): 커스텀 게임이 게이트하게 하는 산출물 업로드하기.
- [대시보드 스키마 레퍼런스](/docs/custom-game-development/dashboard-schema): 커스텀 게임에 정의하는 필드 스키마.
- [커스텀 게임](/docs/game-customization/custom-games): 고객 측에서의, 등록과 호스팅.
