멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~YEONG-CHEON YOU
Windows 10의 UWP 앱을 개발하면 모든 Windows 10 디바이스에서 앱을 작동할 수 있습니다.
이 UWP 앱을 C++로 개발할 수 있습니다. C++로 앱을 개발하면 크로스 플랫폼 지원의 유리함, 기존 코드의 재활용, 성능향상 등의 이점이 있습니다. 본 세션에서는 몇 가지 예를 들어 C++로 UWP 앱을 개발하는 방법을 소개하며 특히 win32와 C++을 사용하던 개발자가 쉽게 UWP 앱 개발에 적응할 수 있도록 돕습니다.
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰승민 백
NDC 2016 발표 자료입니다
아래는 공개된 세션의 소개입니다
------------------------------------------------------------
게임을 개발하다 보면 액션, RPG를 비롯한 많은 장르에서 캐릭터의 스킬을 만들어야 하는 때가 옵니다.
다양한 스킬의 기획을 제한하지 않으면서도, 빠르게 개발한다는 두 가지 목표를 달성하기 위해서는 어떻게 개발해야 하는지 고민하고 프로젝트에 적용한 결과를 공유하는 세션입니다.
다음과 같은 세 가지 개발 방법을 보여드리고, 각각의 장단점을 비교하는 형태로 진행됩니다.
1. 고전적인 하드 코딩 방식
2. 한 달에 하나씩의 캐릭터 업데이트를 단행했던 <최강의>에서 사용했던 스킬 툴 방식 (온라인 액션RPG, 언리얼3 기반)
3. 현재 개발 중인 모바일 프로젝트 <건파이트>에서 시도하고 있는 언리얼4 블루프린트 기반 방식
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기iFunFactory Inc.
2018 아이펀팩토리 데브데이 서버위더스
(iFunFactory DevDay Server,Withus)
제목 : Scalable 한 게임 서버 만들기
발표자 : 문대경 CEO
일정 : 2018년 03월 28일
개요 : 게임 서버의 고확장성을 확보하기 위한 기법들을 설명하고, 각 기법들의 서버 장애에 대한 대응 전략을 공개합니다.
더 많은 정보를 원하신다면 아래를 참고해주세요
*아이펀팩토리 홈페이지 : https://ifunfactory.com/
*아이펀팩토리 기술 블로그 : https://blog.ifunfactory.com/
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기iFunFactory Inc.
2018 아이펀팩토리 데브데이 서버위더스
(iFunFactory DevDay Server,Withus)
제목 : HTML5 / WebSocket으로 Pong 게임 만들기
발표자 : 민영기 테크니컬 디렉터
일정 : 2018년 03월 28일
개요 : HTML5 / Websocket을 이용하여 브라우저 상에서 동작하는 실시간 대전 게임 'Pong'을 구현해 보며 마주치는 문제점들과 해결책을 알아봅니다
아래링크를 통해 아이펀팩토리의 더 많은 정보를 얻으실 수 있습니다.
*아이펀팩토리 홈페이지 : https://ifunfactory.com/
*아이펀팩토리 기술 블로그 : https://blog.ifunfactory.com/
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
2018 아이펀팩토리 데브데이 서버위더스
(iFunFactory DevDay Server,Withus)
제목 : 분산 환경을 위한 ORM 개발 경험 공유
발표자 : 남승현 시니어 프로그래머
일정 : 2018년 03월 28일
개요 : ORM의 모든 것! ORM이 분산 환경에서 작동하기 위한 조건들과 ORM을 위한 캐시, 분산 락 구현에 대해 소개합니다.
아래링크를 통해 아이펀팩토리의 더 많은 정보를 얻으실 수 있습니다.
*아이펀팩토리 홈페이지 : https://ifunfactory.com/
*아이펀팩토리 기술 블로그 : https://blog.ifunfactory.com/
2018 아이펀팩토리 데브데이 서버위더스
(iFunFactory DevDay Server,Withus)
제목 : 코드 수정 없이 리눅스 게임 서버 성능 평가
발표자 : 김진욱 CTO
일정 : 2018년 03월 28일
개요 : 서버에 코드 추가 없이도 고수준에서 서버 성능 분석이 가능하다!
실행 중인 서버를 외부에서 관찰하여 최대한 성능을 분석하고 디버깅 하는 법을 공개 합니다.
아래링크를 통해 아이펀팩토리의 더 많은 정보를 얻으실 수 있습니다.
*아이펀팩토리 홈페이지 : https://ifunfactory.com/
*아이펀팩토리 기술 블로그 : https://blog.ifunfactory.com/
Unite'17 Seoul 아이펀팩토리 발표자료
1. 강연주제: 클라이언트 개발자, 서버 개발 시작하기
2. 강연자: 박근환 TD
3. 강연소개: 이 세션은 주로 게임 클라이언트 개발자로 경력을 쌓아오던 개발자가 게임 서버 솔루션 회사에서 일하면서 알게된 사실들을 바탕으로, 클라이언트 개발자가 서버 개발을 시작하려면 필요한 것들이 무엇인지, 어떻게 시작해야 하는지에 대하여 이야기합니다.
2016 아이펀팩토리 Dev Day 발표 자료
강연 제목 : Docker 로 Linux 없이 Linux 환경에서 개발하기
발표자 : 김진욱 CTO
<2016>
- 일시 : 2016년 9월 28 수요일 12:00~14:20
- 장소 : 넥슨 판교 사옥 지하 1층 교육실
9. 네트워크 메시지 처리하기 (1)
서버와 클라이언트 사이에 미리 정한 메시지 형식으로 주고 받는다
여기서는 Google protobuf 를 쓴다
클라이언트→서버: 입력 전달 {이동, 방향전환, 점프, 표정}
서버→클라이언트: 각 클라이언트의 {위치/방향/점프/표정} 목록
10. (p_x, p_z)
a_v
Q (?, y, ?, w)
= f(a_h)
네트워크 메시지 처리하기 (2)
unity-chan 프로젝트 변수 이용
클라이언트 상태
위치: (p_x, p_z)
방향: Q (사원수; y, w를 전송)
a_v: 방향으로 전진하는 속도
a_h: 방향 전환하는 속도
12. Protobuf 메시지 정의하기
extend FunMessage {
// 서버 -> 클라이언트
optional SpawnSelf sc_spawn_self = 16; // 연결된 직후에 받는 메시지
optional Spawn sc_spawn_other = 17; // 다른 유저가 연결되면 받는 메시지
optional UserUpdate sc_update = 18; // 모든 유저의 현재 상태 전달
optional Killed sc_killed = 19; // 유저 연결이 끊어지면 처리
optional FaceUpdate sc_face = 20; // 표정 업데이트
// 클라이언트 -> 서버
optional InputUpdate cs_input = 31; // 입력 변경
optional ChangeFace cs_face = 32; // 표정 변경
}
16. 이동하는 유저 처리 (1)
다음 정보를 모든 유저에게 알린다:
현재 위치
변경된 이동 방향
변경된 회전 방향
점프 상태
17. 이동하는 유저 처리 (2)
모든 유저는 똑같은 방식으로 처리한다:
이동한 유저: 위치 이동 메시지가 오면 그 때 자신의 정보를 업데이트한다
다른 유저: 위치 이동 메시지가 오면 이동한 유저의 정보 업데이트
문제점: 반응 속도가 느리다
해결책: 바로 자기 화면을 업데이트하고 / 나중에 메시지가 오면 보간
오늘 발표에선 다루지 않습니다
21. 게임서버 게임서버 …
Game Servers
세션 저장소 데이터 캐시 랭킹 캐시
Redis 서버군
유저 데이터 랭킹 데이터 …
MySQL 서버군
Haproxy …
로드밸런서
샤딩 프록시 샤딩 프록시
빌링 서버
…
외부 결제 관련
랭킹 서버
랭킹 서버
랭킹 서비스
클라이언트
22. 여기서 다루지 않은 것
게임서버와 데이터 베이스 사이에 오가는 데이터를 어떻게 표현하는가?
데이터 베이스에는 어떤 방식으로 읽고 쓰는가?
랭킹, 결제, 인증, … 의 외부 서비스는 어떻게 처리할까?
게임 서버가 여러 대가 되면 각 서버끼리 데이터는 어떻게 공유할까?
자주 접근하는 데이터는 어떻게 공유하는가?
여러 서버 중 한 대가 크래시하면?