작은 VPS 한 대로 만든 게임 서버 함대
우리의 모든 온라인 월드, 즉 포털과 공식 월드, 플레이어들이 만든 월드는 임대한 리눅스 서버(VPS) 한 대에서 돌아가요. 데이터 센터도, 다섯 자리 숫자의 클라우드 청구서도 없어요. 이 글에서는 서버를 어떻게 구성했는지, 그 과정에서 무엇을 배웠는지 보여 드릴게요.
먼저 단단하게. 게임을 서버에 올리기 전에 기본 보안이 먼저였어요. 꼭 필요한 포트만 여는 방화벽(ufw), 자동화된 로그인 시도를 막는 fail2ban, 키로만 접속하는 SSH예요. 리버스 프록시로는 Docker 버전의 Caddy를 쓰는데, TLS 인증서를 자동으로 받아 오고 요청을 알맞은 컨테이너로 보내 줘요.
월드마다 컨테이너 하나. 게임 자체는 Docker 이미지로 돌아가고, 월드마다 고정된 한도를 가진 컨테이너를 따로 받아요. 월드당 RAM 768MB와 CPU 코어 2개이고, 동시에 켜질 수 있는 월드는 최대 열 개예요. 그러면 월드 하나 때문에 서버 전체가 무너질 일은 없어요.
우리를 불러 주는 모니터링. Netdata가 “디스크가 차오르는 중”부터 “포털이 응답하지 않음”까지 140개가 넘는 알람으로 서버를 지켜봐요. 뭔가 걸리면 휴대폰으로 푸시 알림이 와요(ntfy를 써요). 덕분에 플레이어보다 먼저 문제를 알게 돼요.
가장 놀라운 발견: 유휴 상태에서 측정해 보니 사용 중인 메모리의 대략 절반은 게임이 아니라 Docker와 모니터링 자체가 쓰고 있었어요. 게임을 떠받치는 인프라가 가만히 있을 때는 게임보다 더 무거운 거예요. 짐작하지 말고 측정해야 한다는 걸 잘 일깨워 줘요.
몇 달 운영해 본 결론은 이래요. 제대로 단단하게 만든 작은 서버 한 대로도 인디 멀티플레이어 게임을 충분히 돌릴 수 있어요. 한도를 정하고 계속 지켜본다면요.
댓글