오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화Eunseok Yi
창의적이고 고품질의 게임 개발 결과물을 낼 수 있게 돕는 조직 내부의 개방적 업무 문화에 대한 강연입니다. 강연자가 책임자로 몸담고 있는 왓 스튜디오가 <야생의>를 만들면서 겪는 예시들을 들어서 설명합니다.
꿈과 열정에 기반한 자발적 업무 문화, 개인이 아닌 집단이 창의적인 결과물을 내게 일하는 방법, 지향점의 공유와 정렬, 효율적이고 개방적인 조직 구조, 의사소통에 쓰이는 수단들과 특성, 왓 스튜디오라는 집단이 굴러가며 <야생의> 같은 독특한 게임을 만들어가는 시스템 등에 대한 소개가 있을 예정입니다.
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화Eunseok Yi
창의적이고 고품질의 게임 개발 결과물을 낼 수 있게 돕는 조직 내부의 개방적 업무 문화에 대한 강연입니다. 강연자가 책임자로 몸담고 있는 왓 스튜디오가 <야생의>를 만들면서 겪는 예시들을 들어서 설명합니다.
꿈과 열정에 기반한 자발적 업무 문화, 개인이 아닌 집단이 창의적인 결과물을 내게 일하는 방법, 지향점의 공유와 정렬, 효율적이고 개방적인 조직 구조, 의사소통에 쓰이는 수단들과 특성, 왓 스튜디오라는 집단이 굴러가며 <야생의> 같은 독특한 게임을 만들어가는 시스템 등에 대한 소개가 있을 예정입니다.
멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
많은 게임사들은 AWS 의 글로벌 인프라를 이용해서 글로벌 런칭을 준비하고, 이를 통해 새로운 기회를 맞이합니다. 본 강연에서는 AWS Global Accelerator, Amazon CloudFront 및 다양한 AWS 의 글로벌 기반 데이터베이스 기능들을 기반으로 워크로드에 걸맞는 솔루션을 알아봅니다. 또한 많은 고객사에서 사용하는 아키텍처 패턴을 알아보고 이와 함께 고려할 점들을 알아봅니다.
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCore.Today
코어닷 기술 세미나 2018
Session #2 : 지동현 (NXTechnology 개발팀장)
Node.JS를 활용하여 IoT 플랫폼 만들기
15:00 ~ 15:50
프론트엔드와 백엔드가 함께 소통하기 위해 필요한 API. 그 API를 Node.JS로 만들고, 이를 IoT에서 활용하는 우리 회사의 사례를 소개해 드립니다.
- API란?
- 왜 Node.JS가 좋은가
- IoT에 적용해 보는 Node.JS
https://coredottoday.github.io/2018/10/15/Coredot-기술-세미나/
https://www.youtube.com/watch?v=Uf8Ef_UZFYQ
모든 게임 서비스에는 공통으로 구현해야 할 기능들이 있습니다. 대표적으로 채팅과 로그인, 접속 대기열 등이 있습니다. 시리즈 #2에서는 이런 기능들을 AWS의 서버리스 서비스로 구현하는 방법을 알아보겠습니다. 새 게임을 개발할 때마다 중복으로 구현하지 않고, 마이크로 서비스 아키텍처를 활용하는 방법들도 이론과 실습을 통해 알아봅니다.
1부: [Amazon ElasticCache, AWS Lambda, AWS IoT-Core] 게임채팅을 AWS에서 구현해보자!
2부: [Amazon SQS, Amazon Cognito, AWS Dynamo DB] AWS에서 대규모 로그인과 접속 대기열을 구현해보자!
[ CB-Larva - 멀티클라우드 인프라 및 응용을 위한 네트워킹 (Networking for multicloud infrastructure and applications) ]
- 글로벌 스케일 네트워킹
- Cloud Adaptive Network 구조 및 주요 기능
- CLADNet 기술 시연: 글로벌 스케일 MCIS에 CLADNet 입혀 보기
- Cloud Adaptive Network 활용 예시
- CB-Larva의 현재, 비전, 그리고 공개SW
# 발표영상(YouTube) : https://youtu.be/6ylyEoQvNN8?t=7741
----------------------------------------------------------------------------------------------------------
# Cloud-Barista Community Homepage : https://cloud-barista.github.io
# Cloud-Barista Community GitHub : https://github.com/cloud-barista
# Cloud-Barista YouTube channel : https://cloud-barista.github.io/youtube
# Cloud-Barista SlideShare : https://cloud-barista.github.io/slideshare
6. 01 실시간 게임서버를 만들어야 한다
KOCCA 지원사업 선정
실시간 카드배틀 야구게임
1:1 실시간 대전 / 관전
7. 02 실시간 게임서버를 만들어야 한다
제가 한번 해볼게요
실시간 서버 개발이 필요한 상황
잼있을것 같은데? 제가 해볼까요?
내 전문분야는 아니지만... 어떻게 되겠지... ㅋㅋㅋ
8. 03 실시간 게임서버를 만들어야 한다
우리 게임의 특징
실시간 매칭을 통한 1:1 PvP 대전 게임
Turn Base 기반 가위바위보 전략 플레이
실시간 관전 / Replay
9. 04 실시간 게임서버를 만들어야 한다
어떤 서버엔진을 쓸까?
GBaaS
게임 서비스를 위한 인프라를 클라우드 형태로 제공하는 서비스
인증, 매치메이킹, 랭킹등의 기능을 API형태로 클라우드로 제공
Game Spark, Photon Cloud, Amazon Game Lift..
제공하는 범위외의 기능이 필요할시 커스터마이징 어려움
사용량 또는 CCU에 따른 이용금액 지불
설치형 게임서버 엔진
서버엔진을 이용하여 원하는 형태로 직접 개발
대부분의 기능을 직접 개발해야 함
Photon, Proud Net, iFun Engine...
입맛에 맞게 개발 가능
엔진 라이센스 비용만 지불
설치형 게임서버 엔진으로 결정!
VS
클라우드 서비스로 서버관리 이슈가 적음 자체 서버관리 필요
10. 05 실시간 게임서버를 만들어야 한다
유니티 UNet으로 결정
Photon, Proud Net, iFun 등 다양한 게임서버 엔진을 고민하던 중...
모든 조건을 만족시키는 유니티 UNet 발견
C#으로 개발 가능
Mac OS에서 개발 가능
윈도우/리눅스 서버 배포 가능
무료
12. 01 유니티로 게임서버를 만들어보자
유니티 네트워킹
유니티에서 제공하는 네트워킹 API
유니티 멀티플레이어 서비스
매치 메이킹
릴레이 서버
각종 네트워킹 컴포넌트로 에디터에서 멀티플레어 게임 손쉽게 개발 가능
HLAPI / LLAPI 제공으로 고수준에서 저수준의 네트워킹 API 사용 가능
P2P 기반 실시간 멀티플레이 게임 개발에 적합 (RPC)
13. 02 유니티로 게임서버를 만들어보자
하지만 우리가 개발할 서버에 필요한 기능
Match Maker
Room
Turn Base Game Play
AI Bot Player
실시간 관전 / Replay
오브젝트 위치 / 변수 동기화 사용안함
P2P 사용안함
Client / Server 형태 서비스 필요
Turn Base 게임 플레이
14. 03 유니티로 게임서버를 만들어보자
네트워크 클라이언트와 서버
LLAPI를 사용하여 Client / Server 방식의 멀티플레이 개발
Transport Layer API 사용 가능
다수의 통신 채널과 다양한 QoS 설정 가능
유연한 네트워크 토폴리지 설정
로우레벨 NetworkServer, NetworkClient 클래스 직접 사용
원하는 형태로 클라이언트 접속 관리
RPC 이외에도 사용자 정의 네트워크 메세지 전송 가능
바이트 배열 수준의 메세지 송수신 가능
15. 04 유니티로 게임서버를 만들어보자
Network Server 시작
NetworkServer.Listen (serverPort)
서버 시작. 해당 서버포트로 클라이언트 접속 대기 상태
16. 05 유니티로 게임서버를 만들어보자
Network Client 접속
NetworkClient.Connect (serverIp, serverPort)
클라이언트 서버 접속. 해당 서버주소와 포트로 서버에 접속요청.
18. 07 유니티로 게임서버를 만들어보자
Network Message
MessageBase 상속받아 사용자 정의 메세지 구현
함수를 정의하지 않으면 자동으로 Serialize 함수 생성
Serialize / Deserialize 함수 Override시 직접 구현가능
자동으로 Serialize 되지 않는 데이터 타입
컬렉션
복잡한 클래스
19. 08 유니티로 게임서버를 만들어보자
MsgType 정의
메세지를 구분하기 위한 메세지 ID
시스템에서 정의한 MsgType 보다 큰 값으로 정의해야 함
20. 09 유니티로 게임서버를 만들어보자
네트워크 메세지 보내기
NetworkClient.Send (short messageType, MessageBase msg)
NetworkServer.SendToClient (int connectionId, short messageType, MessageBase msg)
21. 10 유니티로 게임서버를 만들어보자
네트워크 메세지 받기
RegisterHandler 등록 - MsgType, 호출될 함수
해당 메세지를 받으면 등록된 함수가 호출된다
22. 11 유니티로 게임서버를 만들어보자
서버용 스크립트 엔진
다양한 형태의 작전카드 제작을 위한 스크립트 필요
작전카드 종류 100여개 - 일일이 하드코딩 하기 힘들다
유니티용 자바스크립트 인터프리터 탑재
23. 12 유니티로 게임서버를 만들어보자
현재까지 진행상황
Match Maker
Room
Player Manager
1:1 TurnBase
Game Play
기본적인 1:1 대전 플레이 가능
데이터베이스 연동은 자체 API 서버 이용
서버 분산 작업 필요
아직까지는 큰 문제 없이 개발중...
25. 01 UNet 소소한 팁
서버가 잠들어요
유니티 Standalone 빌드는 앱이 비활성화 되면 멈춘다
PlayerSetting -> Resolution and Presentation -> Run In Background 체크
26. 02 UNet 소소한 팁
복잡한 클래스 / 컬렉션이 Serialize 되지 않아요
유니티 메뉴얼에 아래와 같이 명시되어 있음
JSON 사용
메세지 클래스를 JSON으로 Serialize 하고 JSON Data(String)로 전송
Newtonsoft.Json 라이브러리 사용
Client
Message
Server
Message
Message
Base
Message
Base
JSON Serialize
JSON Deserialize
JSON Serialize
JSON Deserialize
JSON Data (String)
27. 03 UNet 소소한 팁
동시에 10명이상 접속되지 않아요
Max Connections 기본설정은 10
NetworkServer.Configure(ConnectionConfig config, int maxConnecions)
NetworkClient도 동일하게 수정해야 한다 (다르면 CRCMismatch 오류 발생)
28. 04 UNet 소소한 팁
다양한 Connection Config 설정
Disconnect Timeout
연결이 끊어진 것으로 간주되기 전까지의 시간 제한을 밀리 초 단위로 정의합니다. 기본값 = 2000입니다.
Packet Size
최대 패킷 크기 (바이트) 패킷은 내부에 여러 메시지를 포함 할 수 있습니다. 기본값 = 1500입니다.
Ping Timeout
keep-alive 패킷 (ping이라고도 함) 사이의 지속 기간을 밀리 초 단위로 정의합니다. 기본값은 500입니다.
Send Delay
패킷을 보내기 전에 Send ()를 호출 한 후 지연 시간 (밀리 초)을 가져 오거나 설정합니다.
이 시간 동안 새 메시지가 대기중인 패킷에 결합 될 수 있습니다. 기본값 : 10ms.
30. 01 마무리 하며...
향후 서버구성 계획
Match Maker
API Server
Room
1:1 TurnBase
Room
1:1 TurnBase
Room
1:1 TurnBase
Room
1:1 TurnBase
Room
1:1 TurnBase
………
Amazon Game Lift
Unity Multiplayer
31. 02 마무리하며...
이런 프로젝트라면 유니티를 고려해 보세요
네트웍 속도에 큰 영향을 받지 않는다
오픈 월드나 MMO가 아니다 = 방 기반
하나의 방에 2~6명 정도의 인원이 플레이 한다
우리 게임만의 특별한 게임로직이 있다
Turn Base Game Play 이다
다양한 서버에 배포가 가능해야 한다 (Windows, Mac, Linux)
C#으로 개발하고 싶다
32. 03 마무리하며...
유니티 UNet 참고 레퍼런스
유니티3D 공식 레퍼런스
https://docs.unity3d.com/Manual/UNet.html
UNet bitbucket
https://bitbucket.org/Unity-Technologies/networking/src
33. 04 마무리하며...
걱정이 되지만 기대되는 소식
기존의 HLAPI / LLAPI는 Unity 2018.4 이후 지원 중단
새로운 Networking Layer 발표 예정
기존 LLAPI는 새로운 Networking Layer와 유사하여
마이그레이션이 수월할 것이라고 함