SlideShare a Scribd company logo
1 of 56
Download to read offline
KGC 2018
-The Way To Survive-
소규모 팀으로

멀티플레이어 게임 개발하기
( j i n u k . k i m @ i f u n f a c t o r y . c o m )
KGC 2018
-The Way To Survive-
01들어가며
KGC 2018
-The Way To Survive-
시장의주류는
멀티플레이어게임
KGC 2018
-The Way To Survive-
멀티플레이어게임개발
내부의핵심역량?
외부에서얻어다쓰기?
KGC 2018
-The Way To Survive-
02멀티플레이어게임

톺아보기
KGC 2018 -The Way To Survive- 6
멀티플레이어MO 게임의요소
Chapter 02.
Great Technology For Great Games
• 인증: 유저 로그인 처리
• 매치메이킹: 적절한 다른 플레이어와 연결
• 게임 플레이: 게임 내 핵심 플레이 메커니즘
• 상점: 캐릭터, 액세서리, 게임 내 아이템 등등 판매
• 랭킹: 리더보드 / 친구끼리 경쟁
• 소셜 요소: 채팅, 길드/클랜, …
KGC 2018 -The Way To Survive- 7
싱글플레이게임이라면
Chapter 02.
Great Technology For Great Games
• 로그인 / 유저 데이터 로딩
• 인게임 진입 로비 / 메인 화면
• 인게임
• 플레이
• 보상 지급
• 상점 / 메일 / 퀘스트 등의 컨텐츠 시스템
• 랭킹 / 길드 / …
KGC 2018 -The Way To Survive- 8
멀티플레이게임이라면
Chapter 02.
Great Technology For Great Games
• 싱글 플레이 요소 (거의) 전부에 더해서
• 다른 유저와 같이 인게임에 모아서 집어넣기
• 인게임 플레이 (변형)
• 네트워크 지연 시간을 숨기고
• 클라이언트 게임 메커니즘을 서버에 복제
• 복제한 게임 메커니즘을 다시

클라이언트/서버 사이에 동기화하기
KGC 2018
-The Way To Survive-
일정늘어나는걸줄이고
인력풀도조금만늘려서
만들수있는가?
KGC 2018
-The Way To Survive-
03다른게임서비스는
어떻게만들었을까?
KGC 2018
-The Way To Survive-
PlayerUnknown’s
Battleground
KGC 2018
-The Way To Survive-
Fortnite
KGC 2018
-The Way To Survive-
Overwatch
KGC 2018 -The Way To Survive- 14
더많은개발자/ 더다양한스킬셋이필요합니다
Chapter 03.
Great Technology For Great Games
• 클라이언트/서버 간 통신: 네트워크 스킬
• 지연 시간 기획: 클라이언트/서버 간 지연 속이기
• 서비스: 운영을 위한 인프라/클라우드 다루기
KGC 2018
-The Way To Survive-
적은인원으로문제해결하기:
아웃소싱
KGC 2018
-The Way To Survive-
팀의핵심역량을구분하고

그렇지않은것은외부에맡기기
KGC 2018 -The Way To Survive- 17
아웃소싱
Chapter 03.
Great Technology For Great Games
• 개발사가 모든 작업을 직접하진 않는다
• 외부에서 가져다 쓰는게 싸고 / 핵심 부분이 아니
라고 판단하면 가져다 쓴다
KGC 2018 -The Way To Survive- 18
아웃소싱:게임 클라이언트엔진
Chapter 03.
Great Technology For Great Games
• 클라이언트 엔진을 인하우스로 개발하는 경우는
흔치 않다
• PC / 콘솔 / 모바일을 가리지 않고 외부 엔진 도입
• 대형 개발사도 UE4 같은 제3자 엔진 이용
KGC 2018 -The Way To Survive- 19
아웃소싱:서비스인프라스트럭처
Chapter 03.
Great Technology For Great Games
• 많은 부분을 클라우드 서비스로 이용
• 특히, IaaS 가 대두
• 클라우드 공급자들이 한국 내 주요 고객으로 항상
게임 회사를 언급
KGC 2018 -The Way To Survive- 20
아웃소싱:게임 통계분석
Chapter 03.
Great Technology For Great Games
• 상당 수의 게임이 외부 서비스에 클라이언트
funnel 분석을 위한 데이터를 쌓는다
• 데이터를 직접 쌓은 경우에도, Google Analytics
나 BigQuery, AWS Elastic MR 같은 외부 분석
도구를 활용한다
KGC 2018
-The Way To Survive-
예시게임들의추가공통점:
데디케이티드서버활용
매치메이킹기반
KGC 2018
-The Way To Survive-
04데디케이티드서버
KGC 2018
-The Way To Survive-
DOOM(1993)
KGC 2018 -The Way To Survive- 24
클라이언트기반 멀티플레이어
Chapter 04.
Great Technology For Great Games
• DOOM 과 같은 게임은 클라이언트 하나가 (주로)
판정을 담당 (super peer)
• Super-peer 와의 연결이 단절된 경우

