(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 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
유튜브에서 방송한 자료입니다. https://www.youtube.com/watch?v=pcQeIW5v8S4
개발 이야기 유튜브 리스트는 다음과 같습니다: https://www.youtube.com/playlist?list=PLdntWJk2tJPKvRB0mSqC5tyKUv7HFtcqg
(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 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
유튜브에서 방송한 자료입니다. https://www.youtube.com/watch?v=pcQeIW5v8S4
개발 이야기 유튜브 리스트는 다음과 같습니다: https://www.youtube.com/playlist?list=PLdntWJk2tJPKvRB0mSqC5tyKUv7HFtcqg
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 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/
홍익대학교 알고리즘학회 HI-ARC 에서 ACM-ICPC 준비하는 사람들의 약점을 서로서로 채워주는 모임을 진행해왔는데, 그 중에 문자열 알고리즘 중 하나인 KMP 알고리즘을 주제로 발표했었읍니다.
2018년 6월 28일 기준 BOJ 50위권 진입하신 ssangba55 님 리스펙......
10. Implementation
•하드웨어 구성
- TFT-LCD 디스플레이
- DHT-11 : 온도/습도 측정 센서
•라즈베리파이에 설치된 주 소프트웨어/라이브러리
- Flask, Compiled(bundled) JS,
Chromium(with vue-devtools)
•개발환경
- Flask, Compiled(bundled) JS, Webpack,
Chrome(with vue-devtools)
•소스코드는 bitbucket 에서 관리
11. DOM, Virtual DOM
•Document Object Model
그냥 HTML 같이 구조화된 문서를 표현하는 방법
•HTML은 정적인 문서이기 때문에, 조작하기가 어려움.
•Virtual DOM은 자바스크립트를 이용해서
추상화된 DOM 오브젝트를 렌더링하는 방법.
12. Virtual DOM으로
시도하고자 했던 것
•Flask 에서 HTML 템플릿을 렌더링하는 작업을 최소화
(CPU는 HTML에 신경쓸 시간에 다른 일을 해야 합니다)
•200ms 간격으로 Ajax HTTP JSON request/
response
-> JSON 오브젝트를 이용하여 동적으로 렌더링
13. Why Virtual DOM?
•1. Proof of Concept (지극히 개인적인 이유)
•Virtual DOM 으로도 라즈베리파이에서 UI 를 구성할 수 있
다는 것을 보이고 싶었음
•2. 서버에서 HTML을 한땀한땀깎아서 제공해주는 것보다는
최소한의 정보(JSON)만 제공하는 방식이 트래픽 적게 잡아
먹음
14. Vue framework
Model, View, Controller
패턴을 이용해서
Virtual DOM을 조작하는
자바스크립트 라이브러리
View
Model
Controller
Vue-devtools 라는 크롬 확장
도구로 그나마 수월해짐
15. Webpack
•자바스크립트 전처리 언어로 작성된 파일, 스타일시트 전처
리 언어로 작성된 파일 등 여러가지 파일들의 의존성관계를
쭉 살펴보고 하나의 소스코드로 컴파일해주는 도구
•자바스크립트, 스타일시트를 불러올때 사용하는 <script>,
<style> 태그의 갯수를 최소화 하기 위해 사용함
18. PLAN
- 1주차 : Smart Clock 구현에 필요한 부품 주문
- 2주차 : Smart Clock 구현을 위해 보조적인 역할을 하
게 될 서버 세팅 완료
- 3주차 : 서버에서 처리할 데이터를 처리하기 위한 코드 작
성(Python 기반 웹프레임워크 Flask 사용 예정)
- 4주차 : Remote Server에서 제공할 Dashboard UI
코드 작성
- 5주차 : 부품 조립 후 Smart Clock UI 코드 작성
- 6주차 : 최종 점검 및 기능 추가
20. PLAN
- 1주차 : Smart Clock 구현에 필요한 부품 주문
(Proposal 작성하자마자 바로 주문함)
- 2주차 : Smart Clock 구현을 위해 보조적인 역할을 하게 될 서버 세
팅 완료
(원래부터 쓸 일이 있어서 Linode 일본 리전 VPS에 Nginx 세팅했었음)
- 3주차 : 서버에서 처리할 데이터를 처리하기 위한 코드 작성(Python
기반 웹프레임워크 Flask 사용 예정)
- 4주차 : Remote Server에서 제공할 Dashboard UI 코드 작성
(통계 차트를 그려주는 vue-chart.js 라이브러리는 알아봤지만 시간이
없어서 못함)
- 5주차 : 부품 조립 후 Smart Clock UI 코드 작성
(부품 조립이 정말 손이 많이 가는 작업이었음…)
- 6주차 : 최종 점검 및 기능 추가 (여유조차 없었음)
22. Retrospection
•웹개발만 쭉 해오다가 임베디드 영역을 건드려보는건 신선
한 경험이었음.
•렌더링 하는 정보에 비해 자바스크립트가 많이 무거움(…)
•어느 디스플레이 써야하느냐도 생각외로 중요한 요인이었음
(하드웨어는 역시 내가 건드릴 부분이 아니다)
•아직까지 Virtual DOM 으로 UI 구성하기에는 너무 이른 것
같다.