Engineering
앱실행속도 개선을 위한 최적화 가이드 (1)
2018년 5월 30일
원문에서 보기 ↗1. 들어가는 말
우리 게임은 왜 이렇게 로딩 시간이 긴 거야 ?! 경쟁사 게임은 이펙트도 화려하고 브금도 좋은데 왜 빠른 거고 ?

[킹덤스토리]
작년 측정기록 24초에 비해 약 3초 개선되어 21초로 측정 되었다. 입장 버튼 터치 후 게임화면에 진입한 시간은 27초로 확인 되었다.
게임서비스를 하면서 한번씩은 고민해봤을 내용이다. 아래 차트를 보면 동일 장르의 비슷한 게임인데도 실행시간에 편차가 있는 것을 알 수 있다.

※ 대상게임은 2018년 3월말 Google play와 App Annie 매출 상위 중 임의로 선정
아는 사람은 알고, 모르는 사람은 모르는 ‘왜 내 게임의 로딩시간이 더딘지' 딱 한 삽만 파보자.
2. 인터뷰
역시 예상대로 모범적인 답변을 들을 수 있었다. 마치, 학교 공부만 했는데 결과가 좋았어요 라던가, 잠을 줄였더니 졸렸어요 등등과 같은 뻔할 수도 있는 얘기를 들었다. 그렇지만 몰라서 '못 하는 것'이 아니라 알고도 ‘안하는 것'이 문제라는 생각에 꾸역꾸역 인터뷰를 진행하고 그 내용을 옮겨 본다.
동종 게임들을 묶어 관능검사 수준의 실행부터 인게임 진입까지 시간측정 테스트를 하던 중 NHN Entertainment 및 자회사(이하 NE) 게임 몇몇의 게임실행이 유독 빠른 것을 확인했다. 타사 게임에 대해서는 실행 단계별 로그를 찍는 수준의 테스트는 진행할 수 없어, NE게임을 대상으로 테스트를 했다.
2.1 먼저 ‘한게임 슬롯’이다.
카지노 종류로 분류된 내외부 게임 6종의 실행시간 평균은 10.41초 였다. 한게임 카지노는 측정 당시 4.24초로 평균보다 약 6초 정도 더 빠르게 게임에 진입했다. (2017년 상반기 측정) 타사 게임의 경우 상세 벤치마킹 테스트는 아니었지만 수차례 테스트를 하며 평균치를 측정했다. 초단위로 녹화 화면을 보면서 시간을 기록한 것으로 실행 시마다 대체로 기록은 동일했다.

- 측정 로그를 보면, 두군데 병렬 처리 부분을 확인할 수 있다.
- HSP SDK 초기화와 Facebook SDK 초기화 부분
- 로그인타입 선택과 게임정보 로드 부분
※ HSP: Hangame Smart Plaform
- 설정값 처리
게임내 유동적인 설정값을 초기화 시와 로그인 전후로 플랫폼과 게임서버로부터 받아 온다. 주로 점검 등 서비스 상태정보, Asset 버전정보 등이 되고, 경우에 따라서는 게임서버 군의 구성이 변경되어 해당 정보를 갱신하는 경우도 있다. 서버 주소가 바뀌는 경우는 서비스 중에 거의 발생하지 않고, 점검은 며칠에서 몇주단위 이상의 주기로 진행된다고 본다. 어셋번들은 서비스 상황에 따라 하루에도 몇번씩 패치가 나갈 수도 있지만, 보통은 점검주기와 비슷하게 진행된다.
설정값을 받아 오는 부분에 대해 리트라이를 할 수도 있고 있고, 저장된 기존 설정 정보를 이용할 수도 있다. 플레이 타임 중 기존 설정값이 바뀌는 경우는 거의 없기 때문에 ‘어떤’ 이유로 설정값을 받아오지 못했을 경우 기존에 이용했던, 저장된 값을 이용하도록 처리를 했다. 다시받기를 하는 시간도 경우에 따라서는 리소스 낭비가 될 수도 있기 때문이다. 게임의 구조적인 부분과 서비스 성격을 봐서 결정할 부분이기는 하다.
한번 App을 실행해서 설정값을 못받아 오는 경우가 발생하면 로직을 통한 재시도로 해결되지 않는 경우가 많다. 여러 게임의 로그를 분석한 경험으로 보자면 유저 재시작으로 처리되는 경우가 결코 적지 않았다.
- Asset bundle 처리
‘한게임 슬롯’의 어셋번들 다운로드 처리 부분에 대한 내용도 소개한다. 게임마다 어셋번들을 사용하는 목적과 방법은 제각각 일 것이기 때문에 이렇게 하는 것이 답이다라는 형태의 답정너를 주장할 수는 없다. 다만, 이런 소소한 방법으로도 게임 실행속도를 앞당기는 기위해 노력했구나 정도의 참고로 보다보면 도움이 되거나 응용할 수 있는 요소도 있을 것이다.
‘한게임 슬롯’에 제공되는 게임모드가 여럿이 있다. 던전을 하나하나 뚫고 진행하는 RPG 게임의 ‘맵’이나 ‘던전’, ‘전장’과 비슷한 개념으로 봐도 좋다.
[한게임슬롯]
2.2 한게임 카지노는 이렇게 했다.
- Asset bundle을 사용하지 않았다.
Asset bundle을 사용하지 않아 리소스 체크와 다운로드 시간이, '없다'. 다만, 어느 레벨업 등 특정 조건을 달성하면 추가 게임이 열리고, 유저가 해당 미니게임을 직접 다운로드 받아서 설치한다. 로그인 시에 로그인 외에 다른 처리를 많이 하지 않았고, 마켓별로 상품리스트를 따로 받아 정보를 슬림화 했다.

