이터널 리턴 데이터 분석을 위한 대시보드 구축 및 관리 가이드
metrics-country-entry-rate 인덱스에 저장상태: 구축 완료
시각화: 신규 가입자 추이, 국가별 분포, 튜토리얼 스킵 현황, 단계별 완료 유저 수, PC방 비율, 언어별 분포
인사이트: 튜토리얼 스킵률 ~47%, 첫 게임 진입률 51.6%, D1 리텐션 16.8%
metrics-country-entry-rate 인덱스인덱스: battle-user-game-release-log
시각화:
활용: 패치 전후 밸런스 변화 추적, 핫픽스 필요 캐릭터 식별
인덱스: battle_latency_*, battle-user-game-release-log (avgLatency)
시각화:
활용: 서버 이슈 조기 감지, 지역별 인프라 개선 우선순위
인덱스: battle-user-game-release-log (creditSource, crGet*, crUse*)
시각화:
활용: 인게임 경제 밸런싱, 콘텐츠 가치 평가
인덱스: battle-user-game-release-log (beforeNormalTeamMmr, preMade)
시각화:
활용: 매칭 품질 모니터링, 랭크 시스템 개선
인덱스: battle-user-game-release-log (gameMode, gameModeSub)
시각화:
활용: 콘텐츠 인기도 파악, 이벤트 모드 효과 측정
인덱스: battle-user-game-release-log (hackAttemptLog, afk)
시각화:
활용: 치터 조기 탐지, 제재 우선순위 결정
이터널 리턴의 다양한 게임 데이터를 Kibana로 시각화하여 의사결정에 활용합니다. 이 가이드는 대시보드 구축 방법과 주요 인사이트를 문서화합니다.
유저가 계정을 생성할 때 기록되는 로그입니다.
| 필드 | 타입 | 설명 |
|---|---|---|
userNum |
number | 유저 고유 번호 |
authProvider |
keyword | 인증 제공자 (Steam, Kakao 등) |
country |
keyword | 국가 코드 (KR, US, JP 등) |
language |
keyword | 클라이언트 언어 |
pcCafe |
boolean | PC방 여부 |
@timestamp |
date | 가입 시각 |
튜토리얼 진행 상태가 기록되는 로그입니다.
| 필드 | 타입 | 설명 |
|---|---|---|
userNum |
number | 유저 고유 번호 |
code |
number | 튜토리얼 단계 (10001~10006) |
skip |
boolean | 스킵 여부 |
clearDtm |
date | 클리어 시각 |
rewardDtm |
date | 보상 수령 시각 |
10001 - 기본 조작10002 - 아이템 획득10003 - 전투 기초10004 - 스킬 사용10005 - 제작 시스템10006 - 최종 테스트대시보드는 4개의 시각화로 구성됩니다.
타입: Date Histogram (Line Chart)
인덱스: new-user-release-log
설정: X축 - @timestamp (3시간 간격), Y축 - Count
용도: 시간대별 가입 패턴 파악, 이벤트/마케팅 효과 측정
타입: Pie Chart
인덱스: new-user-release-log
설정: Split Slices by country.keyword, Top 5 by Count
용도: 주요 유입 국가 파악, 지역별 마케팅 전략 수립
타입: Bar Chart (Horizontal)
인덱스: tutorial-release-log
설정: Split by code, Sub-split by skip (true/false)
용도: 어느 단계에서 스킵이 많은지 파악
타입: Vertical Bar Chart
인덱스: tutorial-release-log
설정: Split by code, Metric - Unique Count of userNum
핵심: 단순 Count가 아닌 Unique Count로 중복 제거
한 유저가 여러 번 튜토리얼을 시도하면 Count는 부풀려집니다. 실제 완료 유저 수를 보려면 반드시 Unique Count of userNum을 사용하세요.
Stack Management → Index Patterns → Create index pattern
new-user-release-log와 tutorial-release-log 각각 생성
각 인덱스의 필드 구조와 샘플 데이터 확인
시간 범위가 적절한지 체크 (Last 7 days 권장)
Visualize → Create visualization
4개 시각화를 각각 생성하고 저장
Dashboard → Create dashboard
저장된 시각화들을 추가하고 레이아웃 배치
기본 시간 범위를 Last 7 days로 설정
대시보드 저장 시 "Store time with dashboard" 체크
country.keyword: "KR"
skip: true
code: 10001
pcCafe: true
자주 사용하는 필터 조합은 대시보드에 저장해두면 편리합니다. 국가별/플랫폼별 뷰를 쉽게 전환할 수 있어요.
각 메트릭이 어떤 인덱스의 어떤 필드를 사용하여 계산되는지 정확히 설명합니다.
battle-user-game-release-log, asset-release-log, login-release-log 등은 각각 DAU 정의와 수치가 다릅니다:
신규 가입자 중 실제로 게임을 1회 이상 플레이한 유저의 비율
new-user-release-log |
신규 가입자 목록 (분모) |
battle-user-game-release-log |
게임 플레이 유저 목록 (분자) |
userNum 필드로 두 인덱스를 조인
# A = new-user-release-log의 userNum 집합 (기간 내 신규 가입자)
# B = battle-user-game-release-log의 userNum 집합 (기간 내 게임 플레이 유저)
진입률 = |A ∩ B| / |A| × 100%
# 예시: 신규 2,794명 중 1,481명이 게임 플레이
# 진입률 = 1,481 / 2,794 × 100% = 53.0%
이 인덱스는 실제 게임 완료 시점에 기록됩니다. 로그인만 하고 나간 유저, 로비에서 이탈한 유저는 포함되지 않아 "진짜 게임을 해본 유저"를 정확히 측정합니다.
국가별로 첫 게임 진입률을 분리하여 계산
new-user-release-log.country |
국가 코드 (KR, US, JP, BR 등) |
new-user-release-log.userNum |
국가별 신규 유저 그룹화 |
battle-user-game-release-log.userNum |
게임 플레이 여부 확인 |
# 국가 X에 대해:
# A_x = new-user-release-log에서 country='X'인 userNum 집합
# B = battle-user-game-release-log의 userNum 집합
국가별_진입률(X) = |A_x ∩ B| / |A_x| × 100%
# 예시: 한국 신규 1,200명 중 720명이 게임 플레이
# KR 진입률 = 720 / 1,200 × 100% = 60.0%
가입 다음 날에 게임을 플레이한 유저 비율
new-user-release-log.@timestamp |
가입 시각 (기준일 D 결정) |
new-user-release-log.userNum |
유저 식별 |
battle-user-game-release-log.@timestamp |
게임 플레이 시각 (D+1일 체크) |
battle-user-game-release-log.userNum |
플레이 유저 식별 |
# 유저 U의 가입일 = D
# D1 복귀 조건: battle-user-game-release-log에 userNum=U이고
# @timestamp가 D+1일 (00:00 ~ 23:59)인 레코드 존재
# 분모: 최소 1일 이상 지난 신규 가입자
# 분자: 그 중 D+1일에 게임 플레이한 유저
D1 리텐션 = (D+1일 플레이 유저) / (1일 이상 경과 신규 유저) × 100%
# 예시: 1,105명의 1일 경과 유저 중 186명이 D+1일에 플레이
# D1 리텐션 = 186 / 1,105 × 100% = 16.8%
D1 계산 시 최소 1일 이상 경과한 유저만 분모에 포함. 오늘 가입한 유저는 아직 D+1이 안 됐으므로 제외.
가입 7일 후에 게임을 플레이한 유저 비율
# D1과 동일한 방식, 단 D+7일 체크
D7 리텐션 = (D+7일 플레이 유저) / (7일 이상 경과 신규 유저) × 100%
D7 계산을 위해선 최소 7일 이상 경과한 유저 데이터가 필요. 최근 7일 가입자는 D7 분모에 포함 불가.
| 인덱스 | 역할 | 주요 필드 |
|---|---|---|
new-user-release-log |
신규 유저 정의 (분모) | userNum, @timestamp, country |
battle-user-game-release-log |
게임 플레이 정의 (분자) | userNum, @timestamp |
tutorial-release-log |
튜토리얼 진행/스킵 | userNum, code, skip |
Python 스크립트로 new-user-release-log와 battle-user-game-release-log를 조인 분석한 결과입니다. (최근 7일 기준)
| 신규 가입자 | 2,197명 |
| 게임 플레이 유저 | 1,134명 |
| 첫 게임 진입률 | 51.6% |
| 1시간 내 첫 게임 | 68.4% |
| 24시간 내 첫 게임 | 98.9% |
💡 게임 플레이 유저의 약 70%는 가입 후 1시간 이내에 첫 게임을 시작합니다.
| D1 리텐션 | 16.8% (186/1,105명) |
| D7 리텐션 | 측정 대기 중 |
💡 가입 다음 날에도 플레이하는 유저는 약 17%입니다.
| 1위 | 금요일 20:00 (76명) |
| 2위 | 목요일 15:00 (75명) |
| 3위 | 금요일 21:00 (73명) |
| 4위 | 금요일 23:00 (73명) |
| 5위 | 목요일 21:00 (72명) |
💡 금요일 저녁~밤 시간대가 신규 유저 유입 피크 타임입니다.
이 분석은 Python 스크립트로 수행되었습니다. Kibana Transform 권한이 있다면 자동화할 수 있습니다.
# calculate_onboarding_metrics.py
# Kibana bsearch API로 두 인덱스를 조인 분석
python3 calculate_onboarding_metrics.py
calculate_onboarding_metrics.py)calculate_country_entry_rate.py) → ES 인덱스 저장이 대시보드로 신규 유저 유입과 온보딩 품질을 실시간으로 모니터링할 수 있습니다. 특히 튜토리얼 스킵률 47%라는 인사이트는 온보딩 경험 개선의 중요한 시작점이 됩니다.
데이터 기반 의사결정의 첫 걸음! 🎮📊