kgc 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 ,...

Post on 18-Jun-2015

9.723 Views

Category:

Technology

15 Downloads

Preview:

Click to see full reader

DESCRIPTION

1년 7개월 장수 모바일 게임 쿠키런. 많은 유저, 하루에도 쏟아지는 많은 로그. Time To Market 단축이 핵심 역량 중 하나가 되는 모바일 게임 시장. 자주 빠르게 변경되는 스팩, 로그도 마찬가지로 자주 빠르게 변경되는 스키마. 이런 현실속에서 게임 개발과 운영, 데이터 분석까지 병행 하기 위해서 가볍고 유연한 아키텍처로 적당히 빠르게 데이터 분석을 하는 쿠키런 서버팀 사례를 소개합니다.

TRANSCRIPT

가볍고 유연하게 데이터 분석하기

: 쿠키런 사례 중심

서버 개발팀 김민우

1

2

• 김민우 - minwoo.kim@devsisters.com - http://julingks.tistory.com

• 전산과 졸업 • 스타트업 1호 맴버로 조인, 2010년 말 KT에 인수 • 선임 연구원

- 빅 데이터 분석 플랫폼 개발 및 연구

• 서버팀 - 쿠키런 게임 서버 개발 - LINE 쿠키런 서비스 총괄

강연자 소개

대표 게임

3

LINE COOKIE RUN 출시 : 2014년 1월 주요 국가 : 일본, 대만, 태국 등 2014년 상반기 태국, 대만 게임 다운로드 1위 기록 총 21개 국가 애플 앱스토어 최고 매출 순위 10위권 기록

쿠키런 for Kakao 출시 : 2013년 4월 주요 국가 : 대한민국 2013년 대한민국 단일 게임 다운로드 순위 1위 기록 [App Annie] 2013년 대한민국 단일 게임 매출 순위 3위 기록 [App Annie] 출시 후 1년 5개월간 매출 순위 상위권(10위 이내) 유지

OvenBreak 시리즈 출시 : 2009년 6월 주요 국가 : 미국, 캐나다, 영국, 호주 등 2010년 11월 미국, 캐나다, 영국 등 20개 국가 애플 앱스토어 무료 1위 기록 2011년 6월 미국, 중국, 캐나다 등 18개 국가 애플 앱스토어 무료 1위 기록 2012년 12월 미국 애플 앱스토어 무료 10위 기록(OvenBreak2)

2,000만 다운로드

2,000만 다운로드

3,900만 다운로드

서버팀이 하는 일

• 게임 서버 개발 • 게임 운영 관리 도구 개발 • 게임 리소스 관리 시스템 개발 • 게임 로그 분석 시스템 개발 • 게임 서비스 운영, 모니터링 • 인프라 관리 • 장애 대응

• 클라이언트 개발팀에서 하는 것 빼고 정말 다 하고 있어요 … - 정말 레알 DevOps

4

데이터 좀 뽑아 주세요~ 네!?상황이 이렇다 보니..

5

다양한 로그 분석 요구 사항

• KPI 지표 - 일별 접속자 수, 일별 매출, 구매 유저의 평균 사용 금액

• 게임 벨런싱 - 유저 레벨 분포, 이벤트 미션 달성률

• 게임 기획 - 요즘 가장 많이 이용하는 쿠키와 펫 조합은 뭐죠?

• 어뷰징 대응 - 메모리 해킹, APK 변조, 변조 API 요청 - 어뷰징인가요? 정상 플레인가요?

• CS 대응 - 보물이 사라졌어요 - 믿어야 될지 말아야 될지..?

6

오늘 접속한 유저 수는 몇 명인가요?가장 쉬운 것 부터

7

KPI 지표

• DAU (일별 유저수) • WAU (주간 고유 유저수) • MAU (월별 고유 유저수) • PU (구매한 고유 유저수) • ARPPU (구매한 유저의 평균 사용 금액) • 등등…

• 물론 게임 비지니스 플랫폼에서 제공

• 그래도 우리도 알고 있어야 되지 않을까?

8

9

• 결제 로그는 가장 중요하므로 트랜잭션으로 보호가 필요 • 따라서 신뢰성이 보장되는 RDB에 저장

• 크리스탈 입/출 로그도 중요 로그이므로 RDB에 저장 • 출석시 1개의 크리스탈 지급 (접속 로그와 동일)

• SQL 쿼리로 간단하게 - 크리스탈 입/출 로그에서 DAU, WAU, MAU를 구함 - 결제 로그에서 PU, ARPPU 등을 구함

• 실시간으로 추이를 보고 싶어요 … 아.. 그래요?

KPI 지표

Auto Scaling group

지표의 추이를 실시간으로 보고 싶어요

• StatsD + Graphite 를 적용 - 본래 시스템 모니터링에 사용하고 있음

• StatsD - 통계 정보를 수집하는 네트웍 데몬 - UDP 또는 TCP로 통계 정보를 보냄

• Graphite • StatsD에 쌓인 통계 정보를 그래프로 시각화

10

https://github.com/etsy/statsd/

지표의 추이를 실시간으로 보고 싶어요

• StatsD + Graphite 시스템 모니터링으로 사용 - 플레이 시작시, 플레이 종료시 - 메소드 평균 응답 시간 (병목 구간을 찾을 수 있음)

• 유저가 접속시, 구매시 UDP 요청을 StatsD로 보냄

• 주의 : UDP이므로 신뢰성을 보장할 수 없다 (1~5% 유실) - 실시간 추이를 파악하는 데 적합함

11

유저 레벨 분포 알려주세요~게임 벨런싱

12

모든게 RDB에 있으면 좋으련만… 세상일이 그렇게 쉬운게 아니지

레벨 정보는 어디에 저장되어 있나?

• 유저 데이터 저장소는 를 사용 - 문서 지향 NoSQL 데이터 베이스 - 분산 Key-Document 저장소

• 예)

13

{ level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 …

}

F29F2COW2ZCQPF

키 : 유저별 고유 식별키 값 : JSON 형식의 텍스트

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

sqoop { level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 …

}

bin/sqoop import --connect http://10.2.1.55:8091/pools --table DUMP

하둡의 데이터를 어떻게 분석하지?

• 하둡에 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

클러스터 생성

23

AWS CLI

Sqoop

{ level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 …

}

SELECT count(1) FROM t1 GROUP BY levelHadoop

Job

Auto Scaling group

클러스터 생성

24

AWS CLI

Sqoop

{ level : 15, // 레벨 coin : 1500, // 코인 crystal : 20, // 크리스탈 …

}

SELECT count(1) FROM t1 GROUP BY levelHadoop

Job

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

감사합니다

top related