# PlayDrop 게임 서버: Colyseus, MongoDB 및 서버 SDK

PlayDrop 게임을 위한 선택형 호스팅 멀티플레이어입니다. MongoDB 저장소를 쓰는 Colyseus server.js를 업로드하고, 테스트 플레이어로 테스트하고, 친구와 AI 기능에는 선택형 서버 SDK를 사용하세요.

Source: https://www.playdrop.ai/ko/docs/server-sdk

게임 서버는 선택 사항입니다. 게임에서 직접 운영하는 어떤 서버든 호출할 수 있습니다. 원한다면 PlayDrop이 MongoDB 데이터베이스를 갖춘 표준 Colyseus 서버를 게임용으로 호스팅해 드립니다. [PlayDrop Connector](https://www.playdrop.ai/ko/docs/connectors)로 `index.html` 옆에 `server.js`로 업로드하거나, [PlayDrop Cloud](https://www.playdrop.ai/ko/create)에 만들어 달라고 요청하세요. `@playdrop/server` 패키지도 선택 사항입니다.

## 표준 Colyseus 서버 작성하기

`server.js`에서 `rooms` 맵을 내보내고, 룸 이름을 [catalogue.json](https://www.playdrop.ai/ko/docs/catalogue-json)에 `"server": { "rooms": ["game"] }` 형식으로 나열하세요. 서버는 PlayDrop이 실행하므로 직접 시작하지 마세요. 데이터는 룸 수명 주기 안에서 `PLAYDROP_MONGO_URL`을 통해 표준 MongoDB 드라이버로 저장하세요.

```js
import { Room, defineRoom } from "colyseus";
import { MongoClient } from "mongodb";

class GameRoom extends Room {
  async onCreate() {
    this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
    await this.mongo.connect();
  }
  onJoin(client) {
    // client.auth is the verified PlayDrop player, for example client.auth.userId.
  }
  async onDispose() { await this.mongo?.close(); }
}

export const rooms = { game: defineRoom(GameRoom) };
```

## 호스팅 서버 규칙

- Colyseus 0.17(`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), MongoDB 드라이버 7.5, Node 22.
- 최대 2 MiB의 독립적인 ES 모듈 하나. `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb`, `@playdrop/server`만 import할 수 있으며, 그 밖의 코드는 파일 안에 번들로 포함하세요.
- 룸 유형 최대 2개, 룸당 플레이어 8명, 룸당 4시간, 플레이어당 초당 메시지 30개, 메시지당 512 KiB.
- 서버에서는 인터넷에 접근할 수 없습니다. MongoDB와 PlayDrop 서비스에만 연결됩니다.
- 플레이어는 로그인해야 합니다. PlayDrop이 참여 시점에 각 플레이어를 검증하므로 `onAuth`를 구현하지 마세요.
- 게임마다 MongoDB 데이터베이스가 하나씩 제공되며, 버전이 바뀌어도 유지되고 저장 공간 할당량에 포함됩니다. 데이터베이스 자격 증명은 절대 브라우저로 보내지 마세요.

## 브라우저 연결 및 테스트

브라우저에서는 [클라이언트 SDK](https://www.playdrop.ai/ko/docs/sdk)의 `sdk.multiplayer.getConnection()`이 서버 주소와 플레이어의 토큰을 반환하며, Colyseus 클라이언트(`@colyseus/sdk` 0.17)로 참여합니다. 개발 중에는 Colyseus 0.17과 MongoDB 8을 로컬에서 실행하고 로컬 서버에 직접 연결하세요. 호스팅 서버를 테스트하려면 비공개 버전을 업로드한 뒤 `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`을 열고, 두 번째 창에서 `player=2`로 바꾼 같은 링크를 여세요. 각 창은 서로 다른 테스트 계정으로 플레이합니다. 잘 작동하면 게임 페이지에서 해당 버전을 공개로 전환하세요.

## 선택형 서버 SDK: 친구 및 AI

`@playdrop/server`는 `playdrop.social`(이 게임을 플레이하는 친구와 PlayDrop Chat의 게임 카드)과 `playdrop.ai`(크리에이터가 비용을 부담하는 텍스트, 이미지, 3D, 동영상, 사운드, 음성, 음악 생성)를 추가합니다. 이 호출은 업로드된 게임에서만 작동하며 로컬 개발 환경에서는 작동하지 않습니다. 비공개로 생성된 미디어는 서버에서 `playdrop.ai.tasks.downloadFile`로 다운로드하고, 바이트 데이터는 의도한 플레이어에게만 보내세요. 음성 요청은 최대 40단어까지 허용됩니다.
