SlideShare a Scribd company logo
가볍고 유연하게 
데이터 분석하기 
: 쿠키런 사례 중심 
서버 개발팀 
김민우 
1
2 
강연자 소개 
• 김민우 
- minwoo.kim@devsisters.com 
- http://julingks.tistory.com 
• 전산과 졸업 
• 스타트업 1호 맴버로 조인, 2010년 말 KT에 인수 
• 선임 연구원 
- 빅 데이터 분석 플랫폼 개발 및 연구 
• 서버팀 
- 쿠키런 게임 서버 개발 
- LINE 쿠키런 서비스 총괄
대표 게임 
3 
OvenBreak 시리즈 
출시 : 2009년 6월 
주요 국가 : 미국, 캐나다, 영국, 호주 등 
2010년 11월 미국, 캐나다, 영국 등 20개 국가 애플 앱스토어 무료 1위 기록 
2011년 6월 미국, 중국, 캐나다 등 18개 국가 애플 앱스토어 무료 1위 기록 
2012년 12월 미국 애플 앱스토어 무료 10위 기록(OvenBreak2) 
쿠키런 for Kakao 
출시 : 2013년 4월 
주요 국가 : 대한민국 
2013년 대한민국 단일 게임 다운로드 순위 1위 기록 [App Annie] 
2013년 대한민국 단일 게임 매출 순위 3위 기록 [App Annie] 
출시 후 1년 5개월간 매출 순위 상위권(10위 이내) 유지 
LINE COOKIE RUN 
출시 : 2014년 1월 
주요 국가 : 일본, 대만, 태국 등 
2014년 상반기 태국, 대만 게임 다운로드 1위 기록 
총 21개 국가 애플 앱스토어 최고 매출 순위 10위권 기록 
2,000만 다운로드 
2,000만 다운로드 
3,900만 다운로드
서버팀이 하는 일 
• 게임 서버 개발 
• 게임 운영 관리 도구 개발 
• 게임 리소스 관리 시스템 개발 
• 게임 로그 분석 시스템 개발 
• 게임 서비스 운영, 모니터링 
• 인프라 관리 
• 장애 대응 
• 클라이언트 개발팀에서 하는 것 빼고 정말 다 하고 있어요 … 
- 정말 레알 DevOps 
4
상황이 이렇다 보니.. 
데이터 좀 뽑아 주세요~ 네!? 
5
다양한 로그 분석 요구 사항 
• KPI 지표 
- 일별 접속자 수, 일별 매출, 구매 유저의 평균 사용 금액 
• 게임 벨런싱 
- 유저 레벨 분포, 이벤트 미션 달성률 
• 게임 기획 
- 요즘 가장 많이 이용하는 쿠키와 펫 조합은 뭐죠? 
• 어뷰징 대응 
- 메모리 해킹, APK 변조, 변조 API 요청 
- 어뷰징인가요? 정상 플레인가요? 
• CS 대응 
- 보물이 사라졌어요 
- 믿어야 될지 말아야 될지..? 
6
가장 쉬운 것 부터 
오늘 접속한 유저 수는 몇 명인가요? 
7
KPI 지표 
• DAU (일별 유저수) 
• WAU (주간 고유 유저수) 
• MAU (월별 고유 유저수) 
• PU (구매한 고유 유저수) 
• ARPPU (구매한 유저의 평균 사용 금액) 
• 등등… 
• 물론 게임 비지니스 플랫폼에서 제공 
• 그래도 우리도 알고 있어야 되지 않을까? 
8
9 
KPI 지표 
• 결제 로그는 가장 중요하므로 트랜잭션으로 보호가 필요 
• 따라서 신뢰성이 보장되는 RDB에 저장 
• 크리스탈 입/출 로그도 중요 로그이므로 RDB에 저장 
• 출석시 1개의 크리스탈 지급 (접속 로그와 동일) 
• SQL 쿼리로 간단하게 
- 크리스탈 입/출 로그에서 DAU, WAU, MAU를 구함 
- 결제 로그에서 PU, ARPPU 등을 구함 
• 실시간으로 추이를 보고 싶어요 … 아.. 그래요? 
Auto Scaling group
지표의 추이를 실시간으로 보고 싶어요 
• StatsD + Graphite 를 적용 
- 본래 시스템 모니터링에 사용하고 있음 
• StatsD 
- 통계 정보를 수집하는 네트웍 데몬 
- UDP 또는 TCP로 통계 정보를 보냄 
• Graphite 
• StatsD에 쌓인 통계 정보를 그래프로 
시각화 
https://github.com/etsy/statsd/ 
10
지표의 추이를 실시간으로 보고 싶어요 
• StatsD + Graphite 시스템 모니터링으로 사용 
- 플레이 시작시, 플레이 종료시 
- 메소드 평균 응답 시간 (병목 구간을 찾을 수 있음) 
• 유저가 접속시, 구매시 UDP 요청을 StatsD로 보냄 
• 주의 : UDP이므로 신뢰성을 보장할 수 없다 (1~5% 유실) 
- 실시간 추이를 파악하는 데 적합함 
11
게임 벨런싱 
유저 레벨 분포 알려주세요~ 
12 
모든게 RDB에 있으면 좋으련만… 세상일이 그렇게 쉬운게 아니지
레벨 정보는 어디에 저장되어 있나? 
• 유저 데이터 저장소는 를 사용 
- 문서 지향 NoSQL 데이터 베이스 
- 분산 Key-Document 저장소 
• 예) 
13 
키 : 유저별 고유 식별키 값 : JSON 형식의 텍스트 
{ 
level : 15, // 레벨 
coin : 1500, // 코인 
crystal : 20, // 크리스탈 
… 
} 
F29F2COW2ZCQPF 
Auto Scaling group
어디에서 분석하지? 
• 누적 2,000만 유저 
• 약 1 TB 정도 
• 준 구조화된 데이터 (JSON 형식) 
• 1TB 작다면 작고 크다면 큰 크기인데.. (빅이냐? 스몰이냐? 누구냐 넌) 
• 우선 하둡에 넣어보자 :-3 
• 어떻게든 분석할 수 있겠지… 
- MapReduce, Pig, Hive, Cascading 
14
Hadoop (하둡) 
• 빅데이터의 상징이 되어버린.. 
• GFS와 MapReduce 논문의 오픈소스 구현체 
• 2.x 이후 분산 애플리케이션 플랫폼으로 변신 중 (YARN) 
• 수십, 수백대 머신을 하나의 파일 시스템 처럼 사용할 수 있다 
• 파일 시스템에 저장된 대용량 데이터를 Map함수와 Reduce함수로 
병렬 처리하여 빠르게 분석할 수 있다 
• 그나저나 하둡을 어떻게 띄우지!? 
15
아마존 EMR 
• 아마존 Elastic MapReduce 
• 하둡 클러스터를 손쉽게 구성해준다 
• CLI를 이용하면 10여분 만에 수십대의 하둡 클러스터를 생성 
• Couchbase 데이터를 
수십대 노드 하둡 클러스터로 어떻게 가져오지? 
16 
./elastic-mapreduce --create --alive --name “Hadoop Cluster"  
--num-instances=30 --master-instance-type=m1.large --hive-interactive 
예시
아파치 Sqoop 
• RDB에 있는 데이터를 하둡으로 가져온다 
• Couchbase에서는 sqoop-plugin을 제공 
• Couchbase에 저장된 데이터를 하둡으로 가져올 수 있다 
17 
Auto Scaling group 
bin/sqoop import --connect http://10.2.1.55:8091/pools --table DUMP 
sqoop { 
level : 15, // 레벨 
coin : 1500, // 코인 
crystal : 20, // 크리스탈 
… 
} 
…
하둡의 데이터를 어떻게 분석하지? 
• 하둡에 1TB 데이터를 가져왔는데 어떻게 분석하지? 
- MapReduce 구현 
- 추상화된 도구인 Hive, Pig, Cascading 
• 가장 익숙한 Hive를 선택 
• SQL-like 쿼리로 하둡의 데이터를 분석할 수 있다 
• HQL을 Map-Reduce 변환하여 데이터를 처리하고 결과를 보 
낸다 
18
Hive에서 JSON을 어떻게 한담? 
• Hive에서는 테이블의 Row를 읽고 쓸때 SerDe를 사용 
• Row를 실제 파일 시스템에 어떻게 쓸고 읽을 것이냐를 결정 
• 기본적으로 제공하는 SerDe들 
- Avro, ORC, RegEx, Thrift, Parquet 
• Hive JSON SerDe 
19 
https://github.com/rcongiu/Hive-JSON-Serde
20 
AWS CLI 
… 
Auto Scaling group
21 
AWS CLI 
… 
Auto Scaling group 
클러스터 
생성 
…
22 
AWS CLI 
… 
Sqoop 
{ 
level : 15, // 레벨 
coin : 1500, // 코인 
crystal : 20, // 크리스탈 
… 
} 
… 
Auto Scaling group 
클러스터 
생성 
…
SELECT count(1) FROM t1 
GROUP BY level Hadoop 
Job 
23 
AWS CLI 
… 
Sqoop 
{ 
level : 15, // 레벨 
coin : 1500, // 코인 
crystal : 20, // 크리스탈 
… 
} 
… 
Auto Scaling group 
클러스터 
생성 
…
SELECT count(1) FROM t1 
GROUP BY level Hadoop 
Job 
24 
AWS CLI 
… 
Sqoop 
{ 
level : 15, // 레벨 
coin : 1500, // 코인 
crystal : 20, // 크리스탈 
… 
} 
… 
Auto Scaling group 
클러스터 
생성 
… 
결과
이 방식으로 추출 가능했던 분석 결과들 
• 최고 점수 분포 
• 유저 레벨 분포 
• 최고 점수 상위 N 명 
• 쿠키별 보유량 
• 보물 보유량 
• 펫 보유량 
• 부스터 보유량 
• 사용자 라이프 타임 분포 
- 처음 접속 ~ 접속을 안한지 한달전 
25
이제 진짜 게임 로그 분석 
이벤트 미션 달성률 알려주세요 
26
미션 달성률 알려주세요 
• 무모한 도전 
- 100여개의 도전, 이전 도전을 깨야만 다음 도전이 나온다 
- 적절한 난이도가 필수 
- 쫌만 더 하면 깰 수 있을것 같은데… (이 느낌이 제일 중요) 
- 깰 수 없는 어려운 도전이라고 느끼면 쉽게 포기하고 만다 
- 유저들이 어느 도전에서 넘어가지 못하고 있는지 알려주세요! 
27
게임 로그는 어디에 저장되나? 
• 게임 서버(Tomcat)는 JSON 텍스트 파일을 로컬 디스크에 남김 
• 하루에 200~400GB 수준, 1년치가 100TB 수준 
• 해당 게임 로그는 최종 S3에 적재 
28 
Auto Scaling group 
S3
아마존 S3 
• 아마존의 간단한 저장 서비스 
• 비교적 싸고 안전하게 보관 
• 하둡에서 HDFS 대신 S3 사용 가능 (S3NativeFileSystem) 
• 다음으로 하둡 위에서 분석을 수행 
• 필요할 때 클러스터를 만들어 분석한다 
- 데이터 지역성(locality)은 떨어지나 수십 노드의 계산 능력만 사 
용한다고 생각하면 맘이 편하다 
- 실제로는 의외로 빠른 성능. 응!? 속도는 노드 댓수로 극복 
29
분석 결과 
30 
도전 종류 달성률 
이전 도전 달 
성률과 차이 
보너스타임 많이가기 1회 달성 71.5% 2.4% 
핑크곰 젤리 획득하기 300개 달성 69.0% 2.5% 
거대 생명물약 획득하기 4개 달성 66.6% 2.4% 
점프 많이하기 240회 달성 61.0% 5.5% 
게임중 코인 획득하기 700코인 달성 59.6% 1.4% 
왕 곰젤리 획득하기 15개 달성 58.3% 1.3% 
장애물 많이 충돌하기 4회 달성 57.2% 1.2% 
보너스타임 오래하기 6초 달성 56.0% 1.2% 
부활 많이하기 1회 달성 53.7% 2.3% 
젤리 많이 획득하기 3,000개 달성 52.5% 1.2% 
장애물 많이 통과하기 5회 달성 51.6% 1.0% 
슬라이드시간 오래하기 100초 달성 48.2% 3.4% 
게임중 점수 획득하기 250만점 달성 46.4% 1.8% 
핑크곰 젤리 획득하기 650개 달성 45.3% 1.1% 
밑으로 갈수록 
어려운 도전 
난이도가 비슷하게 
상승하다가 갑자기 
높아지는 도전들이 
존재 
난이도 조정이 필요
여러 소스의 데이터 분석 하기 
31 
Auto Scaling group 
S3 
… 
sqoop 
게임 로그 
게임 데이터 
유저 데이터
서울에서 김서방 찾기 
이 유저만 조사 해주세요 
32
33 
이 유저만 조사 해주세요 
• CS 문의 
- 잠깐 한눈 파는 사이에 고양이가 핸드폰을 밟고 지나가서 보물 
이 팔렸어요 
- 진짜 그 보물은 가지고 있었던 걸까? 
• 어뷰징 
- 용감한 쿠키로 1억점 달성 
- 불가능한 점수 달성한 유저의 기록을 발견 
- 다른 플레이 기록도 보고 싶은데요?
이 유저만 조사 해주세요 
• 하둡 
- 배치 데이터 분석을 목적으로 하는 시스템 
- 모든 데이터를 다 읽어야 하는 불편한 진실 
• 대부분의 요구 사항이 특정 유저가 특정 기간에 게임 로그 조회 요청 
• 회원 번호와 날짜로 인덱스를 만들자! 
- 날짜별로 저장된 게임 로그를 회원 번호로 정렬 
- 블록 시작 위치와 길이, 시작과 끝 회원번호를 저장하는 인덱스 생성 
- 인덱스 파일을 읽어서 필요한 파일과 블록만 읽는 
InputFormatter 를 구현 
34
내가 해 봤는데 말이지.. 
데이터 분석 첫 걸음마 
35
이런 데이터를 뽑아보면 좋을것 같은데.. 
• 데이터 분석의 가치를 조직에 전파하기 위해서는 첫 출발이 
좋아야 
• 목적 없이 시작하면 의외의 발견을 할 수도 있으나 가치있는 
결과를 얻지 못할 가능성이 높음 
• 선 목적 후 분석 
- 어떤 목적을 가지고 데이터를 추출할 것이냐? 
- 그 목적을 달성하려면 어떤 데이터가 필요한 것인가? 
- 그 데이터를 분석해서 목적을 달성할 수 있는가? 
36
주어진 현실 
• 하루에도 쏟아지는 많은 게임 로그, 자주 빠르게 변경되는 스키마 
• 개발하기도 벅찬데 로그 분석? 형식이 자꾸 바뀌는 데 어떻게 해야되지? 
- 무조건 남기고 본다, 필요할때 나중에 분석 
• 노드 100대 클러스터!? 
- 클러스터 운영 비용은 고스란히 인건비와 시간을 빼앗아간다 
• 구글링 해도 안나와요. 
- 내가 잘못한건가요? 오픈소스 버그인가요? 
• 오픈소스의 소스 레벨까지 이해할 수 있는 엔지니어가 필요 
- 찾기 힘듬. In House 로 해결하자. 
37
가볍게, 유연하게, 적당히 빠르게 
• 최대한 AWS의 장점을 활용한다 
- 클러스터는 한번 쓰고 버리는 물건 
- 간단한 python 스크립트, 쉘 스크립트로도 수십, 수백대의 클러 
스터를 이용한 분석 가능 
• 분석 싸이클 시간 절약에 집중하여 아키텍처를 구성 
- 로컬 머신에서도 손 쉽게 분석 가능 
• 누구나 쉽게 분석할 수 있는 개발 접근성 향상에 집중 
- 너도 나도 클러스터 생성 가능 
- 분석 시간을 줄여줄 간단한 도구를 개발하는 데 시간 투자 
38
마무으리 
• 소수의 인원으로도 대형 클러스터를 운용 가능 
- AWS, 관련 오픈소스의 성장 
• DevOps의 장점을 최대한 활용 
- 서비스 운영, 개발, 테스트, 배포, 아키텍처 구성 
- 모두 한 팀에서 하므로 적은 커뮤니케이션 비용으로 다양한 시 
도가 가능 
- 여러가지 새로운 도구와 프로세스를 빠르게 도입할 수 있음 
- 프로세스 혁신이 게임 서버 개발 만큼 우선 순위가 높은 과제 
- “프로그램이 할 수 있는 일은 사람이 하지말자” 
39
앞으로 뭐하지? 
• 준 실시간 분석이 가능하도록 시스템 개선 중 
• 카운트, 조인, 집계를 넘어선 클러스터링, 머신러닝 등 고급 분석 
을 위한 준비중 
• 페어 프로그래밍을 할 팀원 모집 중입니다. 
• career@devsisters.com 
40
가 
41 
감사합니다