처리가 복잡하다 (모바일 네트워크의 흔한 문제)
• P2P 네트워킹은 모바일 환경에서

제대로 동작하지 않는다 (모바일 캐리어 망 = 거대한 공유기)
KGC 2018 -The Way To Survive- 25
데디케이티드서버의등장
Chapter 04.
Great Technology For Great Games
• 해당 판정만 처리하는 별도의 클라이언트 분리

처음엔 headless client 라고 부름 (렌더링을 안해서)
• 별도로 띄우는 서버라서 dedicated server 라고
부르기 시작
• Quake, Counter Strike, RTCW,
KGC 2018 -The Way To Survive- 26
데디케이티드서버
Chapter 04.
Great Technology For Great Games
• 클라이언트 수정 최소화: 하나의 클라이언트에서
판정하는 것과 크게 다르지 않음
• 판정하는 클라이언트의 변조를 방지: 운영사가 직
접 서버를 띄움
• 서버 전용 로직 없이도 멀티플레이 구현:

필요한 서버 프로그래머 수를 적게 유지할 수 있다
KGC 2018 -The Way To Survive- 27
데디케이티드서버개발≅클라이언트 개발
Chapter 04.
Great Technology For Great Games
• 서버 시작 시간 단축 ≅ 클라 초기 로딩 시간 단축
• 메모리 최적화 ≅ 객체, 텍스처 최적화
• 시뮬레이션 변경 ≅ 클라이언트 틱 변경
• 로직 동기화 문제 ≅ 클라이언트 내 객체 동기화
•
KGC 2018
-The Way To Survive-
Lifeisnotthateasy
KGC 2018 -The Way To Survive- 29
서비스확장하기 (1)
Chapter 04.
Great Technology For Great Games
• 데디케이티드 서버:

클라이언트 수준으로 메모리 사용
• 하나의 VM 위에서 수백-수천개 (=수백-수천 유저)
처리가 어려움
• 8vCPU 32G 메모리 VM에서 수 개 - 수십개 구동
하는게 한계
KGC 2018 -The Way To Survive- 30
서비스확장하기 (2)
Chapter 04.
Great Technology For Great Games
• VM / 서버 수를 늘리는 확장 전략
• IaaS 클라우드의 API를 활용해서 데디케이티드
서버를 띄울 VM 수를 늘리고 / 줄이는 방법 사용
KGC 2018 -The Way To Survive- 31
클라이언트엔진의한계
Chapter 04.
Great Technology For Great Games
• 엔진 자체의 문제를 수정하는 복잡성
• Unreal Engine 제작사 EPIC은 Fortnite 개발 중
에 UE4 수정
• 배틀 로얄 게임이라 초기 인원 수가 일반적인 경
우보다 훨씬 많음
• 게임 시작 시점에 강하할 때 시야가 길어서 생기
는 문제
KGC 2018 -The Way To Survive- 32
문제:MO에서MMO로넘어가면
Chapter 04.
Great Technology For Great Games
• 클라이언트 기술 기반: 엄청나게 많은 유저
(MMO) 동시 처리가 쉽지 않음
• 최적화 관점이 다르다
• 서버는 클라이언트 연결마다 쓸 수 있는 CPU/
메모리 등을 미리 분배해서 설계
• 클라이언트는 상대적으로 안정적인 렌더링

