Unity 검색

멀티플레이어 커넥티드 게임의 첫걸음

2018년 9월 12일 테크놀로지 | 9 분 소요
공유

Is this article helpful for you?

Thank you for your feedback!

유니티는 커넥티드 게임 개발 과정에서 발생하는 어려움을 해결하기 위해 먼저 실시간 멀티플레이어 게임 개발에 주력해왔으며, 이 개발 영역을 민주화하려는 여러 가지 시도를 통해 많은 정보와 아이디어를 얻고 있습니다. 하지만 적합한 신기술을 구축하려면 무엇보다도 모든 개발 단계에서 사용자가 직접 느끼는 피드백이 반영되어야 합니다. 멀티플레이어 커넥티드 게임 분야의 새로운 장을 개척하는 동안 여러분도 함께 개발 과정에 참여하고, 의견을 주시기 바랍니다. 유니티도 성원에 대한 보답으로 업데이트를 자주 출시하고, 모든 정보와 과정을 공유해 드리겠습니다.

지난 블로그 게시물을 통해 UNet 지원 중단을 발표한 이후 보내주신 여러 피드백을 취합하여 앞으로의 계획에 대해 좀 더 상세한 정보를 제공해 드리고자 합니다. 이번 게시물에서는 유니티의 장기적 비전과 올해 가을에 출시되는 첫 릴리스를 소개합니다.

네트워킹: 성능과 확장성

장기적 비전:

유니티는 ‘고성능 최적화’를 통해 멀티스레드를 처리하는 잡 시스템(Job System), Unity 게임 코드 작성을 위한 버스트 컴파일러(Burst Compiler), 데이터 중심의 게임 코드를 작성할 수 있는 엔티티 컴포넌트 시스템(ECS, Entity Component System) 등 개발 중인 여러 기능에 대한 이니셔티브를 소개하였습니다. 이와 같은 요소를 함께 활용한다면 몇 배 더 높은 성능이 보장되어 성능을 크게 개선할 수 있습니다.

여러분이 개발하려는 모든 게임을 규모와 상관없이 지원하기 위해 이러한 이니셔티브를 수립하였습니다. 대용량 지도, 여러 동적 오브젝트나 AI, 심지어 네트워크로 연결된 수많은 플레이어까지 모두 지원 가능합니다.

이 새로운 패러다임에서는 네트워킹 환경에 맞게 컴포넌트를 훨씬 더 쉽게 사용할 수 있습니다. 또한 고도로 구조화된 ECS 데이터를 통해 델타 압축, 보간 등 높은 수준의 시뮬레이션에 적합한 뛰어난 솔루션이 제공됩니다.

유니티는 다음의 주요 원칙을 기반으로 하여 새로운 네트워킹 스택을 구축하고 있습니다.

  • 투명성: 패키지를 통해 새로운 솔루션의 소스 코드를 공개하고, 4개월마다 발표하는 정규 출시 외에 프리뷰 형태로 신속하게 업데이트를 제공합니다. 이를 통해 사용자는 각자의 게임에 맞게 유니티의 네트워킹 솔루션을 디버그하고 확장할 수 있습니다.
  • 모듈화: 단일 구조의(monolithic) 라이브러리를 사용하면 불필요한 기능에 대한 쓸데없는 오버헤드가 발생하게 됩니다. 따라서 기본 구성에 포함되지 않는 새로운 기능은 옵션으로 별도 제공됩니다.
  • 성능과 확장성: 모든 기능에서 성능이 매우 중요하며, 네트워킹이 향후 유니티의 ‘고성능 최적화’ 비전에서 핵심 사항이 될 것이라는 사실을 잘 알고 있습니다. 따라서 처음부터 최신 게임의 요구 사항에 맞춰 확장 가능한 네트워킹을 제공할 것입니다.
  • 기본형별 솔루션 제공: 모든 게임에 적용할 수 있는 단 한 개의 솔루션은 없습니다. 따라서 FPS, RTS, 격투 게임 등 게임에서 자주 사용되는 네트워크 기본형(archetype)에 맞는 다양한 솔루션을 개발할 예정이며, 먼저 FPS 게임에서 자주 사용되는 클라이언트측 예측(client-side prediction) 모델을 구축할 예정입니다.

단기 계획:

단기적으로는 처음부터 다시 새로운 네트워킹 스택을 구축할 예정입니다. 이를 위해 최소한의 전송 계층인 UDP 기반의 송수신 기능을 소스와 함께 프리뷰 패키지 형태로 제공합니다. 바로 사용 가능한 패키지에 포함된 API는 잡 시스템과 호환되며, ECS 기반의 게임과 원활하게 페어링되도록 최적화되어 있지만 둘 다 필수 기능은 아닙니다. 지금은 우선 기본적인 것만 갖춘 시작 단계이며, 게임에 필요한 모든 요소를 구현하려면 네트워크 신뢰성과 시퀀싱 등 여러 중요한 기능이 필요하다는 사실을 감안하고 있습니다.

