์ด ํ๋ก์ ํธ๋ Google์ ์คํ์์ค ๋งค์นญ ํ๋ ์์ํฌ์ธ Open Match์ Kubernetes ๊ธฐ๋ฐ ๊ฒ์ ์๋ฒ ํธ์คํ ํ๋ซํผ์ธ Agones๋ฅผ ๊ฒฐํฉํ์ฌ ํ์ฅ ๊ฐ๋ฅํ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์ ๋งค์นญ ์์คํ ์ ๊ตฌํํ ์ํ์ ๋๋ค.
์์คํ ์ .NET 9.0 ๊ธฐ๋ฐ์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, gRPC๋ฅผ ํตํด ์๋น์ค ๊ฐ ํต์ ์ ์ํํฉ๋๋ค.
- LobbyServer: ํ๋ ์ด์ด์ ๋งค์นญ ์์ฒญ(RequestMatch) ์์ ๋ฐ ๋งค์นญ ์ํ(GetMatchStatus) ์กฐํ ๋ด๋น
- MatchDirector: ๋งค์นญ ์ฌ์ดํด(Cycle)์ ๊ด๋ฆฌํ๋ฉฐ Open Match Backend์์ ์์ฑ๋ ๋งค์น์ ๋ํด Agones Allocator๋ฅผ ํธ์ถํ์ฌ ์ค์ ๊ฒ์ ์๋ฒ๋ฅผ ํ ๋นํจ
- MatchFunction: ์ค์ ๋งค์นญ ๋ก์ง์ด ์คํ๋๋ ์ปดํฌ๋ํธ๋ก, ๋๊ธฐ ์ค์ธ ํฐ์ผ๋ค์ ํ(Pool)์์ ์กฐํํ์ฌ ๊ทธ๋ฃนํํจ
- GameServer: Agones Fleet์ ์ํด ๊ด๋ฆฌ๋๋ ์ค์ ๊ฒ์ ๋ก์ง ์๋ฒ (gRPC ๊ธฐ๋ฐ์ ๊ฐ๋จํ ์ฑํ ๋ฐ ํ๋ ์ด ์ปค๋งจ๋ ๊ตฌํ)
- Shared: ๊ฐ ์๋น์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ธ ๋ฐ ์ ํธ๋ฆฌํฐ ํด๋์ค
- Runtime: .NET 9.0 / .NET 8.0
- Frameworks: Open Match, Agones
- Communication: gRPC (Protocol Buffers)
- Containerization: Docker, Docker Compose
- Orchestration: Kubernetes (k8s)
- src/
- LobbyServer/: ์ ์ ์ง์ ์ gRPC ์๋น์ค
- MatchDirector/: ๋งค์นญ ์์ง ์ค์ฌ ๋ฐ ์๋ฒ ํ ๋น๊ธฐ
- MatchFunction/: ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ฒด
- GameServer/: ์ํ ์ ์ฉ ๊ฒ์ ์๋ฒ
- Shared/: ๊ณตํต ๋ฐ์ดํฐ ๋ชจ๋ธ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