Rust로 웹용 게임서버를 구축했습니다.
Rust로 웹용 게임서버를 구축했습니다.
Go, cpp, Rust 등 몇 개 게임서버 언어 후보군 중 결과적으로 Rust를 선택했습니다. 그리고 얼마 전에 Space Zero 프로덕션에 반영되어서 문제없이 동작하고 있습니다. 사실 게임서버라는 게 성능도 중요하지만 얼마나 안정적으로 동작하고 또 치트를 방어할 수 있냐가 중요한 요소로 작용하는데요. Rust는 그런 모든 면에서 좋은 선택지 중 하나였습니다.
- 물리엔진과의 통합
Space Zero는 Rapier 물리엔진을 채택하고 있습니다. Rapier는 Rust로 개발된 엔진이고 WASM으로 포팅해서 브라우저 용으로 동시에 사용할 수 있죠. 그렇기에 웹 & 서버 모두에서 사용 가능합니다. 높은 호환성 덕분에 게임 서버를 Rust로 만들어두면 물리 검출을 통해 치트를 사용했는지 여부를 일정 부분 걸러낼 수 있습니다. 물론 클라이언트 상에서의 조작은 막기 어렵겠지만 광역으로 적을 죽이거나 모든 플레이어를 추방시키는 등의 심각한 치팅은 대부분 막아낼 수 있습니다.
결과적으로 클라이언트-서버 동시 검증이 가능해져서 더 빠른 치팅 처리가 가능합니다.
- 메모리 보안
Rust의 특징중 하나인 메모리 보안은 게임서버에서 유리하게 작용합니다. 서버의 조작을 원천 차단 가능하고 높은 보안성 덕분에 게임서버에 적합합니다. 런타임에서 GC 없이도 안정성을 확보할 수 있어서 프레임 드롭 없이 실시간 처리도 가능합니다.
게다가 예기치 못한 에러도 사전 컴파일 단계에서 대부분 잡아내기에 중간에 서버를 유지보수할 일도 적어집니다. 게임 서버 특성상 중간 점검과 같은 단계가 필요하기 마련인데, 사실상 무중단으로 게임서버 운영을 할 수 있게 되니 유저 경험도 압도적으로 좋아집니다.
- 실시간 & 성능
Rust는 cpp를 대체하기 위해 만들어진 언어입니다. 지금까지의 게임 서버가 실시간 성능을 이유로 cpp를 채택한 것을 미루어 볼때 Rust 또한 실시간 성능에 적합하다고 봅니다. 더불어 cargo 패키지 매니저를 기반으로 한 좋은 생태계도 성능을 끌어올리는데 도움이 됩니다. 웹소켓 라이브러리와 통신 라이브러리도 잘 만들어져 있으며 자체적으로 구축할 수도 있죠. 대표적인 예시가 클라우드플레어일 듯하네요.
클라우드플레어의 경우 http 프록시를 Rust로 자체 구축해서 전체 시스템 효율을 높인 사례가 있습니다. 최근에는 WAF도 Rust로 작성하면서 보안과 안정성 그리고 성능을 잡았다고 합니다. 저수준 네트워크에 강점이 있는 언어인 만큼 높은 성능과 실시간성을 요구하는 게임서버에도 적합하다 볼 수 있습니다.