네오플의 하재승 프로그래머가 넥슨 개발자 컨퍼런스 2014(NDC14 ) 현장에서 지난 15일 진행한 인기 액션 RPG '던전앤파이터(이하 던파)'의 최적화 패치에 대한 강연을 진행했다.
지난 15일 던파가 진행한 최적화 패치란 게임의 로딩 속도 개선과 스킬 랙을 감소시키는 클라이언트 업데이트로 업데이트 전 네오플은 영상을 통해 약 세배 빨라진 로딩 속도와 저사양 PC에서 스킬 랙이 크게 줄어드는 모습을 공개해 유저들의 큰 호응을 얻기도 했다.
패치 전 던파의 상태와 최적화 패치 로드맵
하재승 프로그래머는 패치전 던파를 “8년 간의 라이브 개발을 통해 수많은 깨진 창문이 있는 상태”라며 유저들이 흔히 말한 통통배 위에 얹은 항공모함이라는 말에도 공감하는 모습을 보였다.
실제 패치 전 던파는 데이터 파일 수만해도 54만개였으며, 이미지 파일은 천 만개 이상(4.1GB)를 가진 꽤나 무거운 상태였다. 파일 수가 많은 만큼 로딩하는 시간도 길어졌으며, 게임 플레이 시 필요한 데이터를 계속 하드에서 읽어와야 했으므로 게임을 오래할수록 메모리의 부하가 극심했다
그는 이런 상황에서 유저들은 최대한 쾌적한 플레이를 위해 2D 게임임에도 불구하고 SSD가 사실상 필수라는 말을 자주한 것을 알고 있으며 메모리 사용량도 2GB가 쉽게 넘어가 생각보다 높은 사양의 PC가 필요했다고 설명했다.
이에 하재승 프로그래머는 최적화 패치의 목표를 정할 때 일반 HDD 사용 시에도 랙 최소화, 메모리 사용량 최적화, 크래쉬 문제 해결, 복잡한 코드 구조로 인한 문제 해결을 목표로 삼고 최적화 패치를 진행했다고 밝혔다.
최적화 패치에서 사용한 기술
Dumpable 라이브러리 기술도 도입하였으나 게임 적용 후 성능 향상이 미미하여 롤백 당한데다 C++에 대한 지식이 꽤나 많이 필요하므로 이 기사에서는 제외하고 2일 던파 공식 홈페이지를 통해 밝힌 최적화 패치에서 사용된 기술을 위주로 작성됐습니다.
데이터 분할 압축
제일 먼저 최적화를 위해 사용된 기술은 데이터 분할 압축으로 이미지와 사운드 등을 제외한 순수 데이터 파일만 해도 54만개(642Mb)에 XML과 유사한 태그가 존재하는 텍스트 파일 이름만 모아도 30Mb가 넘었던 기존의 던파는 이 파일들의 메모리 공간 점유율이 높고, XP SP2 이전 버전에서 실행 문제 발생, 하드디스크 읽기 제어 불가 등 다양한 문제를 일으켰다.
이에 하재승 프로그래머는 이 용량을 줄이기 위해 데이터를 압축했으나, 전체를 압축하면 게임 내에서 부분적으로 불러와야 할 때 문제가 생기므로 비슷한 종류의 파일을 모아서 압축하고 압축된 내용 전체를 메모리에 올리고 필요한 것만 사용할 수 있는 방법을 도입했다고 밝혔다. 특히 게임 패치 시 추가되는 파일을 대비 패치를 위해 필요한 부분만 패킹하는 증분 패킹을 통해 로딩 시간을 줄였다고 밝혔다.
이를 통해 게임 입장 후 메모리 사용량은 100Mb 감소했으며, 패치 용량 및 데이터 파일 읽는 시간이 대폭 감소해 로딩 시간에 영향을 주었다. 하지만 초기화 시간에는 큰 개선이 없어 다른 방법을 찾아야했다고 밝혔다.
유저 로그 기반 미리 읽기 리스트 생성
패치 전 던파는 던전에 들어가서 스킬을 처음 사용하면 하드에서 이미지를 읽느라 랙이 발생하는 현상이 자주 발생했다. 하재승 프로그래머는 이 문제의 원인으로 많은 양의 하드 코딩을 꼽았다.
던파는 직업 별로 독특한 플레이 스타일이 구현돼있으며 이는 데이터 수치 만으로 표현되기는 사실상 힘든 부분이 많았다. 또한 8년간 서비스 되며 예상치 못한 문제도 발생하면서 지금까지는 하드 코딩을 통해 이를 최대한 수정해왔다.
대표적인 하드 코딩으로는 일단 HDD에서 불러낸 데이터를 버리지 않고 플레이할 때마다 다시 이용하는 방식이 있으며 이런 하드 코딩은 처음 데이터를 불러낼 때 랙을 유발하고 메모리 부족 현상을 불러일으켜 런타임 오류 등을 통해 게임에 튕기게하는 주범 중에 하나였다.
이에 하재승 프로그래머는 유저 로그 기반 미리 읽기 리스트 생성하는 방식으로 문제를 해결하고자 했으며 이 때 테스트 서버를 통해 취합된 일주일 치 데이터 CSV만 해도 15Gb, 이미지를 읽은 기록은 7750만건, 유저 스킬 사용 횟수는 140회 이상이라고 밝혔다.
그는 현재 미리 읽기 데이터는 스킬 애니메이션과 아바타로 구분하여 분석 및 수정돼 업데이트됐다라고 밝혔다. 유저가 스킬을 사용한 타이밍을 수집해 분산 값을 통해 추정해 던전에서 스킬을 미리 불러 렉을 줄이는 한편 다양한 아바타 파츠의 이름을 모션 이름 위치에 저장해 하나만 HDD가 읽어도 여러 개를 한꺼번에 읽는 효과를 얻어냈다고 밝혔다.
물론 문제점도 있었다. 던파 자체의 맵이 포털 방식인 만큼 1번 방에서 A 스킬을 사용하고 2번 방에 갔다 다시 1번 방으로 돌아오면 이전에 출력된 스킬 이펙트의 로그가 남아 이어서 출력되는 문제점과 여러 데이터를 한꺼번에 묶다보니 관련 없는 항목이 포함되는 등 여러 문제점도 생겼다고 그는 밝혔다.
그는 이번 패치는 현재 유저 로그 기반 미리 읽기 리스트 생성은 1인 플레이에만 적용됐으며, 이 패치를 통해 던전 입장 시간은 증가했지만 던전 내에서는 랙이 크게 감소하는 효과를 나타내고 있다라고 설명했다. 하지만 데이터를 미리 읽어오는 만큼 메모리 사용량 증가로 크래쉬(게임 튕김) 현상의 증가가 우려된다라고 말해 주목 받기도 했다.
이 외에도 하재승 프로그래머는 게임 로딩 시 2천 개 이상의 이미지 팩을 일일이 다 열어보고 내부에 어떤 이미지 팩이 있는지 확인하는 시간이 느려지는 현상을 개선하기 위해 색인 파일 생성을 했으며, 보안 및 비정상적인 접근 차단을 위해 게임에 적용한 추적 변수가 정상적인 접근에서도 불러지는 경우가 있어 이를 수정했다라고 밝혔다.
마지막으로 하재승 프로그래머는 강연을 마무리하며 이후 진행될 던파의 다음 최적화 패치의 목표를 설명했다.
그는 이번 분석을 통해 스킬 사용 시 클라이언트가 읽어야 할 데이터가 어떤 것이고 버려야하는 데이터가 어떤 것인지 알게 됐으므로 던전 종료 시 필요 없는 데이터를 버리는 업데이트를 진행할 예정이며, 마을의 특정 부분(던전 입구)에서 사용량이 높아 랙이 유발되므로 그 부분을 개선할 예정이라고 밝혔다.
덧붙여 메모리 사용량 최적화는 이 후에도 진행될 예정이며, 유저 로그 기반 미리 읽기 리스트 생성을 파티 플레이에도 적용해 파티 플레이에서도 랙을 감소하고 크래쉬(게임 튕김)을 최소화 시켜 쾌적한 게임 플레이를 제공할 것이라 약속하고 강연을 마쳤다.
| |
| |
| |
| |
|
관련뉴스 | - 관련뉴스가 없습니다. |