Quilkin 소개: 게임 서버 통신을 위해 빌드된 오픈소스 UDP 프록시
Mark Mandel
Developer Advocate
* 본 아티클의 원문은 2021년 7월 16일 Google Cloud 블로그(영문)에 게재되었습니다.
기존에 실시간 멀티플레이어 게임 전용 게임 서버는 한 게임에서 여러 플레이어의 통신과 게임플레이 동기화를 위해 맞춤 UDP 프로토콜을 사용했습니다. 이러한 통신은 모놀리식 게임 서버 및 클라이언트에 포함되어 커스텀 네트워크 물리 동기화, 보안, 액세스 제어, 원격 분석 및 측정항목과 같은 통신 프로토콜의 기술적 기능과 물리 시뮬레이션, AI 연산 등 고도의 컴퓨팅 요구사항을 결합하는 경우가 많습니다.
Embark Studios와 공동 개발한 Quilkin은 고성능 실시간 멀티플레이어 게임을 위해 맞춤 제작된 UDP 프록시입니다. 이 프록시의 목표는 두 가지입니다.
모놀리식 전용 게임 서버 및 클라이언트에서 보안, 액세스 제어, 원격 분석, 측정항목 등의 공통 기능을 가져옵니다.
이러한 공통 기능을 구성 및 설정 가능한 방식으로 제공하여 광범위한 멀티플레이어 게임에서 재사용할 수 있습니다.
이 재사용 가능한 기반 덕분에 게임 개발자가 공통된 요소 대신 멀티플레이어 통신 프로토콜을 빌드하는 게임별 요소에 더 많은 시간을 할애할 수 있습니다.
멀티플레이어 게임 서버 통신의 과제
빠른 속도의 멀티플레이 게임에서는 일반적으로 네트워크 물리 및 AI 시뮬레이션부터 클라이언트와 서버 간 통신에 이르기까지 모든 작업을 담당하는 모놀리식 전용 게임 서버의 메모리에서 게임플레이 세션의 전체 시뮬레이션이 진행됩니다.
게임의 전체 상태가 메모리에 상주하므로 각 클라이언트에서 플레이어가 이용하고 있는 전용 게임 서버에 직접 연결하는데 이로 인해 여러 가지 문제가 발생합니다.
- 각각의 전용 게임 서버가 단일 장애점이 됩니다. 다운되면 전체 게임 세션(경우에 따라 여러 세션)이 실패합니다. 이 때문에 악의적인 행위자의 표적이 됩니다.
- 게임 서버의 IP 및 연결 포트가 공개되어 게임 클라이언트에 노출되기 때문에 쉽게 발견되어 공격 대상이 됩니다.
- 게임 서버 시뮬레이션 및 네트워크 통신의 여러 측면이 동일한 프로세스에서 긴밀하게 연결되어 재사용과 모듈화가 어려워지고 성능 문제가 발생할 위험이 커집니다.
지난 몇 년간의 웹 기술과 모바일 기술을 살펴보면 이와 같은 몇 가지 과제를 공통적으로 안고 있음을 알 수 있습니다. 다행히 전용 서버 워크로드의 분산된 중복 조정을 유도하는 데 도움이 되는 솔루션이 있으며 그 중 하나가 바로 트래픽 프록시를 활용하는 것입니다.
Google Cloud에서 사용할 수 있는 것과 같이 지연 시간이 짧은 네트워크의 전용 게임 서버 앞에 멀티플레이어 UDP 트래픽용 프록시를 사용하면 다음과 같은 주요 과제를 해결할 수 있습니다.
- 안정성 강화. 프록시는 중복된 통신 진입점을 제공합니다. UDP 패킷을 원하는 수의 프록시에 전송하여 전용 게임 서버에 라우팅할 수 있습니다. 전용 게임 서버가 여전히 일반적인 단일 장애점이겠지만 프록시가 통신 레이어의 중복성과 잠재적 장애 조치를 개선해 줍니다.
- 보안 강화. 더 이상 전용 게임 서버의 IP 및 포트가 공개되지 않습니다. 게임 클라이언트가 프록시 풀의 하위 집합에 대한 가시성만 가질 수 있어 공격에 노출될 수 있는 영역이 제한됩니다.
- 확장성 강화. 통신 프로토콜, 측정항목, 통신 보안, 액세스 제어를 프록시로 이전할 수 있어 단일 프로세스를 분할하기 시작했습니다. 이로 인해 게임 서버의 처리 루프에서 게임 이외의 컴퓨팅이 제거됩니다.
그 결과, 성능을 고려함은 물론 악의적인 행위자에 대비한 부하 분산을 위해 프록시를 독립적으로 확장할 수 있어 전체 시스템의 복원력이 향상됩니다.
Quilkin 소개: Game Servers용 UDP 프록시
Embark Studios와 Google Cloud는 공동으로 Quilkin을 빌드하여 표준 오픈소스 솔루션을 제공하고 있습니다. 스톡홀름에 위치한 Embark Studios는 업계 경력자들로 구성된 (비교적) 신생 스튜디오입니다. Embark Studios는 대규모 실시간 멀티플레이어 게임 분야에서 많은 경험을 쌓아 Quilkin을 공동 개발하기에 완벽한 파트너였습니다.
Quilkin은 대규모 멀티플레이어 전용 게임 서버 배포에 사용하여 보안, 액세스 제어, 원격 분석 데이터, 측정항목 등을 지원하도록 특별히 설계된 투명하지 않은 오픈소스 UDP 프록시입니다.
Quilkin은 게임 클라이언트의 백그라운드는 물론 전용 게임 서버 앞에 사용되도록 설계되며 다음과 같은 주요 이점을 제공합니다.
- 난독화. UDP 데이터가 투명하지 않은 프록시로 처리되어 게임 아키텍처의 내부 상태가 악의적인 행위자에게 잘 드러나지 않습니다.
- 즉시 사용 가능한 측정항목. UDP 패킷 트래픽 및 통신 측정항목이 지원됩니다.
- 가시성. 구성 가능한 처리 필터 집합을 라우팅, 액세스 제어, 비율 제한 등에 적용할 수 있습니다.
- 유연성. 사용자가 원하는 시스템 통합 수준 또는 빌드할 커스텀 처리 필터에 따라 클라이언트/서버 변경이 필요 없는 독립 실행형 바이너리로 활용하거나 Rust 라이브러리로 사용할 수 있습니다.
- 호환성. 필요한 경우 Rust FFI를 통해 기존 C/C++ 코드베이스와 통합할 수 있습니다.
- 온보딩. 여러 통합 패턴이 지원되어 아키텍처 및 기존 플랫폼에 적합한 통합 수준을 선택할 수 있습니다.
지금까지는 자체 독점 기술을 구축할 리소스를 갖춘 대형 게임 스튜디오에서만 이러한 기능을 사용할 수 있었습니다.
Embark Studios는 게임 업계 종사자 모두에게 공평한 경쟁의 장을 마련하는 것이 중요하고 가치 있는 시도라고 생각합니다. Google Cloud와 협력하여 이 프로젝트를 시작한 이유가 바로 여기에 있습니다.
Embark는 오픈소스가 게임 산업의 미래이며 기업 간 개방적인 협업이 앞으로 나아가야 할 방향이라고 생각합니다. 그래야 규모를 불문하고 모든 스튜디오가 동일한 수준의 기술 역량을 갖출 수 있습니다.
루나 듀클로스, Embark Studios 기술 책임자
Google Cloud의 게임용 오픈소스 솔루션 포트폴리오에 최근 Quilkin이 추가되었다는 소식을 알려드리게 되어 기쁩니다. Quilkin은 게임 서버용 Agones, 랜덤 대결에 사용되는 Open Match, 지속성을 위한 Open Saves와 같은 기존 OSS 솔루션을 보완해 줍니다. 이러한 솔루션은 개방적인 통합 게임 생태계에서 함께 작동하도록 설계되었습니다. Ubisoft, Unity, 2K Games에 이어 최근에는 Embark Studios와 게임 분야에서 오픈소스 협업을 진행하게 된 것을 자랑스럽게 생각합니다. Google Cloud는 앞으로도 업계 및 커뮤니티의 파트너들과 긴밀히 협력하며 세계 최대 규모의 게임을 지원하는 세계적 수준의 솔루션을 제공할 것입니다.
롭 마틴, Google Cloud for Games 수석 설계자
Quilkin 시작하기
Quilkin은 위에 설명한 고급 배포 시나리오를 지원할 수 있지만 Quilkin을 시작하는 가장 쉬운 방법은 기존 전용 게임 서버의 사이드카로 배포하는 것입니다. 처음에는 몇 가지 이점이 제한적으로 제공될 수 있지만 UDP 통신에 대한 측정항목 및 원격 분석 데이터를 쉽게 얻을 수 있고 진입 장벽이 낮으며 시간이 지나면서 확장이 가능한 방법입니다.
Quilkin은 바이너리 및 컨테이너 이미지로 출시되지만 특정 호스팅 플랫폼에 의지하지 않으므로 이 예시에서는 Agones 및 Google Cloud Game Servers를 게임 서버 호스팅 플랫폼으로 사용합니다.
먼저 ConfigMap을 만들어 Quilkin의 정적 구성에 대한 yaml을 저장합니다. 그러면 포트 26001에 대한 연결을 수락하고 포트 26000의 Xonotic(오픈소스 멀티플레이어 FPS 게임) 전용 게임 서버로 라우팅합니다.그런 다음 Agones에서 제공하는 Xonotic 전용 게임 서버에 대한 예시 컨테이너를 가져와 다음과 같이 게임 서버의 Agones Fleet에서 Quilkin을 각 전용 게임 서버와 함께 사이드카로 실행합니다.
적용한 후 실행 중인 GameServers의 클러스터를 쿼리하면 Quilkin을 제외하고는 모든 것이 동일하게 유지되어 있습니다. 시스템의 다른 부분에서는 트래픽을 가로챈다는 사실을 알아야 할 필요가 없으며 클라이언트나 서버 코드를 조정하지 않고도 Quilkin의 기능을 자유롭게 활용할 수 있습니다.
관심이 있으시다면 둘러보기를 살펴보세요. 둘러보기에서는 이 시나리오를 설명한 후 프로그램 변경 없이 UDP 패킷을 게임 클라이언트에서 서버로 압축하는 과정을 다룹니다.
다만 여기서 다루는 내용은 일부에 불과합니다. Quilkin에는 xDS 준수 Admin API, UDP 패킷을 조작하고 라우팅하는 여러 기존 필터 등도 포함되어 있습니다.
Quilkin의 미래
Quilkin은 아직 초기 단계로서 0.1.0 알파 버전이 출시되었을 뿐이지만 토대를 마련했다는 점에서 의의가 있습니다.
로드맵에 향상된 측정항목 및 원격 분석, 새로운 필터 및 필터 유형 등 다양한 기능이 계획되어 있습니다.
이 출시 버전을 사용해보고 싶다면 출시 페이지에서 바이너리 또는 컨테이너 이미지를 얻을 수 있습니다. 빠른 시작을 단계별로 수행하고 전용 게임 서버의 여러 통합 옵션을 검토해 보세요.
프로젝트에 참여하려면 다음 안내를 따르세요.
- GitHub 저장소 확인
- Discord 커뮤니티 참여
- quilkin-discuss 메일링 리스트 등록
- Twitter에서 팔로우
Embark Studios에서도 공지 블로그 게시물을 통해 자체 프로덕션 게임 백엔드 인프라에 대한 계획과 Quilkin 사용이 적합한 사례를 자세히 다루고 있습니다.
Google Cloud와 Embark Studios에서 이 프로젝트에 참여해 주신 모든 분들께 감사 드립니다. Quilkin의 미래가 매우 기대됩니다.