Java Spring Bootで実装されたマッチングシステムのバックエンドAPIサーバー
- API①: チームスペース作成
- API②: チーム参加
- API③: チーム脱退
- API④: ゲーム開始
- WebSocket: リアルタイム通知(メンバーリスト更新、partyId通知)
- Java 17
- Spring Boot 3.2.0
- Redis (Elasticache for Redis)
- AWS Cognito (JWT認証)
- WebSocket (Spring WebSocket)
以下の環境変数を設定してください:
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# Cognito
COGNITO_USER_POOL_ID=ap-northeast-1_ySe4wHv7r
COGNITO_REGION=ap-northeast-1cd UnityServer
gradle wrapper --gradle-version 8.5./gradlew build./gradlew bootRunまたは
java -jar build/libs/unity-server-0.0.0-SNAPSHOT.jarサーバーは http://localhost:8080 で起動します。
チームスペースを作成します。
Request:
{
"userId": "user-123"
}Response (201 Created):
{
"teamspaceId": "550e8400-e29b-41d4-a716-446655440000"
}チームに参加します。
Request:
{
"teamspaceId": "550e8400-e29b-41d4-a716-446655440000",
"userId": "user-456"
}Response (200 OK):
{}チームから脱退します。
Request:
{
"teamspaceId": "550e8400-e29b-41d4-a716-446655440000",
"userId": "user-456"
}Response (200 OK):
{}ゲームを開始します。
Request:
{
"teamspaceId": "550e8400-e29b-41d4-a716-446655440000",
"userId": "user-123"
}Response (200 OK):
{
"partyId": "660e8400-e29b-41d4-a716-446655440001"
}WebSocketエンドポイント: ws://localhost:8080/ws?teamspaceId={teamspaceId}&userId={userId}
{
"type": "memberList",
"userIds": ["user-123", "user-456"]
}{
"type": "partyId",
"partyId": "660e8400-e29b-41d4-a716-446655440001"
}すべてのAPIエンドポイントはCognitoアクセストークンによる認証が必要です。
Header:
Authorization: Bearer <Cognitoアクセストークン>
ログは標準出力・標準エラー出力に出力され、ECSタスク定義によりCloudWatch Logsの/ecs/matching-apiロググループに自動送信されます。
構造化ログ(JSON形式)も出力されます。
docker build -t unity-server .
docker run -p 8080:8080 \
-e REDIS_HOST=your-redis-host \
-e COGNITO_USER_POOL_ID=your-pool-id \
unity-server