More Related Content

PDF
서비스 기획자의 데이터 분석
PDF
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
PDF
데이터는 차트가 아니라 돈이 되어야 한다.
PDF
그로스 해킹 & 데이터 프로덕트 (Growth Hacking & Data Product) - 고넥터 고영혁 (Gonnector Dylan Ko)
PDF
데이터가 흐르는 조직 만들기 - 마이리얼트립
PDF
[DataBreak 2018] 기획자의 마음을 움직이는 데이터 시각화, 여찬구
PDF
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
PDF
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [코끼리책방 팀] : 사용자 스크랩 내용 기반 도서 추천
서비스 기획자의 데이터 분석
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
데이터는 차트가 아니라 돈이 되어야 한다.
그로스 해킹 & 데이터 프로덕트 (Growth Hacking & Data Product) - 고넥터 고영혁 (Gonnector Dylan Ko)
데이터가 흐르는 조직 만들기 - 마이리얼트립
[DataBreak 2018] 기획자의 마음을 움직이는 데이터 시각화, 여찬구
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [코끼리책방 팀] : 사용자 스크랩 내용 기반 도서 추천

What's hot (20)

PDF
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
PDF
서비스 기획자를 위한 데이터분석 시작하기
PDF
스타트업 데이터분석 - 퍼널분석과 코호트분석
PDF
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
PDF
프로덕트를 빠르게 개선하기 위한 베이지안 A/B 테스트
PDF
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
PDF
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [무드등] : 무신사를 활용한 고객 상황에 따른 의류 추천 스타일링 대시보드
PDF
[Causal Inference KR] 스타트업에서의 인과추론
PDF
(개정) 알면 알수록 어려운 서비스 기획 뽀개기!
PDF
인프런 - 스타트업 인프랩 시작 사례
PDF
데이터 분석에 필요한 기본 개념: 지표, Funnel 등 데이터를 이해하기 위한 멘탈 모델(Mental Model)
PDF
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [#인스타툰 팀] : 해시태그 기반 인스타툰 추천 챗봇
PDF
[우리가 데이터를 쓰는 법] 좋다는 건 알겠는데 좀 써보고 싶소. 데이터! - 넘버웍스 하용호 대표
PDF
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [COLLABO-AZ] : 고객 세그멘테이션 기반 개인 맞춤형 추천시스템 for 루빗
PDF
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SiZoAH] : 리뷰 기반 의류 사이즈 추천시스템
PDF
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [개미야 뭐하니?팀] : 투자자의 반응을 이용한 실시간 등락 예측(feat. 카프카)
PDF
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [4부터7] : 공방 301 데이터를 활용한 마케팅 방안 제시
PPTX
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
PDF
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
PPTX
로그 기깔나게 잘 디자인하는 법
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
서비스 기획자를 위한 데이터분석 시작하기
스타트업 데이터분석 - 퍼널분석과 코호트분석
린분석 with 레진코믹스 ( Lean Analytics with Lezhin Comics )
프로덕트를 빠르게 개선하기 위한 베이지안 A/B 테스트
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [무드등] : 무신사를 활용한 고객 상황에 따른 의류 추천 스타일링 대시보드
[Causal Inference KR] 스타트업에서의 인과추론
(개정) 알면 알수록 어려운 서비스 기획 뽀개기!
인프런 - 스타트업 인프랩 시작 사례
데이터 분석에 필요한 기본 개념: 지표, Funnel 등 데이터를 이해하기 위한 멘탈 모델(Mental Model)
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [#인스타툰 팀] : 해시태그 기반 인스타툰 추천 챗봇
[우리가 데이터를 쓰는 법] 좋다는 건 알겠는데 좀 써보고 싶소. 데이터! - 넘버웍스 하용호 대표
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [COLLABO-AZ] : 고객 세그멘테이션 기반 개인 맞춤형 추천시스템 for 루빗
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SiZoAH] : 리뷰 기반 의류 사이즈 추천시스템
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [개미야 뭐하니?팀] : 투자자의 반응을 이용한 실시간 등락 예측(feat. 카프카)
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [4부터7] : 공방 301 데이터를 활용한 마케팅 방안 제시
실전 스타트업 데이터분석: 소셜데이팅 이음은 이렇게 한다
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [쇼미더뮤직 팀] : 텍스트 감정추출을 통한 노래 추천
로그 기깔나게 잘 디자인하는 법
Ad