클라이언트측 예측, 보간, 델타 압축을 위한 완성도 높은 품질의 샘플 코드를 포함하는 FPS 샘플 게임의 전체 소스를 공개할 것이며, 다른 원형에 대해서는 차후에 릴리스할 예정입니다.

전용 서버 호스팅: 일관성과 보안

장기적 비전:

실시간 멀티플레이어 토폴로지의 현황을 분석한 결과, 전용 게임 서버(DGS) 모델이 실시간 멀티플레이어 게임에 최적의 옵션이라는 결론을 도출했습니다. 이 모델에서 제공하는 기능은 다음과 같습니다.

  • 일관성: 프로세싱과 로직이 사용자가 관리할 수 있는 리소스에서 직접 처리됩니다. 이렇게 하면 연결 품질을 예측할 수 있으며, 지연이 발생할 때 영향을 많이 받는 게임에서 ‘호스트 어드밴티지’가 발생하지 않습니다.
  • 확장성: P2P(Peer-to-peer) 연결은 게임 인스턴스당 소수의 플레이어 풀(보통 12명 이하) 이상으로 확장하기가 어려운 반면, DGS 모델은 더욱 강력해진 시스템에서 보다 많은 플레이어를 지원할 수 있습니다.
  • 보안: 서버 권한을 가지는 코드를 사용하면 공정하지 못한 이벤트가 발생한 경우 이를 사후에 감지하는 것이 아니라 속임수를 사전에 방지할 수 있습니다.
  • 신속한 반복: 멀티플레이어 게임을 조정하려면 출시 후에도 반복 작업을 여러 번 해야 합니다. 하지만 DGS 모델을 사용하면 인증을 통과해야 하는 클라이언트 패치 없이 서버에서 실행되는 로직만 업데이트할 수 있습니다.

이러한 이유로 유니티ㅏ Multiplay의 기술을 도입하게 되었습니다. Multiplay의 검증된 전용 서버 오케스트레이션(자동화 관리) 기술을 통해 게임에 맞게 서버 플릿(fleet) 규모를 유연하게 정할 수 있습니다. 또한 Multiplay는 베어메탈(bare-metal)과 ‘버스트 클라우드(burst cloud)’의 하이브리드 호스팅 방식을 통해 비용을 규모에 맞게 최적화합니다. 이러한 기술은 PUBG, 타이탄폴 2(Titanfall 2), 갱 비스트(Gang Beasts)를 비롯한 다수의 게임에서 엔진과 상관없이 실행되는 커스텀 엔터프라이즈 솔루션에 적용되어 이미 검증되었습니다. Multiplay 기능에 대한 자세한 내용은 유나이트 베를린 2018의 Multiplay 관련 세션 녹화본을 참조하세요.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

단기 계획:

현재 유니티는 사용자가 직접 액세스할 수 있는 방법으로 Multiplay 기술을 Unity 생태계에 통합하기 위해 노력하고 있습니다. 머지않아 원격으로도 팀원 및 친구들과 게임의 플레이 테스트를 진행할 수 있는 개발 게임 호스팅 서버를 사용할 수 있게 됩니다. 첫 알파 릴리스에는 플릿 프로비저닝, Linux 서버 빌드 업로드 및 배포, 서버 쿼리 프로토콜을 위한 패키지, 그리고 서버 활동을 모니터링할 수 있는 간단한 통계와 로그가 포함될 예정입니다.

매치메이킹: 유연한 로직과 원활한 통합

장기적 비전:

매치메이킹(Matchmaking)은 여러 플레이어를 서로 매치하여 게임의 즐거움을 최대한으로 높이는 기술로, 생각보다 쉬운 작업은 아닙니다. 게임마다 목표와 매치 규칙이 서로 다르므로 상업용으로 사전 제작된 매치메이킹 솔루션으로는 이러한 특성을 반영하여 지원하기 어렵다는 피드백을 반복적으로 받았습니다.

이 문제를 해결하기 위한 첫걸음으로, 유나이트 베를린에서 Google과 함께하는 오픈소스 매치메이킹 프로젝트 Open Match를 선보였습니다. 이 프로젝트는 확장성을 최우선으로 고려한 설계로 규모에 맞게 기능을 제공하기 위해 추진되었습니다. 이렇게 하면 사용자 프로젝트에 맞게 원하는 대로 매치 로직과 오케스트레이션 모듈을 커스터마이즈할 수 있습니다.

