넥슨코리아 사내 발표자료로 왓 스튜디오에서 파이썬으로 《야생의 땅: 듀랑고》 서버를 비롯한 여러가지 도구를 만든 경험을 공유합니다.
- 게임서버와 각종 툴, 테스트/빌드/배포 시스템을 만들 때 사용한 재료
- 파이썬 코드 품질 개선, 디버깅, 프로파일링, 최적화
- 파이썬 오픈소스 생태계와 왓 스튜디오가 하는 오픈소스 활동
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
NDC Python 게임서버 안녕하십니까? : 몬스터 슈퍼리그 게임 서버 편의 후속으로 기획된 발표입니다. 사내 준비 도중 "너굴" 님의 질문에서 시작되었습니다.
이 발표는 잘 알려진 RPC Framework 인 Thrift, gRPC를 살펴보고 예시로 오델로 게임을 만들어보면서 기존 RPC framework 들이 게임의 서버/클라 구조에 잘 어울리지는 살펴보고 왜 몬스터 슈퍼리그에서 그런 선택을 했는지 살펴봅니다.
그리고 게임에 맞게 RPC 를 설계하고 이를 이용하여 온라인 오델로 게임을 완성해봅니다.
MongoDB World 2015 - A Technical Introduction to WiredTigerWiredTiger
MongoDB 3.0 introduces a new pluggable storage engine API and a new storage engine called WiredTiger. The engineering team behind WiredTiger team has a long and distinguished career, having architected and built Berkeley DB, now the world's most widely used embedded database. In this talk we will describe our original design goals for WiredTiger, including considerations we made for heavily threaded hardware, large on-chip caches, and SSD storage. We'll also look at some of the latch-free and non-blocking algorithms we've implemented, as well as other techniques that improve scaling, overall throughput and latency. Finally, we'll take a look at some of the features we hope to incorporate into WiredTiger and MongoDB in the future.
넥슨코리아 사내 발표자료로 왓 스튜디오에서 파이썬으로 《야생의 땅: 듀랑고》 서버를 비롯한 여러가지 도구를 만든 경험을 공유합니다.
- 게임서버와 각종 툴, 테스트/빌드/배포 시스템을 만들 때 사용한 재료
- 파이썬 코드 품질 개선, 디버깅, 프로파일링, 최적화
- 파이썬 오픈소스 생태계와 왓 스튜디오가 하는 오픈소스 활동
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
NDC Python 게임서버 안녕하십니까? : 몬스터 슈퍼리그 게임 서버 편의 후속으로 기획된 발표입니다. 사내 준비 도중 "너굴" 님의 질문에서 시작되었습니다.
이 발표는 잘 알려진 RPC Framework 인 Thrift, gRPC를 살펴보고 예시로 오델로 게임을 만들어보면서 기존 RPC framework 들이 게임의 서버/클라 구조에 잘 어울리지는 살펴보고 왜 몬스터 슈퍼리그에서 그런 선택을 했는지 살펴봅니다.
그리고 게임에 맞게 RPC 를 설계하고 이를 이용하여 온라인 오델로 게임을 완성해봅니다.
MongoDB World 2015 - A Technical Introduction to WiredTigerWiredTiger
MongoDB 3.0 introduces a new pluggable storage engine API and a new storage engine called WiredTiger. The engineering team behind WiredTiger team has a long and distinguished career, having architected and built Berkeley DB, now the world's most widely used embedded database. In this talk we will describe our original design goals for WiredTiger, including considerations we made for heavily threaded hardware, large on-chip caches, and SSD storage. We'll also look at some of the latch-free and non-blocking algorithms we've implemented, as well as other techniques that improve scaling, overall throughput and latency. Finally, we'll take a look at some of the features we hope to incorporate into WiredTiger and MongoDB in the future.
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
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
CloudBread
클라우드 기반 무료 오픈소스 프로젝트로, 모바일 게임과 모바일 앱에 최적화된 게임 서버 엔진입니다. 모든 서비스는 마이크로소프트의 클라우드 서비스인 Azure에 최적화되어 동작하며, 안정성과 확장성을 목표로 개발 중입니다.
기능
•PaaS / DaaS 서버 엔진•PaaS, DaaS 로 손쉬운 개발 및 서비스 즉시 배포
•Real Auto Scale - PaaS
•개발/테스트/배포 = 통합 환경
•서비스 규모에 따른 앱 변경 없음
글로벌 론칭 아키텍처
•글로벌 론칭+데이터 동기화
•설계 부터 클라우드에 최적화된 아키텍처 및 프레임워크로 개발
•오픈소스 프레임워크 활용 개발
보안, 관리, 기술교육
•저장/통신에 표준 암호화 기술 적용
•기본 관리자 서비스 및 커스터마이징
•분석/관리 배치 작업 추가 제작 가능
개발자 그룹
•페이스북 사용자 그룹 : https://www.facebook.com/groups/cloudBreadProject/
지원되는 모바일 & 클라이언트환경
•iOS, Android, Windows Phone, Windows 스토어앱, Xamarin, PhoneGap, Sencha 등
•Microsoft Azure Mobile Service가 지원하는 모바일 및 다양한 클라이언트 플랫폼 지원 : http://azure.microsoft.com/ko-kr/documentation/services/mobile-services/
설치
•Wiki의 튜토리얼 설치 참조
프로젝트 설명
•모바일게임과 모바일 앱에서 사용되는 사용자의 패턴과 액션을 기록해 기능들을 제공
•클라이언트 모바일 디바이스는 게임서버로 JSON 방식의 데이터를 요청하고 서버가 해당 데이터를 처리 후 응답
•약 100여개의 비즈니스 로직이 기본제공(Wiki 참조)
•클라이언트는 마이크로소프트가 오픈소스로 직접 만들어 제공하는 라이브러리를 통해 서버로 API를 호출
실행 예제와 API 리스트는 Wiki 참조
Contribute/질문/토론
•페이스북 사용자 그룹 : https://www.facebook.com/groups/cloudBreadProject/
너무도 아름답고 과학적인 글자, 한글 珞
다른 언어에 비해 손글씨 데이터셋이 적고, 만들어진 손글씨 예측 모델의 인식률이 낮은 점이 아쉬워 직접 데이터를 생성하고 간단한 iOS 애플리케이션을 만들어봤습니다.
2019년 2월 23일 KCD 행사에서 케라스 코리아 팀에서 발표했던 자료를 보완/수정했습니다.
관련 코드는 아래 링크에서 확인할 수 있습니다.
https://github.com/MijeongJeon/KoreanClassification_Keras_Coreml
2. 일본의 사이버에이전트 사의 사례
http://www.cyberagent.co.jp/
http://ameblo.jp/principia-ca/entry-10983188853.html
아메바 블로그로 유명 http://www.ameba.jp/
3. MongoDB를 사용한 이유
개발 효율 향상
모바일 게임은 단 기간에 개발해야 한다.
그러나 게임은 특성상 자주 변경이 발생한다.
스키마레스의 MongoDB는 데이터 구조 변경에 유연하게 대응 할 수 있다.
신기능, 변경 릴리스 대응
모바일 게임은 주에 3,4회 릴리즈 하는 경우가 대다수이다.
그러나 컬럼 추가나 인덱스 추가를 온라인 상태에서 할 수 없으므로 점검이 필
요하게 된다.
MongoDB를 사용하면 점검이 하지 않고 추가가 가능하다.
유연한 쿼리, 인덱스
계층 구조화한 문서 내부에도 인덱스를 확장할 수 있다.
KVS로도 이용 할 수 있어서 유연한 쿼리 검색을 할 수 있어서 매력적이다.
초기 비용이 작고, 확장성을 보장
ReplicaSets(비동기 레플리케이션)과 Sharding(자동 데이터 분산)을 제공하고 있
음.
4. 시스템 구성
서버 구성은 Web-App 서버 2대, token이나 정보 캐시용 memcached 2대, Mon
goDB 3대로 총 7대.
MongoDB는 ReplicaSets 구성으로 primary에 쓰기를 하고, 2대의 secondary에
서 읽기.
5. Sharding을 하지 않은 이유
서버 대수가 필요하게 되어 비용이 증가하기 때문
ReplicaSets을 3세스(3X3대), mongos 서버, config 서버가 필요하기 때문에 총
11대 필요하게 된다
만약 여유분까지 생각하면 더 필요하다
미리 준비하는 것 보다 상황을 봐서 필요하게 될 때 투입하는 것이 좋다고 판단
6. 문서 설계
RDBMS와 달리 NoSQL에서는 정규화는 추천 되지 않는다
데이터를 분할하지 않고 문서로 보존하는 쪽이 데이터가 같은 장소에 보존 되어
서버간 통신 횟수도 줄여준다
문서 설계가 가장 중요하고, 가장 힘들다
문서 설계에서는 'modifier 오퍼레이션'과 '데이터 배열에 의한 유지'를 유효하게
사용할 수 있는 설계로 변경한다
또 이미지 바이너리 데이터의 캐시를 MongoDB에 하여 데이터 획득과 캐시 획
득을 한번 하도록 한다
7. modifier 오퍼레이션
모바일 게임에서는 레벨업이나 경험치 증가 등 increment 조작이 빈번하게 일어
난다
이것을 modifier 오퍼레이션을 이용하여 쉽게 대응할 수 있다
11. 데이터를 배열로 유지
유저가 모델 촬영을 한 정보를 가지는 컬렉션을 만든다
1명의 모델(modelId)가 복수의 area에 출현하기 때문에 모델의 상태(mcId)에 의
해 컴플리트 한지(compFlg), 거들떠 보았는지(talkFlg)를 배열로 유지한다
이 데이터는 참조가 많기 때문에 userId와modelId를 key로서 얻을 수 있는 것이
장점이 된다
13. 이미지 바이너리 데이터 보존
게임 내에서 만들어진 잡지는 유저가 조작한 타이틀 이미지와 촬영한 모델 이미
지를 합성하여 만든다
이미지를 읽을 때 발생하는 오버헤드를 줄이기 위해서 MongoDB에 이미지 바
이너리 데이터를 보존한다.
한번의 요청으로 필요한 데이터를 얻을 수 있다