댓글에 달아놓은 글을 그대로 가져왔기 때문에 대답형식으로 쓰여있습니다.
많은 분들의 오해가 쌓이고 쌓여서 여기까지 왔네요...... 컴퓨터 아키텍쳐 쪽에서 일하고 있는 사람으로써 말해드릴게요.
마비노기가 구형 시스템이지만 이만큼이나 렉이 심한 것은 클라이언트 측의 문제가 아니라 서버 측의 문제입니다.
1. 위에서 언급한 cpu 기반의 엔진?
10년전 cpu로 동작하던 게임이 지금에 와서 게임 스펙의 상향으로 이렇게 렉이 생긴다? 게임 컨텐츠의 발전보다 컴퓨터 아키텍쳐의 발전이 훨씬 앞섭니다. cpu는 멀티프로세서를 제외하더라도 단위 cpu에서 처리하는 속도나 메모리 용량이 어마어마하게 늘어났기에 cpu 측면에서의 영향이 아닙니다.
2. CPU만 혹사당한다?
고급 광원효과, 반짝임 효과 등은 GL 쪽에서 널리 쓰이고 있는 기능입니다. 마비노기는 현재 이것들을 구현해놨죠. 그런데 이 기능들을 OpenGL, Direct3D 등의 GL을 사용하지 않고 CPU만 사용하는 함수로 만들어서 추가하였다? 이건 말이 안됩니다. GL을 사용하면 쉽게 구현되는 것을 효율이 현저히 떨어지는 함수로 새로 짜는 것이니까요. 이런 기능들을 구현한 것으로 봐서 마비노기는 GPU를 사용하여 구현되었습니다.
3. 메모리에 불러온 것은 해제하지 않는다?
만약 이거라면 장치관리자를 열어서 마비노기가 점유하고 있는 메모리를 보면 끝없이 증가해야 합니다. 하지만 전혀 그렇지 않죠. 저는 장사를 위해서 멀티계정을 '항상' 켜두고 있는데 던바 1채널처럼 사람들이 많이 오가고 많은 트레픽이 쌓이는 곳에서 1주일을 켜둔다면 메모리 누수 때문에 진작에 튕겨야겠죠? 하지만 해당 프로세스가 점유하고 있는 메모리 영역은 큰 변화를 보이지 않고 있습니다.
그리고 동적 메모리의 해제는 프로그래밍의 기본 중의 기본입니다. 이것을 못하고 게임 제작에 참여한다고요? 진작에 박스 챙겨서 나왔을겁니다.
4. 만약 클라이언트 측의 성능으로 인한 렉이라면 님들의 화면이 뚝뚝 끊겨야 합니다.
cpu가 처리량을 감당 못하고 렉이 생기는 것이라면 fps도 낮고 화면도 뚝뚝 끊겨야 합니다. 던파를 해본 분이라면 알겠지만 작년 초중반에 최적화 패치를 하기 전에는 몹 모인곳에 피오아를 날리면 렉 때문에 실제 피탄수는 절반도 되지 않았고 화면은 뚝뚝 끊겼습니다. 이게 클라이언트 측의 렉입니다. 하지만 마비노기는 어떻죠? 화면은 잘 굴러갑니다. 스킬 시전을 해도 요청이 받아지지 않을 뿐이지 시전하고서도 화면은 잘만 움직입니다. 인벤을 열어도 되고 케릭창을 열어도 되고 스킬창을 굴려도 되죠. 클라이언트 측의 렉이라면 이런 일은 불가능합니다.
그렇다면 왜 이런 렉이 생기느냐?
그건 마비노기가 Blocking 방식의 프로토콜로 만들어진 게임이며 대부분의 연산을 서버측에서 수행하기 때문입니다. 현재 많은 게임들은 인스턴트 던전 혹은 지역 단위로 나누어져 있으며 각각을 따로 처리하고 있습니다. 이 처리는 크게 분산서버와 p2p 방식으로 나뉘는데, 분산서버는 유저를 그룹으로 나누어 서로 다른 서버에 접속하도록 하고 각각의 서버들이 유저를 담당해주는 겁니다. 요새는 잘 쓰이지 않는 방식입니다. p2p 방식은 유저들 중에 한명이 계산을 담당하는 겁니다. 대표적으로 던파의 파티장이 있죠. 던전에 입장하는 순간 레어, 유니크 드랍 등의 중요한 결정을 제외하고는 파티장의 클라이언트가 모든 연산을 담당합니다. 실제로 인터넷이 아주아주 느린 외국에서 던파를 하는 경우에 솔플을 하게 되면 몹도 잘 잡히고 잡템도 잘 떨어집니다. 하지만 레어 드랍 등은 몹을 잡고 난 뒤 상당한 시간이 지나야 떨어지게 되죠. 그리고 국내에서 플레이하는 파티원은 파티장의 컴퓨터와 교신하는데 시간이 오래 걸리기 때문에 어마어마한 렉을 경험합니다.
마비노기는 이런 방식들이 나오기 전에 개발된 게임으로 모든 연산을 서버에서 담당합니다. 이동, 공격은 물론 아이템을 집어서 다른 슬롯으로 옮기는 과정까지도 모두 서버에게 요청하고 서버는 그 결과를 클라이언트로 되돌려보냅니다. 이 때문에 우리는 아이템을 집을때도 실제로 집어지기 까지는 상당한 시간을 기다리는 것을 볼 수 있죠. 클라이언트 측에서는 유저의 입력을 받고 그 정보를 서버에게 전달하는 역할과 서버에서 돌아온 회답을 처리하여 유저에게 보여주는 연산만을 합니다. 이동, 공격, 데미지연산, 템드랍 등을 모두 서버에서 다 관리하는 비효율적인 방식이죠.
간단히 교실에 비유하자면, 최신의 게임들은 모둠별로 학생을 나누고 조장에게 권한을 위임합니다. 그리고 과제를 나눠주고 나중에 조장이 모아서 보내주는 결과만을 봅니다. 하지만 마비노기는 학생 한명한명에게 개별적으로 과제를 설명하고, 몇번 문제를 풀것인지, 답안지에는 언제 기록을 할것인지, 이제 다 풀었으니 제출할것인지를 하나하나 허락받으며 문제를 풀라고 합니다. 조장을 통해서 일을 하면 선생님이 해야 할 일은 많지 않죠. 유저가 많아지면 각 조장이 맡는 학생의 수를 늘리는 방식으로 본인에게 오는 부담이 O(n)보다 낮게 설정할 수 있습니다. 하지만 일일이 관리하는 측면에서는 학생의 수가 많아지면 다음 학생으로 넘어가는 과정 역시 복잡해지므로 O(n^2)보다는 낮지만 비효율적인 알고리즘이 됩니다.
자 이것이 요즘들어 왜 문제가 되는것이냐? 그것은 마비노기의 무료화 선언 이후 늘어난 어마어마한 매크로의 숫자와 연관이 있습니다. 마비노기는 부분 유료화 정책을 취하면서 모든 유저들이 무료로 마비노기를 이용할 수 있게 되었는데 지금 이리아에 보면 실제 유저보다 많은 매크로들이 돌아다니고 있죠. 이러한 유저 수의 증가는 서버측에 과도한 부하로 작용하며 유저가 2배로 늘어날때 서버의 부하는 3배 이상 될겁니다. 유저가 10배로 늘어나면 서버 부담은 70배 가량 늘어나죠.
글쓴이가 언급한 내용을 고치는 것은 지금의 문제 해결에 큰 도움이 되지 않습니다. 여전히 서버측에서 회신이 돌아오는 시간은 지금과 똑같을 것이며 렉은 전혀 나아지지 않겠죠.