Similar to KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈 (20)

PDF
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
PDF
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
PDF
244 5rocks-deview
PDF
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
PDF
쿠키런 1년, 서버개발 분투기
PDF
빅데이터, big data
PDF
게임의 성공을 위한 Scalable 한 데이터 플랫폼 사례 공유 - 오승용, 데이터 플랫폼 리더, 데브시스터즈 ::: Games on AW...
PDF
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
PPTX
모바일 게임 하이브 런칭기 - 최용호
PPTX
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
PDF
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
PDF
Tdc2013 선배들에게 배우는 server scalability
PPTX
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
PDF
[H3 2012] 로그속 사용자 발자국 들여다보기
PDF
KGC 2013 DevSisters
PDF
카카오게임 첫 도전기 <돼지러너>
PDF
Cbt,fgt,obt를 통한 game data mining 기법
PDF
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
PPTX
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
게임 서비스 품질 향상을 위한 데이터 분석 활용하기 - 김필중 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
244 5rocks-deview
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
쿠키런 1년, 서버개발 분투기
빅데이터, big data
게임의 성공을 위한 Scalable 한 데이터 플랫폼 사례 공유 - 오승용, 데이터 플랫폼 리더, 데브시스터즈 ::: Games on AW...
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
모바일 게임 하이브 런칭기 - 최용호
[AWSKRUG] 모바일게임 하이브 런칭기 (2018)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
Tdc2013 선배들에게 배우는 server scalability
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
[H3 2012] 로그속 사용자 발자국 들여다보기
KGC 2013 DevSisters
카카오게임 첫 도전기 <돼지러너>
Cbt,fgt,obt를 통한 game data mining 기법
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
Ad

KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈

  • 1. 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 서버 개발팀 김민우 1
  • 2. 2 강연자 소개 • 김민우 - minwoo.kim@devsisters.com - http://julingks.tistory.com • 전산과 졸업 • 스타트업 1호 맴버로 조인, 2010년 말 KT에 인수 • 선임 연구원 - 빅 데이터 분석 플랫폼 개발 및 연구 • 서버팀 - 쿠키런 게임 서버 개발 - LINE 쿠키런 서비스 총괄
  • 3. 대표 게임 3 OvenBreak 시리즈 출시 : 2009년 6월 주요 국가 : 미국, 캐나다, 영국, 호주 등 2010년 11월 미국, 캐나다, 영국 등 20개 국가 애플 앱스토어 무료 1위 기록 2011년 6월 미국, 중국, 캐나다 등 18개 국가 애플 앱스토어 무료 1위 기록 2012년 12월 미국 애플 앱스토어 무료 10위 기록(OvenBreak2) 쿠키런 for Kakao 출시 : 2013년 4월 주요 국가 : 대한민국 2013년 대한민국 단일 게임 다운로드 순위 1위 기록 [App Annie] 2013년 대한민국 단일 게임 매출 순위 3위 기록 [App Annie] 출시 후 1년 5개월간 매출 순위 상위권(10위 이내) 유지 LINE COOKIE RUN 출시 : 2014년 1월 주요 국가 : 일본, 대만, 태국 등 2014년 상반기 태국, 대만 게임 다운로드 1위 기록 총 21개 국가 애플 앱스토어 최고 매출 순위 10위권 기록 2,000만 다운로드 2,000만 다운로드 3,900만 다운로드
  • 4. 서버팀이 하는 일 • 게임 서버 개발 • 게임 운영 관리 도구 개발 • 게임 리소스 관리 시스템 개발 • 게임 로그 분석 시스템 개발 • 게임 서비스 운영, 모니터링 • 인프라 관리 • 장애 대응 • 클라이언트 개발팀에서 하는 것 빼고 정말 다 하고 있어요 … - 정말 레알 DevOps 4
  • 5. 상황이 이렇다 보니.. 데이터 좀 뽑아 주세요~ 네!? 5
  • 6. 다양한 로그 분석 요구 사항 • KPI 지표 - 일별 접속자 수, 일별 매출, 구매 유저의 평균 사용 금액 • 게임 벨런싱 - 유저 레벨 분포, 이벤트 미션 달성률 • 게임 기획 - 요즘 가장 많이 이용하는 쿠키와 펫 조합은 뭐죠? • 어뷰징 대응 - 메모리 해킹, APK 변조, 변조 API 요청 - 어뷰징인가요? 정상 플레인가요? • CS 대응 - 보물이 사라졌어요 - 믿어야 될지 말아야 될지..? 6
  • 7. 가장 쉬운 것 부터 오늘 접속한 유저 수는 몇 명인가요? 7
  • 8. KPI 지표 • DAU (일별 유저수) • WAU (주간 고유 유저수) • MAU (월별 고유 유저수) • PU (구매한 고유 유저수) • ARPPU (구매한 유저의 평균 사용 금액) • 등등… • 물론 게임 비지니스 플랫폼에서 제공 • 그래도 우리도 알고 있어야 되지 않을까? 8
  • 9. 9 KPI 지표 • 결제 로그는 가장 중요하므로 트랜잭션으로 보호가 필요 • 따라서 신뢰성이 보장되는 RDB에 저장 • 크리스탈 입/출 로그도 중요 로그이므로 RDB에 저장 • 출석시 1개의 크리스탈 지급 (접속 로그와 동일) • SQL 쿼리로 간단하게 - 크리스탈 입/출 로그에서 DAU, WAU, MAU를 구함 - 결제 로그에서 PU, ARPPU 등을 구함 • 실시간으로 추이를 보고 싶어요 … 아.. 그래요? Auto Scaling group
  • 10. 지표의 추이를 실시간으로 보고 싶어요 • StatsD + Graphite 를 적용 - 본래 시스템 모니터링에 사용하고 있음 • StatsD - 통계 정보를 수집하는 네트웍 데몬 - UDP 또는 TCP로 통계 정보를 보냄 • Graphite • StatsD에 쌓인 통계 정보를 그래프로 시각화 https://github.com/etsy/statsd/ 10
  • 11. 지표의 추이를 실시간으로 보고 싶어요 • StatsD + Graphite 시스템 모니터링으로 사용 - 플레이 시작시, 플레이 종료시 - 메소드 평균 응답 시간 (병목 구간을 찾을 수 있음) • 유저가 접속시, 구매시 UDP 요청을 StatsD로 보냄 • 주의 : UDP이므로 신뢰성을 보장할 수 없다 (1~5% 유실) - 실시간 추이를 파악하는 데 적합함 11
  • 12. 게임 벨런싱 유저 레벨 분포 알려주세요~ 12 모든게 RDB에 있으면 좋으련만… 세상일이 그렇게 쉬운게 아니지
  • 13. 레벨 정보는 어디에 저장되어 있나? • 유저 데이터 저장소는 를 사용 - 문서 지향 NoSQL 데이터 베이스 - 분산 Key-Document 저장소 • 예) 13 키 : 유저별 고유 식별키 값 : JSON 형식의 텍스트 { level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 … } F29F2COW2ZCQPF Auto Scaling group
  • 14. 어디에서 분석하지? • 누적 2,000만 유저 • 약 1 TB 정도 • 준 구조화된 데이터 (JSON 형식) • 1TB 작다면 작고 크다면 큰 크기인데.. (빅이냐? 스몰이냐? 누구냐 넌) • 우선 하둡에 넣어보자 :-3 • 어떻게든 분석할 수 있겠지… - MapReduce, Pig, Hive, Cascading 14
  • 15. Hadoop (하둡) • 빅데이터의 상징이 되어버린.. • GFS와 MapReduce 논문의 오픈소스 구현체 • 2.x 이후 분산 애플리케이션 플랫폼으로 변신 중 (YARN) • 수십, 수백대 머신을 하나의 파일 시스템 처럼 사용할 수 있다 • 파일 시스템에 저장된 대용량 데이터를 Map함수와 Reduce함수로 병렬 처리하여 빠르게 분석할 수 있다 • 그나저나 하둡을 어떻게 띄우지!? 15
  • 16. 아마존 EMR • 아마존 Elastic MapReduce • 하둡 클러스터를 손쉽게 구성해준다 • CLI를 이용하면 10여분 만에 수십대의 하둡 클러스터를 생성 • Couchbase 데이터를 수십대 노드 하둡 클러스터로 어떻게 가져오지? 16 ./elastic-mapreduce --create --alive --name “Hadoop Cluster" --num-instances=30 --master-instance-type=m1.large --hive-interactive 예시
  • 17. 아파치 Sqoop • RDB에 있는 데이터를 하둡으로 가져온다 • Couchbase에서는 sqoop-plugin을 제공 • Couchbase에 저장된 데이터를 하둡으로 가져올 수 있다 17 Auto Scaling group bin/sqoop import --connect http://10.2.1.55:8091/pools --table DUMP sqoop { level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 … } …
  • 18. 하둡의 데이터를 어떻게 분석하지? • 하둡에 1TB 데이터를 가져왔는데 어떻게 분석하지? - MapReduce 구현 - 추상화된 도구인 Hive, Pig, Cascading • 가장 익숙한 Hive를 선택 • SQL-like 쿼리로 하둡의 데이터를 분석할 수 있다 • HQL을 Map-Reduce 변환하여 데이터를 처리하고 결과를 보 낸다 18
  • 19. Hive에서 JSON을 어떻게 한담? • Hive에서는 테이블의 Row를 읽고 쓸때 SerDe를 사용 • Row를 실제 파일 시스템에 어떻게 쓸고 읽을 것이냐를 결정 • 기본적으로 제공하는 SerDe들 - Avro, ORC, RegEx, Thrift, Parquet • Hive JSON SerDe 19 https://github.com/rcongiu/Hive-JSON-Serde
  • 20. 20 AWS CLI … Auto Scaling group
  • 21. 21 AWS CLI … Auto Scaling group 클러스터 생성 …
  • 22. 22 AWS CLI … Sqoop { level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 … } … Auto Scaling group 클러스터 생성 …
  • 23. SELECT count(1) FROM t1 GROUP BY level Hadoop Job 23 AWS CLI … Sqoop { level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 … } … Auto Scaling group 클러스터 생성 …
  • 24. SELECT count(1) FROM t1 GROUP BY level Hadoop Job 24 AWS CLI … Sqoop { level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 … } … Auto Scaling group 클러스터 생성 … 결과
  • 25. 이 방식으로 추출 가능했던 분석 결과들 • 최고 점수 분포 • 유저 레벨 분포 • 최고 점수 상위 N 명 • 쿠키별 보유량 • 보물 보유량 • 펫 보유량 • 부스터 보유량 • 사용자 라이프 타임 분포 - 처음 접속 ~ 접속을 안한지 한달전 25
  • 26. 이제 진짜 게임 로그 분석 이벤트 미션 달성률 알려주세요 26
  • 27. 미션 달성률 알려주세요 • 무모한 도전 - 100여개의 도전, 이전 도전을 깨야만 다음 도전이 나온다 - 적절한 난이도가 필수 - 쫌만 더 하면 깰 수 있을것 같은데… (이 느낌이 제일 중요) - 깰 수 없는 어려운 도전이라고 느끼면 쉽게 포기하고 만다 - 유저들이 어느 도전에서 넘어가지 못하고 있는지 알려주세요! 27
  • 28. 게임 로그는 어디에 저장되나? • 게임 서버(Tomcat)는 JSON 텍스트 파일을 로컬 디스크에 남김 • 하루에 200~400GB 수준, 1년치가 100TB 수준 • 해당 게임 로그는 최종 S3에 적재 28 Auto Scaling group S3
  • 29. 아마존 S3 • 아마존의 간단한 저장 서비스 • 비교적 싸고 안전하게 보관 • 하둡에서 HDFS 대신 S3 사용 가능 (S3NativeFileSystem) • 다음으로 하둡 위에서 분석을 수행 • 필요할 때 클러스터를 만들어 분석한다 - 데이터 지역성(locality)은 떨어지나 수십 노드의 계산 능력만 사 용한다고 생각하면 맘이 편하다 - 실제로는 의외로 빠른 성능. 응!? 속도는 노드 댓수로 극복 29
  • 30. 분석 결과 30 도전 종류 달성률 이전 도전 달 성률과 차이 보너스타임 많이가기 1회 달성 71.5% 2.4% 핑크곰 젤리 획득하기 300개 달성 69.0% 2.5% 거대 생명물약 획득하기 4개 달성 66.6% 2.4% 점프 많이하기 240회 달성 61.0% 5.5% 게임중 코인 획득하기 700코인 달성 59.6% 1.4% 왕 곰젤리 획득하기 15개 달성 58.3% 1.3% 장애물 많이 충돌하기 4회 달성 57.2% 1.2% 보너스타임 오래하기 6초 달성 56.0% 1.2% 부활 많이하기 1회 달성 53.7% 2.3% 젤리 많이 획득하기 3,000개 달성 52.5% 1.2% 장애물 많이 통과하기 5회 달성 51.6% 1.0% 슬라이드시간 오래하기 100초 달성 48.2% 3.4% 게임중 점수 획득하기 250만점 달성 46.4% 1.8% 핑크곰 젤리 획득하기 650개 달성 45.3% 1.1% 밑으로 갈수록 어려운 도전 난이도가 비슷하게 상승하다가 갑자기 높아지는 도전들이 존재 난이도 조정이 필요
  • 31. 여러 소스의 데이터 분석 하기 31 Auto Scaling group S3 … sqoop 게임 로그 게임 데이터 유저 데이터
  • 32. 서울에서 김서방 찾기 이 유저만 조사 해주세요 32
  • 33. 33 이 유저만 조사 해주세요 • CS 문의 - 잠깐 한눈 파는 사이에 고양이가 핸드폰을 밟고 지나가서 보물 이 팔렸어요 - 진짜 그 보물은 가지고 있었던 걸까? • 어뷰징 - 용감한 쿠키로 1억점 달성 - 불가능한 점수 달성한 유저의 기록을 발견 - 다른 플레이 기록도 보고 싶은데요?
  • 34. 이 유저만 조사 해주세요 • 하둡 - 배치 데이터 분석을 목적으로 하는 시스템 - 모든 데이터를 다 읽어야 하는 불편한 진실 • 대부분의 요구 사항이 특정 유저가 특정 기간에 게임 로그 조회 요청 • 회원 번호와 날짜로 인덱스를 만들자! - 날짜별로 저장된 게임 로그를 회원 번호로 정렬 - 블록 시작 위치와 길이, 시작과 끝 회원번호를 저장하는 인덱스 생성 - 인덱스 파일을 읽어서 필요한 파일과 블록만 읽는 InputFormatter 를 구현 34
  • 35. 내가 해 봤는데 말이지.. 데이터 분석 첫 걸음마 35
  • 36. 이런 데이터를 뽑아보면 좋을것 같은데.. • 데이터 분석의 가치를 조직에 전파하기 위해서는 첫 출발이 좋아야 • 목적 없이 시작하면 의외의 발견을 할 수도 있으나 가치있는 결과를 얻지 못할 가능성이 높음 • 선 목적 후 분석 - 어떤 목적을 가지고 데이터를 추출할 것이냐? - 그 목적을 달성하려면 어떤 데이터가 필요한 것인가? - 그 데이터를 분석해서 목적을 달성할 수 있는가? 36
  • 37. 주어진 현실 • 하루에도 쏟아지는 많은 게임 로그, 자주 빠르게 변경되는 스키마 • 개발하기도 벅찬데 로그 분석? 형식이 자꾸 바뀌는 데 어떻게 해야되지? - 무조건 남기고 본다, 필요할때 나중에 분석 • 노드 100대 클러스터!? - 클러스터 운영 비용은 고스란히 인건비와 시간을 빼앗아간다 • 구글링 해도 안나와요. - 내가 잘못한건가요? 오픈소스 버그인가요? • 오픈소스의 소스 레벨까지 이해할 수 있는 엔지니어가 필요 - 찾기 힘듬. In House 로 해결하자. 37
  • 38. 가볍게, 유연하게, 적당히 빠르게 • 최대한 AWS의 장점을 활용한다 - 클러스터는 한번 쓰고 버리는 물건 - 간단한 python 스크립트, 쉘 스크립트로도 수십, 수백대의 클러 스터를 이용한 분석 가능 • 분석 싸이클 시간 절약에 집중하여 아키텍처를 구성 - 로컬 머신에서도 손 쉽게 분석 가능 • 누구나 쉽게 분석할 수 있는 개발 접근성 향상에 집중 - 너도 나도 클러스터 생성 가능 - 분석 시간을 줄여줄 간단한 도구를 개발하는 데 시간 투자 38
  • 39. 마무으리 • 소수의 인원으로도 대형 클러스터를 운용 가능 - AWS, 관련 오픈소스의 성장 • DevOps의 장점을 최대한 활용 - 서비스 운영, 개발, 테스트, 배포, 아키텍처 구성 - 모두 한 팀에서 하므로 적은 커뮤니케이션 비용으로 다양한 시 도가 가능 - 여러가지 새로운 도구와 프로세스를 빠르게 도입할 수 있음 - 프로세스 혁신이 게임 서버 개발 만큼 우선 순위가 높은 과제 - “프로그램이 할 수 있는 일은 사람이 하지말자” 39
  • 40. 앞으로 뭐하지? • 준 실시간 분석이 가능하도록 시스템 개선 중 • 카운트, 조인, 집계를 넘어선 클러스터링, 머신러닝 등 고급 분석 을 위한 준비중 • 페어 프로그래밍을 할 팀원 모집 중입니다. • career@devsisters.com 40