grep

Engineering

앱실행속도 개선을 위한 최적화 가이드 (1)

NHN

2018년 5월 30일

원문에서 보기 ↗

1. 들어가는 말

우리 게임은 왜 이렇게 로딩 시간이 긴 거야 ?! 경쟁사 게임은 이펙트도 화려하고 브금도 좋은데 왜 빠른 거고 ?

1.png

[킹덤스토리]

작년 측정기록 24초에 비해 약 3초 개선되어 21초로 측정 되었다. 입장 버튼 터치 후 게임화면에 진입한 시간은 27초로 확인 되었다.

게임서비스를 하면서 한번씩은 고민해봤을 내용이다. 아래 차트를 보면 동일 장르의 비슷한 게임인데도 실행시간에 편차가 있는 것을 알 수 있다.

2.png

※ 대상게임은 2018년 3월말 Google play와 App Annie 매출 상위 중 임의로 선정

아는 사람은 알고, 모르는 사람은 모르는 ‘왜 내 게임의 로딩시간이 더딘지' 딱 한 삽만 파보자.

2. 인터뷰

역시 예상대로 모범적인 답변을 들을 수 있었다. 마치, 학교 공부만 했는데 결과가 좋았어요 라던가, 잠을 줄였더니 졸렸어요 등등과 같은 뻔할 수도 있는 얘기를 들었다. 그렇지만 몰라서 '못 하는 것'이 아니라 알고도 ‘안하는 것'이 문제라는 생각에 꾸역꾸역 인터뷰를 진행하고 그 내용을 옮겨 본다.

동종 게임들을 묶어 관능검사 수준의 실행부터 인게임 진입까지 시간측정 테스트를 하던 중 NHN Entertainment 및 자회사(이하 NE) 게임 몇몇의 게임실행이 유독 빠른 것을 확인했다. 타사 게임에 대해서는 실행 단계별 로그를 찍는 수준의 테스트는 진행할 수 없어, NE게임을 대상으로 테스트를 했다.

2.1 먼저 ‘한게임 슬롯’이다.

카지노 종류로 분류된 내외부 게임 6종의 실행시간 평균은 10.41초 였다. 한게임 카지노는 측정 당시 4.24초로 평균보다 약 6초 정도 더 빠르게 게임에 진입했다. (2017년 상반기 측정) 타사 게임의 경우 상세 벤치마킹 테스트는 아니었지만 수차례 테스트를 하며 평균치를 측정했다. 초단위로 녹화 화면을 보면서 시간을 기록한 것으로 실행 시마다 대체로 기록은 동일했다.

3.png

※ HSP: Hangame Smart Plaform

게임내 유동적인 설정값을 초기화 시와 로그인 전후로 플랫폼과 게임서버로부터 받아 온다. 주로 점검 등 서비스 상태정보, Asset 버전정보 등이 되고, 경우에 따라서는 게임서버 군의 구성이 변경되어 해당 정보를 갱신하는 경우도 있다. 서버 주소가 바뀌는 경우는 서비스 중에 거의 발생하지 않고, 점검은 며칠에서 몇주단위 이상의 주기로 진행된다고 본다. 어셋번들은 서비스 상황에 따라 하루에도 몇번씩 패치가 나갈 수도 있지만, 보통은 점검주기와 비슷하게 진행된다.

설정값을 받아 오는 부분에 대해 리트라이를 할 수도 있고 있고, 저장된 기존 설정 정보를 이용할 수도 있다. 플레이 타임 중 기존 설정값이 바뀌는 경우는 거의 없기 때문에 ‘어떤’ 이유로 설정값을 받아오지 못했을 경우 기존에 이용했던, 저장된 값을 이용하도록 처리를 했다. 다시받기를 하는 시간도 경우에 따라서는 리소스 낭비가 될 수도 있기 때문이다. 게임의 구조적인 부분과 서비스 성격을 봐서 결정할 부분이기는 하다.

한번 App을 실행해서 설정값을 못받아 오는 경우가 발생하면 로직을 통한 재시도로 해결되지 않는 경우가 많다. 여러 게임의 로그를 분석한 경험으로 보자면 유저 재시작으로 처리되는 경우가 결코 적지 않았다.

‘한게임 슬롯’의 어셋번들 다운로드 처리 부분에 대한 내용도 소개한다. 게임마다 어셋번들을 사용하는 목적과 방법은 제각각 일 것이기 때문에 이렇게 하는 것이 답이다라는 형태의 답정너를 주장할 수는 없다. 다만, 이런 소소한 방법으로도 게임 실행속도를 앞당기는 기위해 노력했구나 정도의 참고로 보다보면 도움이 되거나 응용할 수 있는 요소도 있을 것이다.

‘한게임 슬롯’에 제공되는 게임모드가 여럿이 있다. 던전을 하나하나 뚫고 진행하는 RPG 게임의 ‘맵’이나 ‘던전’, ‘전장’과 비슷한 개념으로 봐도 좋다.

4.png [한게임슬롯]

2.2 한게임 카지노는 이렇게 했다.

Asset bundle을 사용하지 않아 리소스 체크와 다운로드 시간이, '없다'. 다만, 어느 레벨업 등 특정 조건을 달성하면 추가 게임이 열리고, 유저가 해당 미니게임을 직접 다운로드 받아서 설치한다. 로그인 시에 로그인 외에 다른 처리를 많이 하지 않았고, 마켓별로 상품리스트를 따로 받아 정보를 슬림화 했다.

5.png

텍스처 사이즈 1024 이하, 이미지 압축 및 재사용/공동 사용 등 텍스처 최적화를 했다. 로비 접속 시 과도하게 생성 되어 있던 프리팹(주로 팝업) 등을 제거했다.

6.png [한게임카지노]

2.3 느린 게임의 지연사례

지연사례를 살펴보고자 한다.

7.png

8.png

장르간 게임 실행시간 차이가 많이 나는 것은 게임 특성상 발생하는 차이로 봐야 할 것 같다. 동일/유사 카테고리로 분류되었더라도 게임 고유의 컨텐츠와 게임사이즈 등에 따라서도 차이가 있을 것이다. DOOM II(1994년)와 DOOM(2016년)이 다른 것처럼 말이다.

그렇지만 유저입장에서는 비슷비슷해 보이는 게임 중에 어떤 게임은 쾌적한 실행이 되는데, 어떤 게임은 걸어놓고 화장실을 다녀와야 하는 게임도 있는 것이 사실이다. 내 게임이 발적화가 아닌 최적화가 될 수 있도록 뻔한 내용이지만 초심으로 돌아가자는 의미에서 본 글을 시작했다.

실행시간 현황을 측정하고 개발자들께서 생각하는 바를 인터뷰를 통해서 확인하는 것으로 1부를 마치고, 2부에서는 어떻게 최적화를 진행할 것인지에 대해 알아보자.