유니티는 Open Match를 중심으로 관리되는 매치메이커를 빌드하고 있으며, 향후에도 발전하고 개선되는 Open Match의 기능을 지속적으로 활용할 것입니다. 또한 Unity 개발자들에게 다음의 고유한 혜택을 추가로 제공할 예정입니다.

  • 완전히 관리되는 서비스: 개발자가 게임 개발에 집중할 수 있도록 매치메이커 서비스를 운영, 확장 및 관리해 드립니다.
  • 확장 가능한 게임-서버 호스팅: 유니티의 매치메이커는 기본적으로 Multiplay의 오케스트레이션 기술과 원활하게 통합되며, 게임을 플레이할 플레이어 수에 따라 게임 호스팅 서버 용량을 자유롭게 조정할 수 있습니다. 즉, 매치메이커 서비스를 사용하는 Unity 개발자는 복잡한 서버 수명 주기에 대해 배우지 않아도 됩니다.
  • 접근성: 향후 Unity의 관리되는 서비스는 게임 개발자가 커스텀 로직을 작성하지 않고도 지연, 기술, 대기 시간의 균형을 맞출 수 있는 단순한 기본 옵션을 제공할 예정합니다.
  • 커스터마이징: 2019년 하반기에는 추가 커스텀 기능이 필요한 게임을 위해 관리되는 환경에 완벽한 커스텀 형식의 매치 로직을 제공할 예정입니다. 이 매치 로직을 Unity 표준 C# 언어로 작성된 Unity 환경에서 매치메이커에 배포할 수 있습니다. 사전 제작 솔루션만으로 충분하지 않을 경우 게임에 맞는 매치 로직을 커스터마이즈할 수 있습니다.

단기 계획:

Open Match의 v0.1 버전이 지난 주에 출시되었습니다. 유니티는 앞으로도 지속적으로 Google 및 여러 커뮤니티 구성원들과 협력하여 이 솔루션의 품질과 기능을 개선하고 발전시키기 위해 노력할 것입니다.

또한 곧 Unity 생태계에서 관리되는 매치메이커의 첫 버전을 출시할 예정입니다. 이 버전에는 플레이어 수 구성, 서버 할당 작업과의 원활한 통합, 패키지에 포함된 클라이언트 라이브러리 및 자동 배포 기능이 포함됩니다. 이 버전에서는 플레이어 수가 충족되면 서버가 유연하게 할당되며, 게임 클라이언트가 서버에 연결됩니다.

서버 런타임: 비용과 모듈화

장기적 비전:

전용 서버를 호스팅할 때 사용자들이 가장 많은 우려를 표하는 부분은 바로 비용입니다. Google 클라우드와 같은 공용 클라우드 환경의 경우 비용은 가상 머신 사양, 사용 시간, 사용된 네트워킹 대역폭(이그레스(egress)), 운영체제 라이선스 비용을 고려하여 책정됩니다. 비용 절감을 위한 방법은 다음과 같습니다.

  • 서버 런타임 사용 프로필 최소화 - 가능한 최소 VM 사양에서 가장 높은 성능으로 게임을 안정적으로 실행할 수 있게 합니다.
  • 서버 사용 시간 최소화 - 플레이어의 요구 사항에 맞게 필요한 경우에만 서버를 가동 및 할당하는 서버 오케스트레이션 및 매치메이킹 기능을 사용하여 서버 사용 시간을 최소화합니다.
  • 네트워킹 대역폭 최소화 - 이전 프레임 이후에 변경된 데이터 중 연관성이 가장 높은 데이터만 전송하는 양질의 시뮬레이션 코드(예: 델타 압축)를 사용하여 네트워킹 대역폭을 최소화합니다.
  • Linux OS에서 서버 실행 - 독점 운영체제 사용으로 인해 고액의 라이선스 비용이 발생하지 않도록 합니다.
  • 베어메탈과 클라우드 버스팅 조합 – 게임이 규모의 경제(economies-of-scale)를 달성하면 베어메탈 서버를 일정한 기준으로 활용하면서 클라우드 버스팅을 함께 사용합니다.

유니티는 이 5가지 중 아래 4가지 부문에 대한 솔루션을 이미 제시했으며, 현재 서버 런타임 사용 프로필에 대해서도 솔루션을 찾고 있습니다. 새로운 패키지 관리 시스템이 완전히 구현되면 개발자가 최소한의 소비만으로 Unity를 서버 런타임으로 실행할 수 있을 것으로 예상됩니다. 이와 같이 소비 수준이 최소화되면 앞으로는 게임 목적 달성을 위해 서버에서 반드시 필요로 하는 패키지만 포함할 수 있게 됩니다.

단기 계획:

유니티는 ‘헤드리스(headless)’ 모드에서 의도치 않게 실행되고 있는 렌더링, 애니메이션 및 오디오를 제거하는 등 쉽게 해결할 수 있는 작업부터 시작하여 Unity Linux 런타임의 ‘헤드리스’ 버전을 최적화하는 데 주력하고 있습니다. 이를 통해 ‘헤드리스’ 모드가 적용된 Unity 현재 버전에서 안정성을 높이고 가동 시간을 늘리면서 메모리, 빌드 크기 및 CPU 사용을 최소화하고자 합니다.

또한 Unity 2018.3 버전에서는 모든 스탠드얼론 플레이어를 위한 새로운 ‘서버 빌드’ 옵션을 도입하여 개발자 워크플로를 개선했습니다. 이 옵션은 기본적으로 헤드리스 모드로 실행되며, 새로운 UNITY_SERVER 정의를 통해 서버 스크립트 로직을 분리할 수 있습니다.

소식 받기

2018년 9월 12일 테크놀로지 | 9 분 소요

Is this article helpful for you?

Thank you for your feedback!