텍스처 사이즈 1024 이하, 이미지 압축 및 재사용/공동 사용 등 텍스처 최적화를 했다. 로비 접속 시 과도하게 생성 되어 있던 프리팹(주로 팝업) 등을 제거했다.
[한게임카지노]
2.3 느린 게임의 지연사례
지연사례를 살펴보고자 한다.
-
이벤트 팝업 실제 미치는 영향은 미미할 수 있지만, 게임 실행 시 다수의 이벤트 팝업이 게임실행화면까지 진입하는데 시간을 소요하게 할 수 있다. 앱실행 시간을 측정할 때 팝업창 하나당 1초로 계산을 했었다. 경우에 따라서는 이미지 로딩이 체감될 정도로 시간이 걸리는 경우가 있는데, 몇백 KB를 넘기는 사이즈가 종종 있었다. 물론 MB 급의 이미도 사용이 되었었는데, 모바일 환경임을 감안해서 사이즈를 조절할 필요가 있겠다.
-
타 시스템 연동 프로모션 크로스 프로모션진행을 위해 타 시스템, 타 게임을 연동하는 경우가 있는데, 구체적으로 크로스프로모션 진행으로 인한 실행시간 지연 여부를 테스트 하지는 않았지만, 영향을 미칠 수 있다고 가정한다. 유저 입장에서는 인게임까지 대여섯개의 이베트 창을 닫다 보면 게임까지 가고 싶은 마음이 접어지는 경우도 있었다.
-
Asset bundle 데이터 실행속도가 빠른 App에서 Asset bundle을 사용하지 않았다고 한 것과 대조를 이루는 부분으로 Asset bundle을 ‘많이’ 사용하는 경우에 해당된다. Asset 다운로드와 체크는 App 실행시간의 많은 부분을 차지한다. 아래의 측정 사례를 보면 알 수 있다. Asset을 다운로드 하는 것뿐만 아니라 체크에도 많은 시간이 소요될 수 있다. 아래 게임들은 몇백 MB 이상의 Asset을 다운로드 하는 App들이다.
-
A 게임 Asset bundle 다운로드 및 체크: ‘게임 기본정보 파일 로드‘ 부분

- B 게임 Asset bundle 다운로드 및 체크: ‘리소스 변경 내역 확인‘ 부분

장르간 게임 실행시간 차이가 많이 나는 것은 게임 특성상 발생하는 차이로 봐야 할 것 같다. 동일/유사 카테고리로 분류되었더라도 게임 고유의 컨텐츠와 게임사이즈 등에 따라서도 차이가 있을 것이다. DOOM II(1994년)와 DOOM(2016년)이 다른 것처럼 말이다.
그렇지만 유저입장에서는 비슷비슷해 보이는 게임 중에 어떤 게임은 쾌적한 실행이 되는데, 어떤 게임은 걸어놓고 화장실을 다녀와야 하는 게임도 있는 것이 사실이다. 내 게임이 발적화가 아닌 최적화가 될 수 있도록 뻔한 내용이지만 초심으로 돌아가자는 의미에서 본 글을 시작했다.
실행시간 현황을 측정하고 개발자들께서 생각하는 바를 인터뷰를 통해서 확인하는 것으로 1부를 마치고, 2부에서는 어떻게 최적화를 진행할 것인지에 대해 알아보자.