멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례Hwanhee Kim2017년 4월 26일, NDC2017 발표자료입니다.
콘텐츠 제작은 게임 개발에서 많은 노력과 시간 투자를 필요로하는 작업입니다. 최근 폭발적인 관심을 받고 있는 딥러닝을 통해 여기에 드는 시간을 크게 줄일 수 있습니다. 이 발표에서는 VAE(Variational AutoEncoder)를 이용한 모방을 통한 콘텐츠 생성 기법에 대해서 다룹니다.
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트Amazon Web Services KoreaAWS를 사용하는 게임 고객사를 대상으로 ‘Amazon GameLift 세션’ 을 준비했습니다.
GameLift는 클라우드에서 세션 기반 멀티플레이 게임 서버를 배포, 운영, 조정하는 데 사용되는 완전 관리형 서비스로, 본 행사에서는 Amazon GameLift를 이용한 세션형 1:1 게임 배포 실습을 진행합니다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub LeeNDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍Seungmo KooNHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우펄어비스의 MMORPG, 검은사막에 적용되어있는 AI 네비게이션 기능은 VOXEL 기반으로 자체 개발한 엔진을 이용해 구현되어 있습니다. 기존의 대다수 상용 라이브러리들이 네비 메쉬라고 하는 이동가능한 평면을 표현하는 폴리곤 기반의 데이터를 이용해 길찾기를 수행해주는 것에 비해 근간이 다릅니다. 이 강연에서는 검은사막의 네비게이션 엔진을 구현하고, 서버 / 클라이언트에 적용하면서 얻게된 노하우와 적용된 결과물들을 소개합니다.
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
NDC 11 자이언트 서버의 비밀승명 양2011 NDC(Nexon Developers Conference)에서 발표한 마비노기 영웅전(미국명 Vindictus)의 자이언트 서버 아키텍처에 대한 슬라이드입니다. 게임 서버의 분산 서비스 아키텍처를 바닥부터 만들어낸 과정과 결과에 대한 내용을 담고 있습니다.
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung HaNDC 2017 발표 슬라이드
시연 영상 링크: https://youtu.be/e9Tv3jkmqKk
게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Jinuk Kim게임테크 2014에서 발표했던 자료.
모바일 게임 서비스, 특히 게임 서버를 만들 때 사용가능한 기술들과, 각각의 기술을 고르는 디자인 선택과 그에 따르는 트레이드 오프를 다룬다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub LeeNDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍Seungmo KooNHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우펄어비스의 MMORPG, 검은사막에 적용되어있는 AI 네비게이션 기능은 VOXEL 기반으로 자체 개발한 엔진을 이용해 구현되어 있습니다. 기존의 대다수 상용 라이브러리들이 네비 메쉬라고 하는 이동가능한 평면을 표현하는 폴리곤 기반의 데이터를 이용해 길찾기를 수행해주는 것에 비해 근간이 다릅니다. 이 강연에서는 검은사막의 네비게이션 엔진을 구현하고, 서버 / 클라이언트에 적용하면서 얻게된 노하우와 적용된 결과물들을 소개합니다.
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
NDC 11 자이언트 서버의 비밀승명 양2011 NDC(Nexon Developers Conference)에서 발표한 마비노기 영웅전(미국명 Vindictus)의 자이언트 서버 아키텍처에 대한 슬라이드입니다. 게임 서버의 분산 서비스 아키텍처를 바닥부터 만들어낸 과정과 결과에 대한 내용을 담고 있습니다.
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung HaNDC 2017 발표 슬라이드
시연 영상 링크: https://youtu.be/e9Tv3jkmqKk
게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Jinuk Kim게임테크 2014에서 발표했던 자료.
모바일 게임 서비스, 특히 게임 서버를 만들 때 사용가능한 기술들과, 각각의 기술을 고르는 디자인 선택과 그에 따르는 트레이드 오프를 다룬다.
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021Amazon Web Services Korea많은 게임사들은 AWS 의 글로벌 인프라를 이용해서 글로벌 런칭을 준비하고, 이를 통해 새로운 기회를 맞이합니다. 본 강연에서는 AWS Global Accelerator, Amazon CloudFront 및 다양한 AWS 의 글로벌 기반 데이터베이스 기능들을 기반으로 워크로드에 걸맞는 솔루션을 알아봅니다. 또한 많은 고객사에서 사용하는 아키텍처 패턴을 알아보고 이와 함께 고려할 점들을 알아봅니다.
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다Dae KimCloudBread는 클라우드 기반 무료 오픈소스 프로젝트로, 모바일 게임과 모바일 앱에 최적화된 게임 서버 엔진입니다. 이번 Unity United 세션에서는 어떻게 게임서버를 구축하고 Unity 게임에서 호출하는지 과정을 소개해 드립니다.
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 Amazon Web Services Korea이제 본격적으로 게임의 핵심 기능을 구현할 차례입니다. 시리즈 #3에서는 다양한 게임의 장르와 그에 따른 아키텍처의 특징을 알아보겠습니다. 또한, 각각의 아키텍처마다 활용할 수 있는 AWS 서비스를 알아보고, 이를 실습을 통해 구현해보겠습니다.
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh데브시스터즈의 Cookie Run: OvenBreak 에 적용된 Kubernetes 기반 다중 개발 서버 환경 구축 시스템에 대한 발표입니다.
Container orchestration 기반 개발 환경 구축 시스템의 필요성과, 왜 Kubernetes를 선택했는지, Kubernetes의 개념과 유용한 기능들을 다룹니다. 아울러 구축한 시스템에 대한 데모와, 작업했던 항목들에 대해 리뷰합니다.
*NDC17 발표에서는 데모 동영상을 사용했으나, 슬라이드 캡쳐로 대신합니다.
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea2016년 1월 7일 AWS Cloud행사에서 김필중 솔루션즈 아키텍트 께서 발표하신 “ 게임 서비스 품질 향상을 위한 데이터 분석 활용하기 “ 발표자료입니다.
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...Amazon Web Services Korea클라우드 기반의 게임 스트리밍은 플랫폼과 디바이스에 제한받지 않고 플레이할 수 있는 등 여러 가지 뛰어난 장점을 가진 게임 체인저로 관심받는 기술입니다. 그러나 네트워크 이슈와 높은 서버 비용 등으로 인해 구현하는 데 어려움을 겪는 경우가 많습니다. 본 세션에서는 게임스트리밍 서비스를 AWS에서 어떻게 구현할 수 있을지에 대해 간단한 아키텍처와 데모를 통해 소개해드립니다.
[IGC2018] 잔디소프트 윤세민 - HTML5 게임 어디까지 가능한가강 민우The document discusses HTML5 technology and capabilities for games. It describes HTML5 rendering and technologies like WebGL that enable 3D graphics. It also covers sound, controls, and game engines in HTML5. The document addresses current limitations of HTML5 like lower performance compared to native apps. It outlines a three-phase project to test HTML5 and WebGL capabilities for games on mobile and PC by developing test games and evaluating performance, gameplay and development process. Keywords mentioned for HTML5 include the internet, sharing content across platforms, and its potential.
[IGC2018] 산타모니카스튜디오 에이브 타라키 - 게임의 컨셉 디자인과 세계를 만드는 법강 민우Abe Taraky provides a concept design presentation covering world building for a triple AAA title. The presentation discusses what makes a character design iconic, diving deep into reference material to reverse engineer source inspiration. It also addresses bringing different design variables together and putting the concept art insights into practice, noting the goal involves two different variables. The presentation concludes by thanking the audience and asking if there are any questions.
4. End-to-End Solutions for Game Developers
COMMUNITY
CLIENT
COMMERCE
CLOUD
game services
Amazon Game Services (AGS)
6. 싱글 플레이어 게임의 처리 과정
Inputs
Simulate
Render
Wait
States
events
timer
State State State
Time
Frame Per Second (FPS) 이 루프가 1초에 몇 번 도는가?
7. 멀티 플레이어 게임
• 게임 로직 처리 및 상태 관리를 다른 컴퓨터에서 함
• 구조에 따른 분류
– P2P, Client-Server, Web-based, Hybrid
Inputs
Simulate
Render
Wait
States
my events
other hosts
over the network
10. 비동기형 (Asynchronous)
• 웹서비스 형태의 백엔드
• 2-tier: web servers + data store
• 3-tier: web front + app servers + data store
• 비용 효율화가 쉬움
• Spike load: Auto-scaling with Load Balancer
• 클라우드 환경에 아주 적합: AWS Spot instances 사용 가능
• (요즘 대세) 서버리스 형태로 구축 가능
• Serverless Architecture
11. 웹 서비스 방식의 백엔드
• HTTPS를 이용한 보안성 확보가 쉬움
• 연결 유지가 필요 없어 접속이 불안정한 환경에서 유리
• 모바일 게임 및 소셜 게임 장르에 적합
• 부하 분산(웹서버 추가)이 용이하여 확장성이 높음
• Load-Balancer 사용
Client
LB Web Server
Browser
Web Server
Client
Browser
Web ServerHTTP
12. 웹서비스 기반의 동기화 방식
Request/Response 구조
• 웹의 특징을 그대로 물려 받음
• Atomic, Stateless
• 플레이어간 순서 보장이 필요할 경우
• 사과를 친구가 먼저 수확한 경우 어떻게 처리?
• 주로 캐시서버나 DB에서 동기화
• 수동적: Server-initiated Action 어려움
• 몬스터의 선공과 같은 능동적 NPC 행동 불가
Web Client
Web Server
State State State
Response
Request
13. 서버리스 형태의 백엔드 구축 가능 (AWS 예)
Client
Lambda
function
API
Gateway
DynamoDB
AWS IAM
S3
Cognito
Static Content
Download
Backend Logic Data Store
15. 지속형 (Persistent)
• 게임 월드가 유지되는 형태
• 대표적으로 MMOG형 게임: MMORPG
• Scale-out 및 비용 절감이 쉽지 않음
• 지역 또는 채널 별로 서버를 나누고 플레이어가 서버 선택
• 상태 유지 (Stateful): 플레이어가 1명이어도 서버 유지 필요
• 성능 요구 사항
• 상태 저장 (CRUD) 및 게임내 거래(Transaction) 아주 빈번
• 고성능의 RDBMS 필요 (e.g. Amazon Aurora)
• 인접한 플레이어간 패킷 방송이 많음
• 고성능의 네트워크 인터페이스가 필요함
16. Client-Server 형태의 백엔드 구조
지속형 게임은 주로 CS 구조를 사용
• 클라이언트는 서버를 통한 간접 연결
• 중요 로직은 서버에서 처리함으로써 해킹으로부터 비교적 안전
• NPC를 서버가 능동적으로 활용(drive)할 수 있음
• 구현 및 유지 보수 비용이 비교적 높음
• MMOG와 같이 상태를 지속해야하는 게임에 적합
Client Client
Client Client
Server
17. Client-Server 방식의 처리 구조
서버가 게임 로직 처리(Simulate) 및 상태 관리
Simulate
States
Inputs
Render
Wait
eventsServer
state info
18. Client-Server 형태에서 주로 쓰는 동기화 방식
• 클라이언트에서 발생하는 이벤트는 서버에서 모두 모아
계산한 후 해당 클라이언트로 방송
자본주의(?) 동기화
• 서버가 먼저 진행 클라는 따라올테면 따라와봐 빠른
클라일수록 서버와의 격차가 가장 적음 (유리)
• 서버/클라간 시간차는 클라가 알아서 Dead Reckoning
Server
Client A
Client B
NPC
NPC
NPC
A
B
A
A
B
B
Event A
Event BNPC Event
서버 동기화 (Server-Authoritative)
클라가 늦게 받을수
록 튀는 현상 발생
19. 클라우드 상에서의 일반적인 MMOG 아키텍처
Game Clients
1. Select a Realm
2. Connect to a Realm
Data
Server
Realm 3
Database
NPC, Chat, Physics,
…
World
Server
Aux
Svrs
Data
Server
Realm 1
Database
NPC, Chat, Physics,
…
World
Server
Aux
Svrs
Data
Server
Realm 2
Database
NPC, Chat, Physics,
…
World
Server
Aux
Svrs
Data
Server
Realm N
Database
NPC, Chat, Physics,
…
World
Server
Aux
Svrs
21. 세션형 (Session-based) 게임
• 실시간 게임 중 가장 많은 형태
• 게임의 시작과 끝이 명확, 로비가 존재
• 주로 MOBA, FPS, RTS, Sports, …
• 연결 구조에 따라
• P2P: 클라이언트간 직접 연결
• Hosting: 플레이어 클라이언트 중 하나가 서버 역할
• Dedicated Server: 전용 서버로 Hosting
• 게임 장르별 주로 쓰는 동기화 방식
• 서버 동기화(Server-Authoritative): FPS, RPG, MOBA, Sports
• Lock-Step류: RTS, (AOS)
22. 연결구조: Peer to Peer (P2P)
• Peer to Peer: 플레이어의 클라이언트간 직접 연결
• 빠른 반응성 및 저렴한 유지 비용이 장점
• 서버가 따로 없어도 친구끼리 게임을 할 수 있는…
• 확장성 및 해킹(cheating)에 취약: (예) Maphack, Helper, …
Player Player
Player Player
23. 연결구조: Hosting
• P2P 구조에서 약간 변형된 형태
• 플레이어 클라이언트중 하나가 방장/호스트(Super-Peer) 역할
• 호스트(Super-Peer)를 통한 패킷 중계
• 실제 게임 로직 처리는 P2P 방식처럼 각자 하는 경우가 많음
• 성능이 좋은 클라이언트가 서버 역할을 하는 것이 좋음
Player (Host) Player
Player Player
24. 연결구조: Dedicated Server
• 플레이어가 직접 호스팅하지 않음
• 게임회사의 데이터센터나 클라우드에서 (보이지 않는 플레이어가) 전용 서버를 돌리는 구조
• 렌더링을 하지 않는 클라이언트 프로그램이 서버 모드(headless)로 동작
• P2P/호스트 방식 게임을 온라인 게임 형태로 서비스 하기 위해서 변형된 형태
• NPC AI처리도 맡음
• 대부분의 세션형 온라인 게임에서 사용 (e.g. PUBG, LOL, Overwatch)
• (예) LOL의 경우 실제 10+1명이, 고오급시계의 경우 12+1명이 게임에 참여하는 형태
• 동기화 방식은 게임 성격에 따라 서버 동기화 또는 Lock-Step 계열을 사용
Dedicated
Server
Player Player
Player Player
25. 참고: Lock-Step 형태의 동기화 방식
• 상대 Peer로부터 해당 라운드의 이벤트를 모아 각자처리
• 주로 RTS 및 과거의 AOS 장르에서 주로 사용
• 각각의 클라이언트는 모두 아래와 같은 형태의 Queue를 유지
• 공산주의(?) 동기화
• 다 함께 같이 간다 클라가 하나라도 멈추면 다 같이 기다린다
• 서버 동기화 방식과 다르게 특정 클라만 튀는 현상 없음
events eventsevents나
상대1
상대2
Round
0 ms 50 100 150
Round Round Round
events
events events
모든 Peer들의
입력이 모이면
해당 Round를
처리(Simulate)
하고 렌더링
특정 Peer의 정
보가 제시간에
도달하지 않으
면 Block
??
events
28. Dedicated Game Server
• 사실상 Client-Server 방식
• Lock-Step을 통한 동기화도 가능하지만 대부분의 경우 서버에서 로직을 돌리는 구조
• 중요 로직은 서버에서 처리함으로써 해킹으로부터 비교적 안전
• NPC를 서버가 능동적으로 활용(drive)할 수 있음
• 그럼, Dedicated Server 방식만의 장점은?
• 서버를 직접 구현하지 않고 클라이언트를 그대로 사용 (하나의 프로세스가 하나의 게임 세션 처리)
• 클라이언트의 지형, 애니메이션 및 물리 정보 그대로 사용
• 렌더링만 하지 않을 뿐, 클라이언트 엔진 레벨의 시뮬레이션이 가능!
• FPS 값이 (서버에서는 TickRate) 높을수록 더 정교한 시뮬레이션이 가능
Dedicated
Server
Player Player
Player Player
Game
Server
Client Client
Client Client
30. 데디서버를 어떻게 만들수 있는가?
• 게임 엔진으로 만들 수 있음
• 일반적으로 클라이언트 게임 엔진 내에 포함된 복제 프레임워크 사용
• 일종의 네트워크 동기화 라이브러리이지만 데디 서버를 손쉽게 만들 수 있는 기능 제공
• 그러니까, 클라이언트를 그냥 게임 서버로 사용 가능하게…
• 복제 프레임워크 (Replication Framework)
• 특정 객체의 특정 멤버변수 상태 복제를 통한 상태 동기화
• 서버-클라이언트간 RPC를 통한 이벤트 동기화
• 상용 게임 엔진 예
• Lumberyard의 GridMate Replica Framework
• UE4의 Actor Replication
• Unity의 UNET HLAPI
31. Lumberyard GridMate
• 원격 복제를 지원하는 크로스플랫폼 네트워크 라이브러리
• 네트워크 상에서의 원격지 복제본(replicas) 지원
• 하나의 노드가 복제본을 소유하고 나머지 노드는 프록시(proxy)를 보는 구조
• 복제본은 데이터를 포함하고 RPC 수행 가능
• 특징
• 다양한 플랫폼 지원: Windows, Xbox One, PS4, Android and iOS
• 다양한 동기화 기능 제공: 변수 동기화, 변수 변경시 자동 콜백 호출, RPC, …
• 네트워크 테스트 및 시뮬레이션을 위한 RTT 변경, 패킷 손실 등의 다양한 기능 제공
32. Unreal Engine Dedicated Server
• UE4도 Dedicated Server를 쉽게 만들 수 있는 기능을 제공
• Dedicated Server Guide (Link)
• Actor Replication (Link)
33. Unity UNET
• Unity 5.1부터 도입된 네트워크 라이브러리 + 복제 프레임워크
• 방식1: High Level Scripting API (HLAPI)를 통한 객체의 상태 복제 지원
• NetworkManager를 통한 손쉬운 사용 (Host / Server / Client 모드)
• 손쉬운 네트워크 이벤트 주고 받기
• Commands (Client Server)
• RPC (Server Client)
• 방식2: Transport API를 통한 채널 단위의 Lower level의 통신 방식도 지원 (UDP 기반)
• 기존의 익숙한 방법: 채널을 만들고, 연결하고, 데이터를 주고 받고…
• NetworkTransport.*
34. UNET HLAPI Mode: Client, Server, Host
Player (Host) Player
Player Player
37. UNET HLAPI 사용 방법
• Main Scene에서 Network Manager 콤포넌트 설정
• 주소 및 포트 번호, 플레이어 Prefab, Spawnable Prefabs 등
• 네트워크 동기화가 필요한 Entity에는 NetworkIdentity 콤포넌트 부착
• 자동으로 transform 동기화를 위해서는 Network Transform 콤포넌트 부착
• 스크립트는 NetworkBehaviour부터 상속받아 사용
• 멤버 변수에 대한 상태 복제 or 서버와 클라이언트간 함수 호출(RPC)
• 역할에 따라 Network Manager Start!
• StartHost(), StartServer(), StartClient()
• Quiz: 데디서버는 어떤 역할로 실행할까요?
39. 상태 복제
• NetworkBehaviour로 부터 상속
• [SyncVar] attribute를 통한 멤버 변수 상태 동기화
• List의 경우 Built-in 타입 제공: SyncListString, SyncListFloat, SyncListInt, …
40. Command (Server RPC)
• 클라이언트(플레이어)가 데디서버에게 명령을 내리고 싶을 때
• [Command] attribute: 클라에서 호출하지만 서버에서 실행되는 함수 (함수명은 반드시 “Cmd”로 시작)
41. Client RPC
• 데디서버가 클라이언트에게 명령을 내리고 싶을 때
• [ClientRpc] attribute: 서버에서 호출하지만 클라이언트에서 실행되는 함수 (함수명은 “Rpc”로 시작)
43. Unity로 데디 서버 만들기 바로 시작!
• UNET을 사용한 초 간단 슈팅 게임 튜토리얼
• https://unity3d.com/kr/learn/tutorials/topics/multiplayer-networking
• 한번 따라 해보면 앞서 설명했던 개념이 한방에 잡힘!
• Unity Standalone Player를 Dedicated Server로 쓰는 경우
• (Quiz의 답) 코드상에서는 NetworkManager.StartServer() 호출하도록 수정
• EXE 실행시에는 반드시 –batchmode 옵션을 주기: headless 모드로 실행됨
45. DevOps 그리고 클라우드
• DevOps
• 요약하면 개발과 운영의 통합(이라고 쓰고 개발자가 운영까지하는 경우가…)
• 왜? 고객으로 부터의 피드백 반영 주기를 빠르게 하기 위함 혁신의 속도
• 재미를 확인하는 방법은 게이머들의 목소리를 듣고 수정하는 방법이 최선이기 때문
• 게임 서비스에 있어서 DevOps 개념은 김태현님의 NDC 2017 세션(Link)을 추천
• 클라우드 컴퓨팅은 DevOps를 위한 필수 도구
• 클라우드 시대가 되면서 인프라/시스템 엔지니어들이 해야 하는 부분을 게임 개발자들이 할 수
있게 됨 클라우드는 결국 게임 개발자에게 힘을 실어주는 도구
• Amazon GameLift
• 세션형 게임을 위한 최적화된 DevOps 환경을 제공
• 게임서비스에 특화된 AWS 클라우드 솔루션
IMG FROM: https://www.contegix.com/devops-part1-its-more-than-teams/
46. Amazon GameLift?
• 세션형 멀티플레이어 게임 서비스를 위한 DevOps 플랫폼
• AWS 클라우드 상에서 멀티 플레이어 게임 서버를 자동으
로 확장/축소
• 전세계적으로 low-latency 사용자 경험 제공
• 글로벌 플레이어를 대상으로 Matchmaking 지원
• DDoS 방어 메커니즘 지원
• 중단(downtime)없는 게임 서버 업데이트 지원
인프라 레벨(서버 머신) 신경쓰지 말고 게임 서버 바이너리
만 제공하면 나머지는 알아서!
53. 게임 세션 1
Player slot 1
Player slot 2
Player slot 3
Player slot 4
Active
Active
게임 세션 2
Player slot 1
Player slot 2
Player slot 3
Player slot 4
Active
Active
Active
Active
게임 세션 N
Player slot 1
Player slot 2
Player slot 3
Player slot 4
Reserved
서버 프로세스 서버 프로세스 서버 프로세스
EC2 Instance EC2 Instance EC2 Instance
Build
개발자 Players
게임 세션 관리
FLEET
55. 데디 서버 바이너리 (빌드) 업로드
• 게임 서버 실행 파일 및 부속 폴더를 한군데 모아두고
• AWS CLI를 사용하여 GameLift에 업로드
aws gamelift upload-build --name <빌드이름> --build-root <폴더> --operating-system
<WINDOW_2012 또는 AMAZON_LINUX> --region <리전>
56. 플릿 설정
• EC2 인스턴스 타입 지정
• 실행 파일 이름, 명령 파라미터, 프로세스 수 지정
• 열어둘 포트, 프로토콜 종류, 허용 IP 대역 지정
• Auto-Scaling 정책 설정
59. • 상태변경 순서: Downloading Validating Activating Active
• Active 상태가 되면 클라이언트로 부터 접속을 받을 수 있음
60. GameLift SDK 연동 (DEV)
• GameLift Server SDK
• C++ 및 C# 지원
• Unreal Engine 및 Unity 전용 플러그인 제공
• Lumberyard의 경우 이미 포함되어 있음
• Windows Server 및 Amazon Linux에서 운용 가능
• GameLift Client SDK
• AWS SDK를 그대로 사용하면 됨 (10종 이상의 프로그래밍 언어 지원)
• 게임 클라이언트에 직접 통합하기보다 주로 Matchmaking 서버 같은 게임 백엔드와 통합
65. GameLift를 통한 운영 (OPS)
• Web기반의 UI를 통한 운영
• API로도 제어 가능
• 각종 성능 지표 모니터링
• 스케일링 상황 모니터링
• 게임 서버에서 발생하는 이벤트 확인
• 게임 세션 및 플레이어 세션 정보 확인
• 매치메이킹 정보 및 분석 도구 제공
• ALIAS 기능을 통한 무중단 배포 가능
68. 매치메이킹 기능 제공 (FlexMatch)
• FlexMatch
• 범용적으로 커스터마이징 가능한 매치메이킹 시스템
– https://aws.amazon.com/blogs/gamedev/matchmaking-your-way-amazon-gamelift-flexmatc
h-and-game-session-queues/
– http://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-match.html
• 규칙(Rules) 기반
• 다양한 조건을 쿼리의 형태로 주면, 그 쿼리 결과에 맞는 플레이어들을 매칭
• 플레이어 숙련도, ELO 점수 등등
• 매칭이 성사되면 자동으로 GameLift 플릿상에 게임 세션을 생성
• 추가 비용 없음
• 공짜
70. AWS 글로벌 인프라 활용
US West (Oregon)
Japan
Ireland
US East (Virginia)
Brazil
Germany
India
Singapore
Korea
71. 글로벌 지연 최적화 매치메이킹
Match
Player 1
Ping
Times
Player X
Ping
Times
…
GameLift
US West (Oregon)
EU Central (Frankfurt)
South America East (São Paulo)
Asia Pacific (Seoul)
사용방법: https://aws.amazon.com/ko/blogs/korea/amazon-gamelift-global-matchmaking-queue-for-low-latency-game-players/
72. GameLift Future
SOCIAL
Player Profiles
Friends
Engagement
Player Privacy
Search
Player Presence
AUTH
Identity
Skill & Rank
Session Management
Matchmaking
MULTIPLAYER
Parties
Notifications
Rank
COMMUNICATION
Text Chat
Voice Chat
P L A Y E R
A N A L Y T I C S
D E P L O Y M E N T
Ingestion
Release
Packaging
R E M O T E C O N F I G
A / B T E S T I N G
W E B S I T E S
C S T O O L S
C O M M E R C E
Wallet
Item Catalog
Virtual Currencies
In-App Purchase
Reputation
Auto-scaling
Authentication
Authorization
GAMELIFT
SERVER HOSTING
현재 기능
추가될 기능
73. 바로 시작 하기
• 무료로 테스트 해 볼 수 있음
• c3.large 인스턴스 타입으로 125시간 무료
• https://console.aws.amazon.com/gamelift/
• 빠르게 테스트해볼 수 있는 샘플 게임 제공
• Amazon GameLift의 Sample Game 항목
• 물리 기반의 8인용 축구 게임
• GameLift 코드 레벨 사용법 및 데모
• 더미 플레이어 테스트용
• https://github.com/zeliard/GameLift
• Full-Stack 게임 샘플 (실제 세션형 게임 서비스와 기술적/기능적으로 동일)
• https://github.com/awslabs/aws-gamelift-sample