(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek
대부분의 중소 모바일 게임 업체는 앱을 잘 만들기에도 시간이 모자라 출시일을 잘 맞추기 급급한 상황이다. 그러다 보니 운영을 위한 툴은 소홀히 개발하는 경우가 대부분이고 운영 캠페인은 날림으로 개발하거나 그때 그때 개발자가 필요한 부분만 개발하기 일쑤다. 그러다보니 마케터는 결국 늘 개발자 눈치만 살피게 된다. 필자는 블루윈드에서 이러한 문제를 절감했고 '모바일 게임 개발사가 앱 개발에만 집중할 수 있게 해주고 싶다'는 IGAworks의 철학에 공감하여 라이브 오퍼레이션 프로젝트를 시작하게 되었다.
라이브 오퍼레이션의 개발 중점과제는 5가지였다. 첫번째, 다수의 개발사가 하나의 큰 클라우드 시스템을 사용하도록 multi-tenant 인프라를 구축해야 한다. 두번째, TCO(Total cost of ownership)를 최소화해야 한다. 세번째, 앱의 핵심유저를 실시간으로 그룹화하여 타게팅 캠페인을 할 수 있어야 한다. 네번째, 캠페인의 성과를 마케터에게 실시간으로 피드백해야 한다. 다섯째, 3개월 안에 정식 서비스가 되어야 한다는 점이었다. (왜 우리에게 주어지는 시간은 늘 3개월인가) 그리고 당연하지만 이 서비스를 혼자 개발해야 했다.
이 다섯가지 이슈를 해결하기 위하여 AWS 클라우드 상에 생산성과 성능이 검증된 node.js 와 mongodb를 이용하여 서비스 백엔드를 구성하였고, multi-tenant를 구성하기 위한 여러가지 고민과 그 해결책을 직접 구현하였다. 필자는 node.js와 mongodb를 사용해 본 경험이 충분하다 생각했지만 대규모 정식 서비스를 진행하며 많은 함정에 빠졌고 결국 해결했다.
이 발표를 통해 청강자는 node.js와 mongodb를 이용하여 multi-tenant 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek
대부분의 중소 모바일 게임 업체는 앱을 잘 만들기에도 시간이 모자라 출시일을 잘 맞추기 급급한 상황이다. 그러다 보니 운영을 위한 툴은 소홀히 개발하는 경우가 대부분이고 운영 캠페인은 날림으로 개발하거나 그때 그때 개발자가 필요한 부분만 개발하기 일쑤다. 그러다보니 마케터는 결국 늘 개발자 눈치만 살피게 된다. 필자는 블루윈드에서 이러한 문제를 절감했고 '모바일 게임 개발사가 앱 개발에만 집중할 수 있게 해주고 싶다'는 IGAworks의 철학에 공감하여 라이브 오퍼레이션 프로젝트를 시작하게 되었다.
라이브 오퍼레이션의 개발 중점과제는 5가지였다. 첫번째, 다수의 개발사가 하나의 큰 클라우드 시스템을 사용하도록 multi-tenant 인프라를 구축해야 한다. 두번째, TCO(Total cost of ownership)를 최소화해야 한다. 세번째, 앱의 핵심유저를 실시간으로 그룹화하여 타게팅 캠페인을 할 수 있어야 한다. 네번째, 캠페인의 성과를 마케터에게 실시간으로 피드백해야 한다. 다섯째, 3개월 안에 정식 서비스가 되어야 한다는 점이었다. (왜 우리에게 주어지는 시간은 늘 3개월인가) 그리고 당연하지만 이 서비스를 혼자 개발해야 했다.
이 다섯가지 이슈를 해결하기 위하여 AWS 클라우드 상에 생산성과 성능이 검증된 node.js 와 mongodb를 이용하여 서비스 백엔드를 구성하였고, multi-tenant를 구성하기 위한 여러가지 고민과 그 해결책을 직접 구현하였다. 필자는 node.js와 mongodb를 사용해 본 경험이 충분하다 생각했지만 대규모 정식 서비스를 진행하며 많은 함정에 빠졌고 결국 해결했다.
이 발표를 통해 청강자는 node.js와 mongodb를 이용하여 multi-tenant 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!Jeongsang Baek
애드브릭스는 모바일 앱 분석 솔루션으로, 많은 개발사들이 애드브릭스를 통해 앱의 성과를 지표화하여 분석하고 있습니다. 시간이 지나면서 사용자의 요구는 다양해졌고 분석해야 하는 앱의 개수는 폭발적으로 증가하였습니다. 그 결과 애드브릭스는 사용자에게 다양한 지표를 손쉽고 빠르게 고객에게 제공하기 위해 지속적인 서비스 아키텍쳐 재설계 및 데이터의 라이브 마이그레이션을 진행하였습니다.
이 세션은 폭발적으로 성장한 분석툴이 사용자의 다양한 요구사항을 만족시키기 위해 재설계한 아키텍쳐와 그 구현에 대해 설명하고 라이브 마이그레이션을 진행하며 얻은 경험과 인사이트를 공유합니다.
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 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/
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...JooHyung Kim
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다루기
Youtube: https://www.youtube.com/watch?v=nbEodu0s5VA&t=4750s
AWS Nitro Enclave 를 활용하여 어플리케이션을 어떻게 개발할 수 있는지 증명 기능을 활용한 AWS KMS 연동 방법에 대해서 설명합니다.
10. Mercury Project
Legacy RPC와 REST API를 한번에 찍어내고
싶다.
node.js로 이렇게 저렇게 하면 될 것 같은데
…?
Mercury Project
– Node.js를 이용한 MMO 커뮤니티 프로젝트
– 스마트 디바이스 지원
– 한번에 REST, Socket RPC를 뽑고 싶다.
Page 10
11. node.js
Common Server Node.js
Script Engine
JavaScript Based
Based
Contents
Contents
Lua, Python V8
Script Engine JavaScript Engine
By C++ By C++
C++ or C# C++
IOCP Model IOCP Model
Page 11
12. I/O Model
윈도우 서버의 1차 임무
완벽한 비동기 I/O
I/O CompletePort
– 게임 서버 개발자 면접 볼 때의 hello world
– 가장 쓰레드를 적게 쓰면서 수천개의 소켓 이벤트 획득
– I/O는 비동기. Send/Recv는 일단 리턴한다.
Page 12
14. Benchmark
Boost::Asio vs. Node.js
총 데이터(Recv/Send) : 516,000,000/516,000,000
시도 서버 연결 개수 메모리(Max) CPU(Max) 스레드 서버 총 처리 시간 클라 총 Send 시간 클라 총 Recv 시간
Asio 1000 276,544 25 2 0:55 0:39 0:54
1차
Node 1000 665,004 12 3 1:04 1:02 1:07
Asio 1000 276,496 25 2 0:57 0:40 0:55
2차
Node 1000 664,596 12 4 1:05 1:02 1:06
Asio 1000 276,420 25 2 1:05 0:45 1:02
3차
Node 1000 662,024 13 4 1:16 1:14 1:20
메모리를 더 차지하나 속력은 만족
– V8의 메모리
Page 14
15. net module vs. Socket.IO
채팅서버
성능이 아닌 개발의 편의성
클라이언트 vs. 서버
Socket.IO
– Websocket
– Smart Phone
– Rooms
Page 15
16. Socket.IO
벤치마킹
– CPU E5-2650 2.00Ghz(2 processors)
– 4.00 GB
– x64 Windwos Server
– 153byte Echo test
접속수 2253 3257 4053
초당 에코성공 1690 2178 2681
초당 에코성공 1741 2174 2612
초당 에코성공 1684 2225 2225
Page 16
20. Basic Community System
CMN1
(node.js/Socket.I
O)
CBS
(Redis)
CMN2
(node.js/Socket.IO)
Push Gateway(C#)
Page 20
21. Native Problem
Win32 Client에서는 어떻게 받지?
WebSocket을 C/C++로 구현
RFC 6455 및 Socket.IO 프로토콜 직접 구현
Page 21
22. Websocket Protocol
Websocket Protcol
애당초 http, ftp, ws라는 것은 없다
• 서버 접속
• Session ID와 Transport ID 받음
• Socket 혹은 XMLHTTPRequest로 받을 것인지 선택
– XMLHTTPRequest라면 클라이언트가 계속 폴링
– Socket이라면 새 Transport 연결 획득
• 지정된 시간만큼 핸드쉐이킹
• Socket.IO 프로토콜 추가
Page 22
29. Socket.IO
I/O 문제 해결
모바일 환경에서 Connection 문제 해결
접근은 쉽다
그러나…
– 표현이 된다고 끝이 아니다.
– 빈약한 자료구조, C++에 비해 부족한 함수
– 싱글 쓰레드
– 아예 C++로 플러그인을 만들어 버릴까
– HeartBeat을 안젂하게 처리할 새로운 프로토콜 개발
Page 29