로그인

회원가입 | ID/PW 찾기
다미롱 (김승현 기자) [쪽지]
/special/page/event/ndc/2013/nboard/78/?n=42989 주소복사

삼국지를 품다로 본 모바일 개발 분투기

유니티면 만사 O.K? PC 개발자의 모바일 개발 6계명

수백억을 쏟아 부은 온라인 게임 태반이 수억원짜리 모바일게임보다 매출이 적은 시대게임개발의 대세는 모바일로 흐르고 있다이런 흐름에 발맞춰 적지 않은 PC게임 개발자들이 모바일게임 개발을 시작했다하지만 PC와 모바일의 근본적인 격차는 PC게임 개발자가 생각하는 것보다 크다설사 멀티플랫폼 지원 엔진을 사용한다고 하더라도….

 

멀티플랫폼 MMORPG <삼국지를 품다>를 개발한 엔도어즈의 최부호 모바일팀장은 24일 코엑스에서 열린 ‘넥슨 개발자 컨퍼런스 2013’(NDC 2013)에서 모바일게임 개발에 도전하는 PC게임 개발자들에게 자신의 경험을 공유했다순혈 PC게임 개발자이던 그가 PC와 모바일을 아우르는 멀티플랫폼 게임을 개발하며 겪은 이야기를 들어보자. /디스이즈게임 김승현 기자


 

 

 

1. 업데이트가 아니라 헬게이트유니티 3.X보다 4.X를 권한다

 

“PC게임 개발자가 흔히 하는 착각이 멀티플랫폼 지원 엔진이 있다면 모든 것이 해결된다는 것입니다. 틀린 말은 아닙니다. 하지만 멀티플랫폼 지원이라는 것은 곧 모든 OS 이슈에 대응하기 위해 버전이 자주 바뀐다는 것을 명심해야 합니다.”

 

엔도어즈의 최부호 모바일팀장은 멀티플랫폼 MMORPG <삼국지를 품다>를 개발하며 있었던 일을 말하며 운을 띄웠다게임이 개발하는 와중 엔진 버전이 업데이트 되는 일은 심심치 않게 일어나는 일이다하지만 그가 사용하던 유니티 엔진처럼 한 달에 한번 꼴로 엔진 버전이 달라지는 것은 결코 흔히 겪을 수 있는 일은 아니었다.

 

 

 

이는 PC와 모바일콘솔까지 모든 플랫폼을 커버해야 하는 유니티 엔진의 특성 때문이다. OS 하나가 1년에 2번 꼴라 버전이 업데이트 된다 하더라도, 이러한 OS PC 모바일, 콘솔 등으로 확대하면 반영해야 할 데이터는 기하급수적으로 늘어난다그리고 이는 고스란히 신기능을 지원해야 할 엔진 업데이트로 이어진다.

 

물론 잦은 엔진 업데이트 반영이 불가능한 일은 아니다. 하지만 문제는 <삼국지를 품다>의 기반이 된 유니티 3.X대 엔진은 이전 버전의 데이터 파일이 호환되지 않는다는 것이다. 개발진은 이 때문에 이전 데이터를 일일이 새 버전에 맞게 수정해야 했다.

 

울며 겨자 먹기로 이전 데이터를 일일이 수정해도 문제는 끝나지 않았다. 엔진 업데이트를 반영하기 위해 게임을 업데이트 하면 새로운 데이터 파일로 인해 다운로드 용량이 100MB를 넘어서는 일이 비일비재였다. 데이터 사용량에 민감한 모바일 환경 특성 상 유저 이탈이 일어나도 이상하지 않을 상황이다. 엔진 업데이트 하나가 헬게이트를 불어온 셈이었다.

 

 

 

엔진에 있어 멀티플랫폼 대응은 양날의 칼입니다. 모바일 플랫폼의 네이티브 코드에 정통하지 않아도 개발을 할 순 있지만, 그만큼 프로그래밍 외적인 OS 이슈에 많이 시달리게 되죠. 차라리 프로젝트를 시작한지 오래되지 않았으면 이전 버전 데이터 파일을 호환하는 4.X대 유니티엔진으로 변경하는 것을 추천합니다. 그럴 사정이 아니라면 엔진 업데이트 반영에 신중에 신중을 기할 수 밖에 없죠.”

 

 

