게임 종료 후 이용자 체류율 개선
목차
게임이 끝난 후 사용자가 나가는 순간이 가장 위험하다. 특히 모바일·웹 게임 플랫폼에서는 "한 판 끝" = "서비스 이탈" 이라는 등식이 성립하기 쉽다. 이번 작업은 그 순간을 잡아내기 위해 완료 화면에 체류 위젯을 추가하고, 최근 플레이한 게임 이력을 관리하는 기능을 만든 것이다.
게임 완료 후의 "빈틈"을 채우기
게임이 끝나면 대개 두 가지가 일어난다. 게이머는 보상을 확인하고, 다음 액션으로 넘어가거나 서비스를 떠난다. 모바일 게임 UX의 황금 법칙 중 하나가 "종료 직후 마찰 최소화"인데, 역설적이게도 그때가 가장 중요한 engagement 포인트다.
지금까지 우리 플랫폼의 게임들은 각자 종료 화면을 관리했다. 그런데 문제는 그 이후였다. 종료하고 → 대기 → 사용자가 뒤로 가기를 눌러서 게임 허브로 돌아오거나, 그냥 탭을 닫아버린다. 사용 데이터를 보면 평균 체류시간 대비 게임 직후 이탈율이 눈에 띄게 높았다.
체류 위젯이 해결하는 건 이 갭이다. 게임 완료 직후 "다른 게임 더 하기" 또는 "최근에 즐겨하던 게임" 같은 빠른 액션들을 화면 상단에 노출함으로써, 사용자가 능동적으로 다음 선택을 할 수 있는 환경을 만드는 것이다.
여러 게임에 일관된 경험 제공하기
변경 파일들을 보면 deadly-descent/index.html, food-tycoon/index.html, poop-dodge/index.html 같은 식으로 세 개의 게임이 모두 업데이트됐다. 이것은 단순한 복사-붙여넣기가 아니었다.
| 접근법 | 장점 | 단점 |
|---|---|---|
| 각 게임에 독립적으로 위젯 구현 | 게임별 커스터마이징 가능 | 유지보수 복잡, 일관성 문제 |
| 공통 모듈화 (이번 선택) | 일관된 UX, 중앙화된 관리 | 초기 추상화 비용 |
hv-recent.js 라는 공통 모듈을 만들어서 "최근 플레이" 로직을 한 곳에서 관리하기로 했다. 각 게임의 HTML 에서는 이 모듈을 호출하기만 하면 되고, 게이머 입장에서는 어느 게임을 하든 동일한 "최근 플레이" 목록을 본다.
팀 관점에서 이게 중요한 이유:
- 신규 게임 온보딩이 쉬워진다. 다음번 게임 개발자가 이 기능을 복제할 필요 없이 모듈만 참조하면 됨
- 버그 수정이 일괄 처리된다. 최근 플레이 로직에 버그가 생기면 한 파일만 수정하면 모든 게임에 반영
- 데이터 일관성이 보장된다. 누군가는 localStorage, 누군가는 IndexedDB 쓰지 않게 됨
다국어·데이터 관리 레이어
i18n.js 와 index.html 변경도 주목할 점이다. 체류 위젯의 텍스트("다른 게임 더 하기", "최근 플레이")가 한국어만 나오면 문제다.
국제화가 제대로 된 서비스라면 이런 새로운 텍스트는 i18n 파일에 먼저 등록되고, 각 언어별 번역이 준비된 후 배포돼야 한다. 이 작업에서도 그 흐름을 탔다는 게 보인다.
더불어 hv-recent.js 는 단순 UI 렌더링뿐 아니라:
- 게이머의 최근 플레이 기록을 정렬된 상태로 유지
- 중복 제거 (같은 게임을 여러 번 했을 때 최신 기록만 표시)
- 플레이 순서 업데이트 (게임을 할 때마다 그 게임이 목록 상단으로 올라옴)
같은 역할들을 한다. 이런 데이터 일관성 로직을 라이브러리화하는 건 후에 대시보드에서도 "내가 자주 하는 게임" 같은 피처를 추가할 때도 재사용할 수 있다.
회고: 작은 기능, 큰 영향
겉으로는 "완료 화면에 위젯 하나 추가" 같은 작업이지만, 실제로는:
- 사용자 행동 분석 (이탈점 파악) →
- 아키텍처 결정 (공통 모듈 vs 각자 구현) →
- 일관성 관리 (국제화 포함) →
- 확장성 고려 (신규 게임이 쉽게 따라올 수 있도록)
이 모든 게 얽혀 있다. 게임들 간 "체류" 라는 메트릭 하나를 개선하려고 했지만, 그 과정에서 플랫폼 전체의 구조를 한 단계 앞당기게 된 셈이다.
다음 반복은 이 위젯의 클릭율, 재방문율 데이터를 보고 "다른 게임 더 하기" 섹션의 게임 추천 알고리즘을 고도화하는 방향이 될 것 같다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.