속도와 유저 입력 지연 시간에 촛점
KGC 2018
-The Way To Survive-
05매치메이킹
KGC 2018 -The Way To Survive- 34
매치메이킹
Chapter 05.
Great Technology For Great Games
• 비슷한 수준의 다른 플레이어와 게임하게 하기
• 플랫폼 별로 제공되는 기능을 쓰거나 직접 만들기
KGC 2018 -The Way To Survive- 35
플랫폼홀더가제공하는기능 쓰기
Chapter 05.
Great Technology For Great Games
• Google: OpenMatch
• AWS: FlexMatch
• Xbox Live: SmartMatch
• (매치메이킹이라고 부르긴 힘들지만) Steam Matchmaking
KGC 2018 -The Way To Survive- 36
직접만들기
Chapter 05.
Great Technology For Great Games
• (단순히) 필요한 유저 수가 될 때까지 기다린 후

매치 생성
• 레벨 혹은 ELO 레이팅 값을 써서 비슷한 유저끼리
묶어서 처리하기
• 지역 별 지연 시간을 구하고 적당한 위치 찾기
•
KGC 2018 -The Way To Survive- 37
쉽지않은 부분
Chapter 05.
Great Technology For Great Games
• 유저 수가 충분하지 않으면 매칭 자체가 어려움
• 유저 수가 많다면 적절한 유저를 매칭하는게 매우
복잡한 문제 (nCk: 조합론적 폭발)
• 유저 연결 관리: 네트워크 문제나 기다리다 지루해
서 같은 이유로 유저가 수시로 매치메이킹 풀을 드
나든다; 연결/유저/매치메이킹 큐 관리가 어려움
KGC 2018
-The Way To Survive-
06DEMO:만들어보기
KGC 2018 -The Way To Survive- 39
AWS+Unity3D+아이펀엔진으로만들어보기
Chapter 06.
Great Technology For Great Games
• Pong 게임
• Unity3D 데디케이티드 서버
• 아이펀엔진 게임 서버: 인증/매치메이킹/서버관리
• AWS: 서버 용량 관리를 위한 API 활용
KGC 2018 -The Way To Survive- 40
Pong게임:ATARI의고전게임
Chapter 06.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 41
Unity3D 데디케이티드서버
Chapter 06.
Great Technology For Great Games
• UE4 와 동일하진 않지만 데디케이티드 서버 제공
• UE4 보다는 좀 더 편하게 Windows / macOS /
Linux 모두 서비스 플랫폼으로 이용할 수 있다
KGC 2018 -The Way To Survive- 42
(광고)아이펀엔진
Chapter 06.
Great Technology For Great Games
• 인증 / DB / 랭킹/ 데디케이티드 서버 관리 + α
• ORM 을 활용해서 DB에 유저 데이터 기록
• 매치메이킹 기능을 써서 ELO 기반으로 매칭
• 매칭을 완료하면 VM 에서 데디케이티드 서버 실행
• 필요에 따라 EC2 VM을 지정한 지역에 띄우고,

