Gonnector(고넥터) 고영혁 대표가 주최한 스타트업 데이터 활용 세미나 '우리가 데이터를 쓰는 법' 의 세 번째 발표 자료
세미나 : 우리가 데이터를 쓰는 법 (How We Use Data)
일시 : 2016년 4월 12일 화요일 10:00 ~ 18:00
장소 : 마루180 (Maru180) B1 Think 홀
제목 : 모바일 게임 로그 데이터 분석 이야기
연사 : 엔터메이트 공신배 팀장
2. 2
엔터메이트 소개
• 2001년 설립 2015년 12월 코스닥에 상장한 온라인 / 모바일 게임
퍼블리싱 회사
• 아이러브삼국지, 노예가 되어줘, 아케인 등 20여개의 PC 및 모바일 게임
서비스 중
• 대만, 중국, 홍콩에 지사를 두고 세계로 확장 중…
• 경쟁사로는 넷마블, 넥슨, NHN 엔터테인먼트 등…
3. 3
아이러브게임 SDK 소개
• 개발사에서 게임 개발에 필요한 로그인, 로그아웃, 결제, 보안, 푸시, 이벤트
등의 기능을 제공하는 통합 SDK
• 아이러브게임의 모든 게임은 SDK 를 연동해야만 서비스 가능
• 아이러브게임 SDK 를 통해 로그 수집
• 최근에는 실시간 채팅, PVP 기능 추가 제공
4. 4
아이러브삼국지 소개
• 2013년 6월 오픈
• 카카오 게임 중 몇 안되는 장수 게임
• 처음 런칭하는 모바일 게임
• 단일 게임으로 150억 이상의 매출을 달성한 게임
• 현재도 매출 잘 나오는 게임
5. 5
아이러브삼국지 로그 분석
Game
Server
부끄럽습니다. 2013년 이전까지 이렇게 사용 했습니다.
모바일 게임 특히 카카오톡 게임 오픈에 이렇게 많은 사용자가 몰릴 줄은 예상 못함
폭발적인 로그 증가로 서비스에 지장이 생김( 로그인 지연 현상 )
6. 6
아이러브삼국지 로그 분석
Game
Server
부끄럽습니다. 2013년 이전까지 이렇게 사용 했습니다.
모바일 게임 특히 카카오톡 게임 오픈에 이렇게 많은 사용자가 몰릴 줄은 예상 못함
폭발적인 로그 증가로 서비스에 지장이 생김( 로그인 지연 현상 )
로그수집
중단
8. 8
로그 수집
1차 시도
MongoDB 변경
Game
Server
2차 시도
RabbitMQ(Cluster) -> MongoDB
Game
Server
SQL문을 사용 할
수 없어 불편하다.
MongoDB 장애시
로그는 모두 사라진다.
Queue 에 로그 저장
Worker 에서 Queue에 저장된 로그
를 MongoDB와 RDB 에 각각 저장
클러스터 구성으로 장애 대비
추가적으로 Elasticsearch,
Cloudwatch Logs, S3, Bigquery
등으로 로그 전송 하고자 함.
9. 9
로그 수집
1차 시도
MongoDB 변경
Game
Server
2차 시도
RabbitMQ(Cluster) -> MongoDB
Game
Server
SQL문을 사용 할
수 없어 불편하다.
MongoDB 장애시
로그는 모두 사라진다.
Queue 에 로그 저장
Worker 에서 Queue에 저장된 로그
를 MongoDB와 RDB 에 각각 저장
클러스터 구성으로 장애 대비
추가적으로 Elasticsearch,
Cloudwatch Logs, S3, Bigquery
등으로 로그 전송 하고자 함.
복잡해
10. 10
로그 수집
Game
Server
• TreasureData 에서 만든 Ruby 와 C로 짜여진 실시간
로그 메시지 처리 프로그램 (오픈소스)
• Buffer 기능 내장으로 안정적으로 로그 데이터 처리가 가능
• 다양한 IN / OUTPUT 플러그인이 많다.
11. 11
로그 수집
PHP, NodeJS 에서 Fluentd 라이브러리를 사용 로그 전송$logger = new FluentLogger(host, port);
$logger->post(“logs.ilovegame.login”, $post);
<match logs.*.*>
type forest
subtype copy
remove_prefix logs.
<template>
<store>
type tdlog
…
</store>
<store>
type mongo_replset
…
</store>
<store>
type cloudwatch_logs
…
</store>
</template>
</match>
Type tdlog => Treasuredata로 로그를 전송
Type mongo_replset => MONGO DB로 로그를 전송
Type cloudwatch_logs => AWS 에 Cloudwatch logs
MongoDB 는 현재 고객CS 나 게임 로그를 즉시 조회하는 용
도로 사용 중입니다.
Cloudwatch logs 는 로그 활용에서 좀 더 자세히 살펴 보겠습니다.
12. 12
로그 수집
PHP, NodeJS 에서 Fluentd 라이브러리를 사용 로그 전송$logger = new FluentLogger(host, port);
$logger->post(“logs.ilovegame.login”, $post);
<match logs.*.*>
type forest
subtype copy
remove_prefix logs.
<template>
<store>
type tdlog
…
</store>
<store>
type mongo_replset
…
</store>
<store>
type cloudwatch_logs
…
</store>
</template>
</match>
Type tdlog => Treasuredata로 로그를 전송
Type mongo_replset => MONGO DB로 로그를 전송
Type cloudwatch_logs => AWS 에 Cloudwatch logs
MongoDB 는 현재 고객CS 나 게임 로그를 즉시 조회하는 용
도로 사용 중입니다.
Cloudwatch logs 는 로그 활용에서 좀 더 자세히 살펴 보겠습니다.
정말 쉽습니다.
14. 14
로그 분석
• 로그 저장 시스템은 수십억 건의 로그를 감당할 수 있어야 한다.
• SQL 문을 사용하여 쿼리 할 수 있어야 한다.
• Tableau, excel, analytics Tools와 같이 외부 서비스와 연동이 되
어 누구나 다양하게 활용할 수 있어야 합니다.
무엇보다 비용이 저렴해야 한다.
17. 17
로그 분석
• 버튼 클릭 한 번으로 테라바이트 데이터 분석
• 저렴한 저장 비용 $0.12(GB당/월)
• 빠른 응답 속도 6억개의 데이터를 1분 내외…
• Import / Export 다양한 포맷 지원…
• 기존에 사용하던 SQL 문을 그대로 사용 가능
2차 시도
Google Bigquery
Web
Server
데이터가 수십억 건을 넘어가면서 쿼리를
실행할 때마다 비용이 증가 하였습니다.
쿼리를 할 때 마다 가끔 오류가 발생되어 이
와 같이 프로그래밍을 했습니다.
수백만원 요금 폭탄을 맞았습니다.
회사에서 짤릴 뻔 했습니다.
18. 18
로그 분석
• 버튼 클릭 한 번으로 테라바이트 데이터 분석
• 저렴한 저장 비용 $0.12(GB당/월)
• 빠른 응답 속도 6억개의 데이터를 1분 내외…
• Import / Export 다양한 포맷 지원…
• 기존에 사용하던 SQL 문을 그대로 사용 가능
2차 시도
Google Bigquery
Web
Server
do {
If(!err) break;
Query
} while(1);
데이터가 수십억 건을 넘어가면서 쿼리를
실행할 때마다 비용이 증가 하였습니다.
쿼리를 할 때 마다 가끔 오류가 발생되어 이
와 같이 프로그래밍을 했습니다.
수백만원 요금 폭탄을 맞았습니다.
회사에서 짤릴 뻔 했습니다.
20. 20
로그 분석
• 빠른 응답 속도 6억개의 데이터를 1분 내외…
• Import / Export 다양한 포맷 지원…
• 기존에 사용하던 SQL 문을 그대로 사용 가능
• TreasureData 한국 지사에서 지원을 받을 수 있다.
• 정액제로 쿼리를 마음껏 보낼 수 있다.
Game
Server
22. 22
로그 활용
SQL 쿼리를 TreasureData 에 Export 기능
을 이용하여 매 10분 마다 결과를 RDB 로
저장한다.
저장된 통계 데이터는 내부 통계 툴에서 조회한다.
DAU, MAU, CCU, RETENTION … 등 모든 통계는
통계 종류에 따라서 10분~30분마다 데이터 확인이
가능
MYSQL
24. 24
로그 활용
• AWS 에서 서비스하는 Cloudwatch logs 는 G당 0.76의 저렴한 요금으로
사용이 가능합니다.
• 작년에 서울 리전 오픈으로 빠른 속도로 이용이 가능합니다.
• Cloudwatch Alert 에서 지정된 지표에 임계치를 지정 합니다.
• 일시적으로 많은 트래픽이 많이 발생되거나 적게 발생시에는 알람이 오도록
설정 하였습니다.
• 임계치 초과시에는 Push, Mail, Slack 등으로 알람을 받으실 수 있습니다.