안녕하세요. 혹시 월드오브워크래프트 같은 MMORPG(이렇게 부르는게 맞나요?) 게임 개발에 대해 아시분 있으시면 답변 좀 부탁드리겠습니다.
게임 중 몇가지 테스트를 해봤는데 프로그램을 강제종료를 시키고 다시 시작해도 정확히 강제종료되는 시점에 있던 자리와 상황에 그대로 있더군요. 매번 움직일때나 상황이 발생할때마다 서버에 기록을 하는것 같은데... 당연히 이렇게 해야 다른 플레이어와 연동이 되겠지요.. 플레이어 뿐만 아니라 그냥 지나다니는 동물들이나 몬스터들도 계속 서버에서 위치를 바꾸면서 그 위치를 보내주는것 같더군요.
그러면 이러한 정보들이 서버 DB에 저장되어 있을텐데 각각의 플레이어나 몬스터들이 움직일때 계속해서 DB에 UPDATE가 되고 있는 것인가요? 이렇게 되면 서버 DB에 1초에도 수백만개의 UPDATE 쿼리가 적용될것 같은데 이게 처리 가능한 일인지 의문입니다.
도대체 어떻게 작동되고 있는건가요?
|
캐릭터의 이동/공격 등의 이벤트는 클라이언트에서 적절히(?) 걸러서 최소한의 이벤트 정보를 서버에 전달하게 됩니다. 서버와 사용자 컴퓨터간의 동기화를 위해 'dead reckoning' 등의 알고리듬을 이용하기도 합니다.
서버에서 데이터베이스 접근도 최적화를 통해 접근 횟수를 줄입니다. 캐릭터등의 정보등이 변경되도 바로바로 데이터베이스에 저장되는게 아니라 일종의 캐쉬 상태로 메모리에서 관리합니다.