그 위에서 데디케이티드 서버 실행
KGC 2018 -The Way To Survive- 43
DEMO
Chapter 06.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 44
샘플코드 (1):유저인증
Chapter 02.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 45
샘플코드 (2):데이터로딩및매치메이킹시작
Chapter 02.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 46
샘플코드 (3):매치메이킹조건검사
Chapter 02.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 47
샘플코드 (4):데디케이티드서버생성
Chapter 02.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 48
샘플코드 (5):게임결과후처리1/2
Chapter 02.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 49
샘플코드 (6):게임결과후처리2/2
Chapter 02.
Great Technology For Great Games
KGC 2018 -The Way To Survive- 50
많은수의 데디케이티드서버로확장하기
Chapter 04.
Great Technology For Great Games
Dedicated Server Host
Dedicated Server
Manager
Dedicated Server
(port =
Dedicated Server
(port =
Dedicated Server
(port =
Game Server
(iFun Engine)
Game Server
(iFun Engine)
Game Server
(iFun Engine)
RESTful APIs
KGC 2018 -The Way To Survive- 51
글로벌서비스로 확장하기
Chapter 04.
Great Technology For Great Games
Game Server
(iFun Engine)
Game Server
(iFun Engine)
Game Server
(iFun Engine)
Dedicated Server Host
Host Manager (python)
SSL/TLS
proxy
Dedicated Server
(port =
Dedicated Server
(port =
Dedicated Server
(port =
Dedicated Server Host
Host Manager (python)
SSL/TLS
(direct)
Dedicated Server
(port =
Dedicated Server
(port =
Dedicated Server
(port =
Redis (HA)
State API
Service
(RESTful)
DSM API
KGC 2018
-The Way To Survive-
마무리
KGC 2018
-The Way To Survive-
잘할수있는일로성공하기
KGC 2018 -The Way To Survive- 54
Great Technology For Great Games
• 게임 개발은 여러가지 요소가 종합적으로 필요한

어려운 일
• 작은 팀으로 좋은 게임을 만드는게, 큰 팀으로 모
든 기술적인 문제를 푸는 것보다 쉬울 수 있다
• 클라우드 서비스, 데디케이티드 서버처럼 외부 기
술을 활용해서 게임 플레이에 집중한다면 상대적
으로 빠른 시간 내에 런치가 가능하다
KGC 2018
-The Way To Survive-
Q&A
KGC 2018
-The Way To Survive-
iFunFactory
jinuk.kim@ifunfactory.com
www.ifunfactory.com
+82-70-4923-6566
THANKS!
G r e a t Te c h n o l o g y F o r G r e a t G a m e s , i F u n F a c t o r y

More Related Content

More from iFunFactory Inc.

[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석iFunFactory Inc.
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 iFunFactory Inc.
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP iFunFactory Inc.
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hostingiFunFactory Inc.
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성iFunFactory Inc.
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기iFunFactory Inc.
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버iFunFactory Inc.
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기iFunFactory Inc.
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교iFunFactory Inc.
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉iFunFactory Inc.
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현iFunFactory Inc.
 
2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기iFunFactory Inc.
 
iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFunFactory Inc.
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기iFunFactory Inc.
 

More from iFunFactory Inc. (20)

[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉
 
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현2016 NDC  - 클라우드 시대의  모바일 게임 운영 플랫폼 구현
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
 
2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기2016 NDC - 모바일 게임 서버 엔진 개발 후기
2016 NDC - 모바일 게임 서버 엔진 개발 후기
 
iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray) iFun Engine plugin 만들기 (for Stingray)
iFun Engine plugin 만들기 (for Stingray)
 
iFun Deploy 소개
iFun Deploy 소개iFun Deploy 소개
iFun Deploy 소개
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 

[KGC 2018] 소규모 팀으로 멀티플레이어 게임 개발하기 - 김진욱 CTO

  • 1. KGC 2018 -The Way To Survive- 소규모 팀으로
 멀티플레이어 게임 개발하기 ( j i n u k . k i m @ i f u n f a c t o r y . c o m )
  • 2. KGC 2018 -The Way To Survive- 01들어가며
  • 3. KGC 2018 -The Way To Survive- 시장의주류는 멀티플레이어게임
  • 4. KGC 2018 -The Way To Survive- 멀티플레이어게임개발 내부의핵심역량? 외부에서얻어다쓰기?
  • 5. KGC 2018 -The Way To Survive- 02멀티플레이어게임
 톺아보기
  • 6. KGC 2018 -The Way To Survive- 6 멀티플레이어MO 게임의요소 Chapter 02. Great Technology For Great Games • 인증: 유저 로그인 처리 • 매치메이킹: 적절한 다른 플레이어와 연결 • 게임 플레이: 게임 내 핵심 플레이 메커니즘 • 상점: 캐릭터, 액세서리, 게임 내 아이템 등등 판매 • 랭킹: 리더보드 / 친구끼리 경쟁 • 소셜 요소: 채팅, 길드/클랜, …
  • 7. KGC 2018 -The Way To Survive- 7 싱글플레이게임이라면 Chapter 02. Great Technology For Great Games • 로그인 / 유저 데이터 로딩 • 인게임 진입 로비 / 메인 화면 • 인게임 • 플레이 • 보상 지급 • 상점 / 메일 / 퀘스트 등의 컨텐츠 시스템 • 랭킹 / 길드 / …
  • 8. KGC 2018 -The Way To Survive- 8 멀티플레이게임이라면 Chapter 02. Great Technology For Great Games • 싱글 플레이 요소 (거의) 전부에 더해서 • 다른 유저와 같이 인게임에 모아서 집어넣기 • 인게임 플레이 (변형) • 네트워크 지연 시간을 숨기고 • 클라이언트 게임 메커니즘을 서버에 복제 • 복제한 게임 메커니즘을 다시
 클라이언트/서버 사이에 동기화하기
  • 9. KGC 2018 -The Way To Survive- 일정늘어나는걸줄이고 인력풀도조금만늘려서 만들수있는가?
  • 10. KGC 2018 -The Way To Survive- 03다른게임서비스는 어떻게만들었을까?
  • 11. KGC 2018 -The Way To Survive- PlayerUnknown’s Battleground
  • 12. KGC 2018 -The Way To Survive- Fortnite
  • 13. KGC 2018 -The Way To Survive- Overwatch
  • 14. KGC 2018 -The Way To Survive- 14 더많은개발자/ 더다양한스킬셋이필요합니다 Chapter 03. Great Technology For Great Games • 클라이언트/서버 간 통신: 네트워크 스킬 • 지연 시간 기획: 클라이언트/서버 간 지연 속이기 • 서비스: 운영을 위한 인프라/클라우드 다루기
  • 15. KGC 2018 -The Way To Survive- 적은인원으로문제해결하기: 아웃소싱
  • 16. KGC 2018 -The Way To Survive- 팀의핵심역량을구분하고
 그렇지않은것은외부에맡기기
  • 17. KGC 2018 -The Way To Survive- 17 아웃소싱 Chapter 03. Great Technology For Great Games • 개발사가 모든 작업을 직접하진 않는다 • 외부에서 가져다 쓰는게 싸고 / 핵심 부분이 아니 라고 판단하면 가져다 쓴다
  • 18. KGC 2018 -The Way To Survive- 18 아웃소싱:게임 클라이언트엔진 Chapter 03. Great Technology For Great Games • 클라이언트 엔진을 인하우스로 개발하는 경우는 흔치 않다 • PC / 콘솔 / 모바일을 가리지 않고 외부 엔진 도입 • 대형 개발사도 UE4 같은 제3자 엔진 이용
  • 19. KGC 2018 -The Way To Survive- 19 아웃소싱:서비스인프라스트럭처 Chapter 03. Great Technology For Great Games • 많은 부분을 클라우드 서비스로 이용 • 특히, IaaS 가 대두 • 클라우드 공급자들이 한국 내 주요 고객으로 항상 게임 회사를 언급
  • 20. KGC 2018 -The Way To Survive- 20 아웃소싱:게임 통계분석 Chapter 03. Great Technology For Great Games • 상당 수의 게임이 외부 서비스에 클라이언트 funnel 분석을 위한 데이터를 쌓는다 • 데이터를 직접 쌓은 경우에도, Google Analytics 나 BigQuery, AWS Elastic MR 같은 외부 분석 도구를 활용한다
  • 21. KGC 2018 -The Way To Survive- 예시게임들의추가공통점: 데디케이티드서버활용 매치메이킹기반
  • 22. KGC 2018 -The Way To Survive- 04데디케이티드서버
  • 23. KGC 2018 -The Way To Survive- DOOM(1993)
  • 24. KGC 2018 -The Way To Survive- 24 클라이언트기반 멀티플레이어 Chapter 04. Great Technology For Great Games • DOOM 과 같은 게임은 클라이언트 하나가 (주로) 판정을 담당 (super peer) • Super-peer 와의 연결이 단절된 경우
 처리가 복잡하다 (모바일 네트워크의 흔한 문제) • P2P 네트워킹은 모바일 환경에서
 제대로 동작하지 않는다 (모바일 캐리어 망 = 거대한 공유기)
  • 25. KGC 2018 -The Way To Survive- 25 데디케이티드서버의등장 Chapter 04. Great Technology For Great Games • 해당 판정만 처리하는 별도의 클라이언트 분리
 처음엔 headless client 라고 부름 (렌더링을 안해서) • 별도로 띄우는 서버라서 dedicated server 라고 부르기 시작 • Quake, Counter Strike, RTCW,
  • 26. KGC 2018 -The Way To Survive- 26 데디케이티드서버 Chapter 04. Great Technology For Great Games • 클라이언트 수정 최소화: 하나의 클라이언트에서 판정하는 것과 크게 다르지 않음 • 판정하는 클라이언트의 변조를 방지: 운영사가 직 접 서버를 띄움 • 서버 전용 로직 없이도 멀티플레이 구현:
 필요한 서버 프로그래머 수를 적게 유지할 수 있다
  • 27. KGC 2018 -The Way To Survive- 27 데디케이티드서버개발≅클라이언트 개발 Chapter 04. Great Technology For Great Games • 서버 시작 시간 단축 ≅ 클라 초기 로딩 시간 단축 • 메모리 최적화 ≅ 객체, 텍스처 최적화 • 시뮬레이션 변경 ≅ 클라이언트 틱 변경 • 로직 동기화 문제 ≅ 클라이언트 내 객체 동기화 •
  • 28. KGC 2018 -The Way To Survive- Lifeisnotthateasy
  • 29. KGC 2018 -The Way To Survive- 29 서비스확장하기 (1) Chapter 04. Great Technology For Great Games • 데디케이티드 서버:
 클라이언트 수준으로 메모리 사용 • 하나의 VM 위에서 수백-수천개 (=수백-수천 유저) 처리가 어려움 • 8vCPU 32G 메모리 VM에서 수 개 - 수십개 구동 하는게 한계
  • 30. KGC 2018 -The Way To Survive- 30 서비스확장하기 (2) Chapter 04. Great Technology For Great Games • VM / 서버 수를 늘리는 확장 전략 • IaaS 클라우드의 API를 활용해서 데디케이티드 서버를 띄울 VM 수를 늘리고 / 줄이는 방법 사용
  • 31. KGC 2018 -The Way To Survive- 31 클라이언트엔진의한계 Chapter 04. Great Technology For Great Games • 엔진 자체의 문제를 수정하는 복잡성 • Unreal Engine 제작사 EPIC은 Fortnite 개발 중 에 UE4 수정 • 배틀 로얄 게임이라 초기 인원 수가 일반적인 경 우보다 훨씬 많음 • 게임 시작 시점에 강하할 때 시야가 길어서 생기 는 문제
  • 32. KGC 2018 -The Way To Survive- 32 문제:MO에서MMO로넘어가면 Chapter 04. Great Technology For Great Games • 클라이언트 기술 기반: 엄청나게 많은 유저 (MMO) 동시 처리가 쉽지 않음 • 최적화 관점이 다르다 • 서버는 클라이언트 연결마다 쓸 수 있는 CPU/ 메모리 등을 미리 분배해서 설계 • 클라이언트는 상대적으로 안정적인 렌더링
 속도와 유저 입력 지연 시간에 촛점
  • 33. KGC 2018 -The Way To Survive- 05매치메이킹
  • 34. KGC 2018 -The Way To Survive- 34 매치메이킹 Chapter 05. Great Technology For Great Games • 비슷한 수준의 다른 플레이어와 게임하게 하기 • 플랫폼 별로 제공되는 기능을 쓰거나 직접 만들기
  • 35. KGC 2018 -The Way To Survive- 35 플랫폼홀더가제공하는기능 쓰기 Chapter 05. Great Technology For Great Games • Google: OpenMatch • AWS: FlexMatch • Xbox Live: SmartMatch • (매치메이킹이라고 부르긴 힘들지만) Steam Matchmaking
  • 36. KGC 2018 -The Way To Survive- 36 직접만들기 Chapter 05. Great Technology For Great Games • (단순히) 필요한 유저 수가 될 때까지 기다린 후
 매치 생성 • 레벨 혹은 ELO 레이팅 값을 써서 비슷한 유저끼리 묶어서 처리하기 • 지역 별 지연 시간을 구하고 적당한 위치 찾기 •
  • 37. KGC 2018 -The Way To Survive- 37 쉽지않은 부분 Chapter 05. Great Technology For Great Games • 유저 수가 충분하지 않으면 매칭 자체가 어려움 • 유저 수가 많다면 적절한 유저를 매칭하는게 매우 복잡한 문제 (nCk: 조합론적 폭발) • 유저 연결 관리: 네트워크 문제나 기다리다 지루해 서 같은 이유로 유저가 수시로 매치메이킹 풀을 드 나든다; 연결/유저/매치메이킹 큐 관리가 어려움
  • 38. KGC 2018 -The Way To Survive- 06DEMO:만들어보기
  • 39. KGC 2018 -The Way To Survive- 39 AWS+Unity3D+아이펀엔진으로만들어보기 Chapter 06. Great Technology For Great Games • Pong 게임 • Unity3D 데디케이티드 서버 • 아이펀엔진 게임 서버: 인증/매치메이킹/서버관리 • AWS: 서버 용량 관리를 위한 API 활용
  • 40. KGC 2018 -The Way To Survive- 40 Pong게임:ATARI의고전게임 Chapter 06. Great Technology For Great Games
  • 41. KGC 2018 -The Way To Survive- 41 Unity3D 데디케이티드서버 Chapter 06. Great Technology For Great Games • UE4 와 동일하진 않지만 데디케이티드 서버 제공 • UE4 보다는 좀 더 편하게 Windows / macOS / Linux 모두 서비스 플랫폼으로 이용할 수 있다
  • 42. KGC 2018 -The Way To Survive- 42 (광고)아이펀엔진 Chapter 06. Great Technology For Great Games • 인증 / DB / 랭킹/ 데디케이티드 서버 관리 + α • ORM 을 활용해서 DB에 유저 데이터 기록 • 매치메이킹 기능을 써서 ELO 기반으로 매칭 • 매칭을 완료하면 VM 에서 데디케이티드 서버 실행 • 필요에 따라 EC2 VM을 지정한 지역에 띄우고,
 그 위에서 데디케이티드 서버 실행
  • 43. KGC 2018 -The Way To Survive- 43 DEMO Chapter 06. Great Technology For Great Games
  • 44. KGC 2018 -The Way To Survive- 44 샘플코드 (1):유저인증 Chapter 02. Great Technology For Great Games
  • 45. KGC 2018 -The Way To Survive- 45 샘플코드 (2):데이터로딩및매치메이킹시작 Chapter 02. Great Technology For Great Games
  • 46. KGC 2018 -The Way To Survive- 46 샘플코드 (3):매치메이킹조건검사 Chapter 02. Great Technology For Great Games
  • 47. KGC 2018 -The Way To Survive- 47 샘플코드 (4):데디케이티드서버생성 Chapter 02. Great Technology For Great Games
  • 48. KGC 2018 -The Way To Survive- 48 샘플코드 (5):게임결과후처리1/2 Chapter 02. Great Technology For Great Games
  • 49. KGC 2018 -The Way To Survive- 49 샘플코드 (6):게임결과후처리2/2 Chapter 02. Great Technology For Great Games
  • 50. KGC 2018 -The Way To Survive- 50 많은수의 데디케이티드서버로확장하기 Chapter 04. Great Technology For Great Games Dedicated Server Host Dedicated Server Manager Dedicated Server (port = Dedicated Server (port = Dedicated Server (port = Game Server (iFun Engine) Game Server (iFun Engine) Game Server (iFun Engine) RESTful APIs
  • 51. KGC 2018 -The Way To Survive- 51 글로벌서비스로 확장하기 Chapter 04. Great Technology For Great Games Game Server (iFun Engine) Game Server (iFun Engine) Game Server (iFun Engine) Dedicated Server Host Host Manager (python) SSL/TLS proxy Dedicated Server (port = Dedicated Server (port = Dedicated Server (port = Dedicated Server Host Host Manager (python) SSL/TLS (direct) Dedicated Server (port = Dedicated Server (port = Dedicated Server (port = Redis (HA) State API Service (RESTful) DSM API
  • 52. KGC 2018 -The Way To Survive- 마무리
  • 53. KGC 2018 -The Way To Survive- 잘할수있는일로성공하기
  • 54. KGC 2018 -The Way To Survive- 54 Great Technology For Great Games • 게임 개발은 여러가지 요소가 종합적으로 필요한
 어려운 일 • 작은 팀으로 좋은 게임을 만드는게, 큰 팀으로 모 든 기술적인 문제를 푸는 것보다 쉬울 수 있다 • 클라우드 서비스, 데디케이티드 서버처럼 외부 기 술을 활용해서 게임 플레이에 집중한다면 상대적 으로 빠른 시간 내에 런치가 가능하다
  • 55. KGC 2018 -The Way To Survive- Q&A
  • 56. KGC 2018 -The Way To Survive- iFunFactory jinuk.kim@ifunfactory.com www.ifunfactory.com +82-70-4923-6566 THANKS! G r e a t Te c h n o l o g y F o r G r e a t G a m e s , i F u n F a c t o r y