실시간 멀티플레이 블록 슈팅 게임 aptbreaker의 백엔드. Unity(C#) 클라이언트와 WebSocket 바이너리 프레임(Protobuf) 으로 통신하는 Spring Boot 서버이며, 헥사고날(Ports & Adapters) 아키텍처로 작성됐습니다.
| 저장소 | 역할 |
|---|---|
| backend | 게임 서버 (이 저장소) |
| frontend | Unity 클라이언트 (C#) |
| proto | 공유 Protobuf 정의 |
main— 헥사고날 모놀리스.auth/room/match/player바운디드 컨텍스트를 슬라이스별 ports & adapters 구조로 분리feat/msa-migration— 모놀리스를 4개 마이크로서비스로 분리한 브랜치:auth-service/room-service/ingame-service/player-stats-service+ Kafka(비동기 이벤트) · gRPC(동기 호출) · Redis(매치 상태 공유), docker-compose 인프라 포함
- 헥사고날 규칙 —
domain패키지는 proto·JPA·Spring을 참조하지 않으며, Protobuf ↔ 도메인 변환은 adapter 레이어에서만 수행합니다. 상세: docs/ARCHITECTURE.md - 서버 권위 판정 — 매치 틱 스케줄러(
@Scheduled(fixedDelay = 50), 20Hz)에서 게임 판정을 서버가 수행해 클라이언트 조작을 차단 - 게임 상태 in-memory — 영속성(JPA + PostgreSQL)은 플레이어/토큰만 담당하고, 실시간 게임 상태는 in-memory로 관리
- JWT 인증 — Access + Refresh 토큰. WebSocket 핸드셰이크 인증은 Query String으로 전달 (Unity WebGL의 커스텀 헤더 제약 대응)
Java 17 · Spring Boot · Gradle (Kotlin DSL, 멀티모듈: app + proto) · WebSocket · Protocol Buffers · JPA + PostgreSQL · MapStruct · TSID
MSA 브랜치 추가: Kafka · gRPC · Redis
# main (모놀리스)
./gradlew :app:bootRunfeat/msa-migration 브랜치는 docker-compose.yml로 Kafka·Redis·PostgreSQL을 기동한 뒤 각 서비스를 실행합니다.