MMORPG 게임서버에 Stateful을 쓰는 이유

Robo·2023년 9월 16일
0

게임서버

목록 보기
1/1
post-thumbnail

들어가며

서버를 공부하다보면 Stateful, Stateless 에 대해 듣게 된다. 그리고 먼저 웹서버를 하게 되었다면 어찌보면 게임서버를 공부하게 될 때 이해하지 못하는 부분이기도 하다. 웹서버도 일정 세션시간 동안 로그인이 저장되는 등의 Stateful 이 가능하지만 유독 왜 MMORPG의 게임 서버에선 Stateful이 중요한지 개념을 같이 보며 확인하면 좋겠다. 나도 이 기회에 복습 좀 하고(...)

우선 개념 이해

하지만, 만약 Stateful, Stateless 용어 자체가 다른 사람들에게 안 쓰이는 개념이면 어떡하지? 생각할 수 있을 거 같아 좀 공식적으로 누가 쓰는지 찾아보았다.

RedHat - Stateful, Stateless

KCI 등재 - Stateful/Stateless 서버 기반 개인 맞춤형 감성 공유 플랫폼 개발

RedHat은 미국 오픈소스 기업으로 1993년부터 설립된 업력이 꽤 있는 회사고 우리나라 KCI 등에 쓰인 논문도 해당 단어를 쓰고 있었다. 꽤 쓰고 있는 말이니 안심하고 Stateful 과 Stateless 개념을 즐겨주게 되었다.

Stateful

Stateful 은 접속했을 당시 상태가 저장된다고 생각하면 된다. MMORPG 게임 서버는 실시간성이 중요하다. 실시간성이란 무엇인지, 왜 실시간성이 중요한지부터 차근차근 생각해보자.

대체로 MMORPG 게임이라 생각한다면 리니지, 테라등 유명 RPG를 생각하게 된다. 하지만 나는 메이플스토리가 더 친숙해서 메이플스토리를 예로 들어보겠다. 만약, 우리가 메이플스토리를 한다고 생각해보자.

게임 내 월드에 수많은 캐릭터들이 존재하고 이 캐릭터 하나하나가 움직이거나 공격을 할 때마다 다른 캐릭터들에게 해당 행동을 한 정보를 건내줘야한다. 이 때 중요한 건 그 캐릭터가 어떤 행동을 하자마자 다른 캐릭터가 정보를 받는게 중요하다.

이 때 유저의 클라이언트는 서버로부터 과거 정보를 받으면 안된다. 예를 들어, 몬스터에 대한 정보가 동기화되지 않은 채 정보를 받게 되면 이미 그 유저 주변 몬스터가 죽었거나 그 유저는 다른 위치로 가 있는데 그걸 인지할 수 없기 때문이다. 그럼 내 클라 입장에서는 서버로부터 받은 정보대로 몬스터는 보이지만 서버의 검증 결과 허공에 스킬을 쓰게 될 것이다.

하지만 문제는 RPG 게임에서 이동이나 공격에 영향을 주는 정보는 한 두가지가 아니다. 만약 마법사가 마법공격(매직클로)를 쓴다 하더라도 관련 데미지 계산식이 나와야한다.

INT 능력치 + 마력 + 데미지 증가량 + ... = 마법공격 데미지!!

보통 이 때 필요한 유저 정보들은 서버에 존재한다. 그런데 이 유저 정보가 저장될 당시 메모리에만 저장한다면 서버 컴퓨터가 꺼지기라도 하는 날엔 모든 유저 정보가 날아갈 것이다. 그래서 유저 데이터를 안전하게 DB에 저장하게 된다.

보통 실시간성이 중요치 않은 서버는 정보가 요구될 때마다 DB에서 정보를 가져온 후 계산만 하고 메모리에 들고 있지 않는다.

하지만 MMORPG 게임서버만큼은 실시간 처리를 위해 이동 시나 공격 시에 DB와 통신해서 데이터를 가져오는게 아니고 이미 로그인 시점에 해당 관련 정보를 메모리에 가지고 있는게 중요한 것이다.

왜냐하면 이 계산 후 전달 과정은 빠르면 빠를 수록 좋은 게임이 된다.

가끔 게임을 하다보면 게임을 최고사양으로 돌릴 수 있는 컴퓨터인데도 퀘스트 결과창을 본다거나 스킬 사용에 대한 데미지를 넣을 때 렉이 걸린다던지 하는 것을 본 적이 있을 것이다. 이 경우는 계산에 의한 서버 응답을 받지 않으면 클라이언트가 움직일 수 없게 하는 경우가 많아서 그렇다. 게이머라면 이런 시간이 최대한 없는 것이 좋은 게임이라고 느끼기 마련이다.

하지만, 말했다시피 이런 연산이 필요할 때마다 DB 와 통신해서 메모리에 들고와야 한다면 불필요한 과정이 하나 생기는 것과 마찬가지다.

예를 든다면, 사과를 줄 때 껍질 까둔 사과를 잘라서 주는 것은 쌩사과를 껍질까지 까서 잘라서 주는 것보다 당연히 빠를 것이다. 이 경우 유저가 로그인 했을 시 이 유저가 행동하기 전부터 메모리는 더 많이 차지하겠지만 더 빠른 실시간성을 위해 희생시키는 것이다.

결론

실시간으로 메모리에 있는 정보를 이용해 계산을 하고 이 답을 빠르게 전달하기 위해 MMORPG 서버는 Stateful 서버를 사용한다고 볼 수 있다.

출처

Free Code Camp - Stateful vs Stateless
프로카데미 - 게임서버 2가지 기술

profile
호호선생

0개의 댓글