2. 유니티만 알면 끝이라고네이티브 코드의 중요성

 

많은 이들이 유니티 엔진만 있다면 모바일 기기에 대한 공부가 부족해도 게임을 개발할 수 있다고 생각합니다. 하지만 모든 플랫폼에 대응한다는 것은 바꿔 말해 어느 한 플랫폼에서도 최고의 성능을 보이기 힘들다는 말입니다. 여기서부턴 모바일에 대한 개발자의 이해도가 필요하죠.”

 

<삼국지를 품다> 개발 중 한 팀원이 최 팀장에게 하소연했다. 게임을 아이폰에서 실행시켜봤는데 기기 특유의 섬세한(?) 진동이 느껴지지 않는다는 것이었다.

 


 

원인은 엔진 자체적으로 지원하는 기능의 투박함이었다. 유니티 엔진은 모든 플랫폼에 대응이 가능한 대신, 기능에 세세함에 있어서는 하나의 플랫폼에 특화된 네이티브 코드에 뒤떨어졌다. 일례로 유니티 엔진에서 포터블기기에 진동기능을 작동시키는 함수는 단순히 온/오프 기능만 지원한다. 만약 진동의 강약을 조절하기 위해서는 추가적인 플러그인의 개발이 필수다.

 

이러한 엔진의 문제점을 발견하는 것도, 그리고 이를 해결할 플러그인을 개발하는 것도 결국은 특정 플랫폼에 특화된 네이티브 코드에 대한 지식을 필요로 한다. 기기를 잘 알고 있어야만 엔진의 문제를 파악할 수 있고, 플러그인을 개발하기 위해선 결국 그에 특화된 지식이 필요하기 때문이다.

 

유니티 엔진은 도깨비방망이가 아니라 멀티플랫폼 지원을 용이하기 하는 도우미에 가깝습니다. 만약 유니티 엔진만 믿고 개발을 시작했다가는 개발자도, 유저도 만족시키지 못하는 반쪽 짜리 작품이 나올 뿐이죠. 각 플랫폼에서 게임이 최고의 성능을 발휘하기 위해선 결국 그에 대한 개발자의 지식, 즉 네이티브 코드에 대한 이해가 필수적입니다.”

 

 

 

 

3. 프로그램의 메모리 폭식을 막아라!

 

모바일기기와 PC는 다른 환경의 디바이스입니다. 그렇기에 PC게임 개발자들이 중시 여기는 것과 모바일게임 개발자가 중시하는 것에는 차이가 있죠. 일례로 메모리가 풍요롭고 확장도 자유로운 PC환경에 익숙한 개발자는 모바일게임 개발에 있어 메모리 관리의 중요성을 간과하기도 합니다.”

 

최 팀장이 <삼국지를 품다>를 개발하며 가장 애를 먹었던 것은 프로그램의 메모리 점유 문제였다. <삼국지를 품다>의 기반이 된 유니티 엔진은 메모리 관리가 까다로운 엔진이다. 점유 메모리를 늘릴 수는 있어도 이를 줄이는 것이 불가능에 가깝기 때문이다. 유니티 엔진으로서는 추가 메모리가 필요할 때마다 이를 확보해 긴급상황에 대처하려 하는 것이지만, 기기를 바꾸지 않는 한 메모리 확장은 꿈도 못 꾸는 모바일 환경에선 심각한 문제였다.

 

 

 

처음에는 이를 알아차리지 못하고 디바이스를 다운시키는 일도 많았죠. 결국 정답은 엔진 외적으로 작동하는 메모리 풀이었습니다. 점유용량이 변하는 메모리 풀을 별도로 만들어 자주 쓰는 리소스를 연동시켰죠.”

 

최 팀장은 이를 위해 개발 단계부터 전투 시의 이펙트 효과처럼 자주 사용할 것 같은 리소스를 분류해 메모리 풀에 연결시켰다. 자주 사용하는 리소스를 별도의 메모리 풀에 연결함으로써, 무한히 커지기 쉬운 유니티 엔진의 메모리 점유율에 고삐를 죈 셈이다.

 

