콘텐츠로 이동

개요

간단히 말해 여러 서버를 하나로 묶는 것이다(흔히 보는 “야생 1서버”, “야생 2서버” 같은 구성). 플레이어는 접속을 끊었다 다시 들어올 필요 없이 원하는 서버로 자유롭게 이동할 수 있다.

서버 사이의 데이터는 크로스서버 동기화 플러그인(예: HuskSync)과 데이터베이스로 맞춘다. 흔히 말하는 프록시 네트워크도 같은 뜻이다. 일반적인 구성은 다음과 같다.

프록시 하나(Velocity / BungeeCord 등)와 여러 백엔드 서버(Paper / Purpur / Leaf 등). 플레이어는 프록시에만 접속하고, 프록시가 백엔드 서버와 통신해 플레이어를 해당 서버로 보내 준다.

로그인 서버, 야생 서버, 자원 서버 세 개가 있고 각각 정상적으로 접속해 플레이할 수 있다고 하자.

이 세 서버를 프록시 네트워크로 묶고 싶다면 보통 구조는 다음과 같다.

프록시 네트워크를 다 구축했다면 정상적인 흐름은 다음과 같다.

플레이어가 클라이언트로 프록시에 접속하면, 프록시가 플레이어를 각 백엔드 서버로 보낸다. 플레이어는 몇 가지 방법으로 백엔드 서버를 옮겨 다닐 수 있는데, 차원 이동과 비슷한 느낌이라 서버가 바뀐 줄도 모를 수 있다.

  1. Minecraft는 사실상 단일 코어로 돌아가는 게임이라, 플레이어가 50~100명을 넘으면 거의 어떤 서버 코어도 쾌적함을 보장하지 못한다(Folia 제외). 서버를 여러 개로 나누면 멀티코어를 제대로 활용할 수 있으니 큰 서버에는 필수다.

  2. 서버가 여러 개여도 프록시가 없으면 플레이어는 나갔다 다시 들어와야 하고 데이터도 공유되지 않는다. 서버를 두 개 열어 두는 것만으로는 의미 있는 연동이 안 된다. 그래서 서버 전환과 연동을 담당할 프록시가 필요하다.

  3. 서버가 하나뿐이어도 메모리에 조금 여유가 있다면(보통 1 GB 미만) 프록시를 쓰는 편이 좋다. 봇 공격 방어 성능은 서버보다 프록시가 낫다. 공격을 받고 있다면 일단 프록시부터 붙이자.

  4. 프록시에만 설치할 수 있는 플러그인도 있고, 이런 기능은 Bukkit 계열에서는 불안정할 수 있다(예: MultiLogin).

버전 때문에 Velocity의 modern 포워딩을 쓸 수 없는 경우가 아니라면 Velocity를 추천한다.

각 Minecraft 서버가 서로 다른 머신에 배치되어 프록시와 백엔드 서버 사이 연결이 불안정하다면, 바닐라 1.20.5에서 추가된 Transfer 명령어를 써 보는 것도 방법이다.

프록시 네트워크까지 만들었다면 서버 간 데이터 동기화도 필요할 것이다.

공통 | 데이터베이스를 참고하자.

보통 MySQL과 Redis 두 가지를 설치한다. MySQL은 계정과 비밀번호, 경제, 권한 같은 중요한 정보를 저장하고, Redis는 빠른 서버 간 동기화에 쓴다.