[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!Jeongsang Baek
애드브릭스는 모바일 앱 분석 솔루션으로, 많은 개발사들이 애드브릭스를 통해 앱의 성과를 지표화하여 분석하고 있습니다. 시간이 지나면서 사용자의 요구는 다양해졌고 분석해야 하는 앱의 개수는 폭발적으로 증가하였습니다. 그 결과 애드브릭스는 사용자에게 다양한 지표를 손쉽고 빠르게 고객에게 제공하기 위해 지속적인 서비스 아키텍쳐 재설계 및 데이터의 라이브 마이그레이션을 진행하였습니다.
이 세션은 폭발적으로 성장한 분석툴이 사용자의 다양한 요구사항을 만족시키기 위해 재설계한 아키텍쳐와 그 구현에 대해 설명하고 라이브 마이그레이션을 진행하며 얻은 경험과 인사이트를 공유합니다.
<p><span>장선진 Softwareinlife 팀장. 웹1.0과 웹2.0, 클라우드컴퓨팅 환경, 구글 앱 엔진의 이해와 장단점 및 개발환경과 활용(Google App Engine)에 대한 것으로 공개SW 역량프라자1차 정기 기술세미나 강연 내용입니다.</span></p>
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!Jeongsang Baek
애드브릭스는 모바일 앱 분석 솔루션으로, 많은 개발사들이 애드브릭스를 통해 앱의 성과를 지표화하여 분석하고 있습니다. 시간이 지나면서 사용자의 요구는 다양해졌고 분석해야 하는 앱의 개수는 폭발적으로 증가하였습니다. 그 결과 애드브릭스는 사용자에게 다양한 지표를 손쉽고 빠르게 고객에게 제공하기 위해 지속적인 서비스 아키텍쳐 재설계 및 데이터의 라이브 마이그레이션을 진행하였습니다.
이 세션은 폭발적으로 성장한 분석툴이 사용자의 다양한 요구사항을 만족시키기 위해 재설계한 아키텍쳐와 그 구현에 대해 설명하고 라이브 마이그레이션을 진행하며 얻은 경험과 인사이트를 공유합니다.
<p><span>장선진 Softwareinlife 팀장. 웹1.0과 웹2.0, 클라우드컴퓨팅 환경, 구글 앱 엔진의 이해와 장단점 및 개발환경과 활용(Google App Engine)에 대한 것으로 공개SW 역량프라자1차 정기 기술세미나 강연 내용입니다.</span></p>
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 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/
(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 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
Unite'17 Seoul 아이펀팩토리 발표자료
1. 강연주제: 클라이언트 개발자, 서버 개발 시작하기
2. 강연자: 박근환 TD
3. 강연소개: 이 세션은 주로 게임 클라이언트 개발자로 경력을 쌓아오던 개발자가 게임 서버 솔루션 회사에서 일하면서 알게된 사실들을 바탕으로, 클라이언트 개발자가 서버 개발을 시작하려면 필요한 것들이 무엇인지, 어떻게 시작해야 하는지에 대하여 이야기합니다.
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 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/
(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 인프라를 구축해야 할 때 고려해야 할 설계 방식과 기술적인 고민, 그것에 대한 현실적인 해법을 얻을 수 있다.
Unite'17 Seoul 아이펀팩토리 발표자료
1. 강연주제: 클라이언트 개발자, 서버 개발 시작하기
2. 강연자: 박근환 TD
3. 강연소개: 이 세션은 주로 게임 클라이언트 개발자로 경력을 쌓아오던 개발자가 게임 서버 솔루션 회사에서 일하면서 알게된 사실들을 바탕으로, 클라이언트 개발자가 서버 개발을 시작하려면 필요한 것들이 무엇인지, 어떻게 시작해야 하는지에 대하여 이야기합니다.
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장Dylan Ko
Gonnector(고넥터) 고영혁 대표가 주최한 스타트업 데이터 활용 세미나 '우리가 데이터를 쓰는 법' 의 세 번째 발표 자료
세미나 : 우리가 데이터를 쓰는 법 (How We Use Data)
일시 : 2016년 4월 12일 화요일 10:00 ~ 18:00
장소 : 마루180 (Maru180) B1 Think 홀
제목 : 모바일 게임 로그 데이터 분석 이야기
연사 : 엔터메이트 공신배 팀장
<마비노기 영웅전>의 사례에 기반하여 다음의 내용을 설명합니다.
1. 국내 및 해외에서 라이브 서비스 중에 발생하는 작업장 이슈에 대응하기 위해서 실시간 로그 수집 프로세스를 구축하면서 고민하였던 내용과
2. 수집한 로그 데이터를 활용하여 온라인 액션 게임에서 캐릭터 애니메이션 패턴간의 유사도(TF-IDF, Cosine Similarity)를 분석하여 현업 실무의 어뷰징 탐지에 활용한 사례를 공유합니다.
라이브 서비스 환경에서 국내 및 해외의 실시간 로그 수집에 대해서 고민하시는 개발자나 온라인 게임에서의 봇탐지에 관심있는 분석가들에게 유용한 사례를 소개해드릴 수 있을 것으로 생각합니다.
게임 개발에 적용해보자. 머신 러닝과 인공 지능! – 김일호 AWS 이머징 테크 리드 솔루션즈 아키텍트:: AWS Cloud Week - ...Amazon Web Services Korea
게임 개발에서 인공지능을 사용할 수 있는 부분은 생각보다 다양합니다. 게임 기능, 게임 개발, 게임 사용자 영역에서 관련된 다양한 사례들을 알아봅니다. 실제 게임 회사 내에서 궁금증을 가질만한 스토리를 가정하여 AWS의 다양한 인공지능 서비스를 활용할 수 있는 가이드를 드립니다. 또한 한국 게임 사의 Abnormal detection 적용 사례를 간략히 설명해 드립니다. 평소 인공 지능을 게임에 적용하길 원하시는 분들에게 손쉬운 시작점을 제공해 드립니다.
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
5. 돼지러너 소개
• iOS, Android(구글 플레이)
• 점핑런게임
• 늑대의 먹이가 되지 않기 위해 도망치는 돼지의 러
닝 + 점핑요소 가미
• 친구와 함께 우정릴레이
• 100만 조합의 나만의 돼지
• 아프리카TV 퍼블리싱
• 출시 3일만에 구글플레이 무료게임 순위 1위
• 200만 회원 돌파
• 해외 진출 예정
6. 게임 컨셉
•
•
•
•
•
기존 러닝에 더해 점핑(높이높이)요소를 추가
멀리도 가야하지만 높이도 올라가야한다
우정릴레이를 통한 누적거리 계산과 보너스선물
100만종의 조합이 가능한 돼지구성
세트조합, 히든조합으로 특수효과 발동
10. 게임서버
• LAMP – Linux, Apache, MySQL, PHP
• 모두 무료
• PHP는 코드 배포시 컴파일이나 서버의 재시동
이 필요 없음
• RESTful API
• RESTful은 수평 확장이 매우 쉬움
11. 캐시서버
• Memcached
• 랭킹을 비롯한 임시데이터 저장소
• 유실되어도 상관없거나, 값의 무결성이 중요하
지 않은 데이터 저장
• 질의 연산이 비싼 데이터를 캐싱하여 DB부하
분산
• 캐시서버가 다운되더라도 게임은 정상적으로 운
영되도록 예외처리
12. 로그서버
• 많은 NoSQL 을 후보군으로 놓고 검토
– Schema less
– 빠른 Insert속도
• mongoDB를 선택한 이유
– 방대한 문서와 예제, 구글링 검색결과
– RDB에서 넘어오기 가장 부담없는 NoSQL
– 친절하게 SQL을 어떻게 mongoDB로 포팅해야하는지 제공
•
•
•
•
사용자 액션 수집(아이템 구매, 소비, 행동)
로그서버가 다운되더라도 게임은 정상적으로 운영되도록 예외처리
데이터를 검색하기 위해 index 생성은 필수
서버 중지 없이 index를 생성할 수 있도록 락을 걸지 않는
Background 방식의 인덱스생성기능을 최신버전에서 지원
15. 인앱해킹
• 반드시 서버에서 결제정보를 재검증
• 영수증이 유효한지 체크(애플, 구글)
• 영수증이 기존에 처리된 영수증인지 주문번호를
통해 체크할것(중복 지급하지 않도록)
• 결제요청이 들어온 인앱상품이 우리 앱에 존재
하는지 확인. 다른 앱의 유효한 영수증이 날아
온다(iOS)
16. 메모리해킹
• 점수, 코인 등 중요 정보는 꼭 메모리해킹 대응
• 업그레이드 상태, 체력, 공격력, 방어력, 속도
모두 메모리 해킹의 대상
• 요즘 메모리해킹 도구는 굉장히 발전해서 게임
을 중간중간에 멈춘 다음에 변화하는 int값을
추려내어 값을 조작할 수 있는 해킹 인터페이스
를 제공
• 모두 대응할 수 없다. 적당히 trade off
17. 안드로이드 테스트
• 안드로이드 파편화(다양한 크기의 디스플레이)
• 많은 기기를 테스트하면 할수록 좋다
• 오래된 기종이라도 많은 판매량을 기록한 기기
들은 꼭 체크(갤2, 갤노트1)
18. 안드로이드 대응
• 심사가 없어서 좋은 안드로이드
• 마켓등록 후 3시간 정도면 검색가능(사람마다
차이가 있음)
• 원하는 기능을 제약없이 마음대로
• 다른 사람에게 인앱 선물하기 가능
19. iOS 국내에서 어렵다
•
•
•
•
•
긴 검수기간
Android에 비해 1~3개 빌드 늦어지는 iOS
개별 사용자 결제 취소 불가
대한민국은 Android 텃밭
돼지러너의 경우 95:5(Android : iOS)
20. DB
• MyISAM엔진은 쓰기가 많은 게임용으론 적당
하지 않다
• 꼭 검색에 사용하는 필드는 인덱스 생성
• slow-query 수시로 체크하여 튜닝
21. 퍼포먼스 테스트
• 출시전 게임 퍼포먼스 테스트
• Jmeter, apache ab, nGrinder
• RESTful API는 테스트 케이스를 만들기도 매우
간단하다
• 테스트를 통해 인덱스가 필요한 곳이나 비즈니
스 로직을 개선해야할 부분을 발견할 수 있다.
22. 운영툴
•
•
•
•
•
•
•
•
운영툴 (CS툴 + 개발툴 + 통계툴)
오버스펙 경계
Boostrap은 빠른 개발도구
디자이너의 도움 없이 컴포넌트를 붙여넣
는 식으로 빠르게 개발가능
CS담당자들이 사용자의 행동을 추적하여
고객요청에 대응할 수 있도록
클라이언트개발자들이 스스로 값을 변경하
여 클라이언트 기능을 테스트 해볼 수 있
도록
매니저들이 중요 지표들을 확인할 수 있도
록
운영툴개발은 개발자의 시간을 많이 빼앗
지만 잘 만들어놓은 운영툴은 잡무에서 벗
어날 수 있게 해주어 오히려 이득
23. 로그의 활용
• 미리미리 KPI 설정하자
• 계속 변경되는 게임기능상의 변화로 어쩔 수 없
이 기능이 픽스되는 후반에 후다닥할 수밖에 없
는 로그넣기 작업
• 필요한 로그만 넣기
• 활용 다 못한다
• 쓰레기 쌓아두는격
24. 통계가공
• KPI에 따른 통계
• 자주 체크해야하는 통계는 운영툴에서 언제든
볼 수 있도록 제공
• Google chart API
25. 디버그, 테스트 도구와 문서화
• RESTful API를 테스트 할
수 있는 도구를 자체 개
발하여 사용중
• 문서화는 필수
• 클라이언트 개발자들이
쉽게 알 수 있도록
Swagger
26. 클라우드서비스
• 개발유휴인력, 서버자원이 부족한 스타트업에게 딱인 클라우
드서비스
• 대표적으로 AWS, 국내에는 KT ucloud(대표 게임 확밀아)
• 수요에 따라 서버를 증설 가능
• Auto scaling, 웹UI
• 보안과 편의성의 trade off
• AWS는 가장 가까운 데이터센터가 tokyo
• AWS tokyo로 서비스하는 게임들도 있다
• 그렇지만 tokyo도 국내에서 서비스하기엔 응답속도가 아쉽
다
• KT유클라우드 이제는 auto scaling을 비롯 AWS를 많이 따
라 잡았다