사실 이러한 방법은 모바일 게임은 물론 PC게임에서도 자주 사용되는 방법입니다. 하지만 상대적으로 메모리가 풍요로운 PC환경과 달리, 모바일게임 개발, 특히 유니티 엔진을 사용함에 있어서는 무엇보다도 중요한 기능이죠. 개발 단계부터 이를 염두에 개발하지 않으면, 나중에 메모리 풀 만드랴, 리소스 분류하랴 정신없는 마감이 기다리고 있을 것입니다.”

 

 

 

 

4. 배터리 조기방전화면도, 데이터도 무리라면 FPS를 깎는다!

 

배터리 소모량은 모든 모바일게임의 숙제다. 특히 MMORPG <삼국지를 품다>처럼 플레이 타임이 긴 게임이라면 문제의 중요성은 더 커진다. 실제로 최 팀장이 게임 개발 중에 받은 피드백의 대부분은 무지막지한 배터리 소모와 발열량에 관련된 것이었다.

 

게임을 실행한지 몇 분만 지나도 손에 쥔 스마트폰은 손난로 마냥 뜨거워지고, 배터리를 충전하며 게임 해도 스마트폰이 꺼졌습니다. 배터리 소모량 때문에 불안해서 게임을 못하겠다는 테스터도 많았고, 어떤 테스터는 게임의 발열량을 꼬집으며 겨울에만 할 수 있는 게임이라고 말하기도 했죠.”

 

 

 

하지만 이러한 유저들의 요구를 수용하는 것은 쉬운 일이 아니었다. <삼국지를 품다>가 모바일 기기로 실행하는 온라인 게임을 표방한 이상, 개발진이 선택할 수 있는 방법은 제한적이었기 때문이다.

 

일반적으로 배터리 소모나 기기의 발열에 영향을 끼치는 기능은 3가지로 나뉜다. 디스플레이의 가동시간과 3GLTE를 이용한 데이터 통신, 그리고 스마트폰 자체적으로 실행하는 데이터 처리 프로세스(일명 AP연산). 이 중 디스플레이와 데이터통신에 관련된 것은 모바일에서 실행되는 MMORPG로써 포기할 수 없는 부분이었다. 결국 개발진은 고심 끝에 스마트폰의 연산과 관련된 FPS(Frame Per Second, 초당 프레임수)를 줄이기로 했다.

 

 

 

결과는 성공적이었다. 30분 플레이 기준 기존보다 배터리 소모량은 66%가 줄었고, 기동된 기기의 온도도 38℃로 떨어졌다. 기존에 기기 온도가 저온화상이 코앞이었던 42℃였던 것을 감안하면 장족의 발전이었다.

 

하지만 얻는 것이 있다면 잃는 것도 있는 법. FPS를 줄이니 UI의 반응속도와 움직임이 투박해졌고게임 내에서도 부드러운 움직임이나 화려한 이펙트가 불가능해져이는 <삼국지를 품다>가 내세우는 캐치프레이즈인 대하드라마의 축인 인 게임 동영상에서 특히 크게 느껴졌다.

 

게임이라는 콘텐츠의 특성을 고려한다면 배터리와 발열량 제어에 가장 효과적인 수단은 FPS를 줄이는 것입니다. 하지만 이는 타협이 필요합니다. 민첩한 반응이나 0.1초 단위 공방이 중요한 액션게임에서 FPS를 버리기란 쉽사리 내리기 힘든 결정이죠. 선택은 게임 장르에 맞춘 개발자의 몫입니다.”

 

 

 

 

 

5. 피해자를 직접 찾아가서야 알아냈던 오류, 404 Not Found

 

“<삼국지를 품다>가 서비스를 시작했을 무렵 일어난 일입니다업데이트 후 일부 유저가 게임접속을 못한다고 피드백을 보냈습니다대부분의 다른 유저는 문제 없는데다, 개발팀이나 QA팀에서 실시한 코드분석으로도 답을 알 수 없던 상황이었습니다. 무슨 일이 일어난 것이었을까요?”

 

정답은 우습게도 네트워크 오류였다. 아무리 코드를 뒤져도 원인을 알지 못했던 개발진은 직접 한 피해유저에게 찾아갔다. 스마트폰을 빌려 데이터를 검사해보니 한 파일에서 낯익은 오류메시지가 보였다. 일반인들에게도 익숙한 ‘404 Not Found’였다.

 

 

 

유선망이 주류인 PC의 온라인 환경과 달리, 모바일 기기의 통신환경은 불안정하다. 일례로 WIFI를 사용하는 유저는 수시로 공용 WIFI망에 노출된다. 문제는 SK LG같이 로그인이 필요한 공용 WIFI망이다. 공용 WIFI인만큼 망은 연결되어 있지만, 로그인을 못해 사용권한은 없는 상태. 이번 사건도 그러한 과정에서 일어난 것이었다.

 

개발진 대부분이 PC게임 개발자 출신이라, 사건의 원인을 알곤 다들 황당해했습니다. PC에선 일어나기 힘든 일이었으니까요.”

 

때문에 최 팀장은 모바일 게임을 개발할 때 항상 불안정한 모바일 통신상황을 고려해야 한다고 강조했다. 그는 게임의 패치에 대해서도 온라인 체크 뿐만 아니라 기기 내 자체적인 안정성 체크 기능을 넣어 이중삼중으로 데이터 이상을 체크해야 한다고 강조했다.

 

설사 3G LTE를 사용한다고 하더라도 무선통신망은 언제든지 끊길 수 있습니다. 밀폐공간인 엘리베이터가 대표적인 예죠. 때문에 패치시간이 걸리더라도 온∙오프라인 연동으로 데이터 체크를 강화하는 것을 추천합니다.”

 

 

 

 

6. iOS에서 업데이트 장담은 금물모바일 게임 심의

 

플랫폼마다 다른 심의시간과 기준도 PC라는 하나의 플랫폼에만 익숙한 PC게임 개발자에겐 생소한 요소다.

 

<삼국지를 품다>를 서비스하던 중 iOS 버전만 심의가 반려되는 일이 일어났다. 버그 픽스와 콘텐츠 수급 등의 이유로 업데이트를 미룰 수는 없던 상황. 결국 게임은 iOS의 버전만 그대로 둔 채 업데이트를 감행했으나, 그 결과 버전 차이 때문에 iOS 유저들이 게임 자체를 진행하지 못하는 일도 일어났다.

 

 

 

이러한 일이 일어난 까닭은 모바일 플랫폼마다 각기 다른 심의기간과 기준 때문이다. 구글 플레이 스토어나 이통 3사 오픈마켓은 큰 문제가 아니다. 구글 플레이 스토어는 사후심사이고, 이통 3사 오픈마켓은 심의기간이 길어봐야 하루에 불과하기 때문이다.

 

문제는 최초 론칭 시 2주 이상, 업데이트 시에도 5 ~ 10일이라는 심의가 필요한 애플 앱스토어다. 만약 앱스토어 심의에 통과하지 못한다면 심의기간은 기하급수적으로 늘어난다. 매번 심사관이 다른 탓에, 기존에 심의를 통과한 콘텐츠도 추가로 지적될 가능성이 크기 때문이다. 때문에 업데이트나 버그픽스가 있을 때마다 iOS는 즉각적인 대응이 힘든 상황이 많다.

 

 

 

“iOS 기반 게임이나 멀티플랫폼 게임을 개발하는 이라면 앱스토어 심의가 반려될 수 있음을 항상 염두에 두어야 합니다. 일정을 보수적으로 잡는 것은 기본이고, 멀티플랫폼 게임을 개발하는 이라면 개발과정에서도 이를 반드시 고려해야 합니다. 만약 심의 문제로 플랫폼 간 버전이 차이난다면, 이를 사전에 고려하지 않는 한 십중팔구 오류가 발생하죠.”

 

최 팀장은 마지막으로 모바일과 PC는 비슷한 듯 다른 환경입니다. 이러한 것을 간과하고 PC게임 개발의 경험과 자원을 모바일에 투영하려 한다면 코끼리를 냉장고에 넣으려는 것과 다를 바가 없습니다.”며 청중에게 기기 특성에 걸맞은 개발을 강조하며 강연을 끝마쳤다.

 

최신목록 1 | 2 | 3 | 4