데드 레커닝이란 특히 게임서버에서 게임 클라이언트와 실시간 동기화를 위한 알고리즘이다.


 가령 캐릭터의 이동에 대해 동기화를 하는 가장 완벽한 방법은 매 프레임마다 통신을 하는 것이지만, 이건 엄청난 네트워크 양을 소모하게 된다.


특히 캐릭터의 이동을 통신해야 한다는 건 다른 유저가 이를 알아야하거나 서버의 판정에 크게 의존한다는 얘기이므로, 이는 퍼포먼스 뿐 아니라 신뢰성도 중요한 이슈가 된다.


 이러한 문제를 해결하기 위해서 보다 효율적인 방법은 클라이언트에서 방향을 전환할 때만 추가 패킷을 보내고 서버는 그 사이에서 클라이언트의 게임 캐릭터 위치를 예측하여 동기화를 맞추는 기법이다.


 그리고 이 때 각 엔티티들의 행동을 예측하는 종류의 알고리즘을 서로 맞추는 일종의 약속을 데드 레커닝이라 한다.


 이 때 사용하는 알고리즘은 특정지을 수는 없으나 주로, regression 형태와 유사한 종류의 공식으로 유도한다. 가장 간단한 방법은 위치로부터 속도와 시간 을 조합하여 평균을 내고 해당 방향으로 전진시키는 방향이다. 가능한 알고리즘이 정교하고 게임에 최적화되어있을 수록 효과는 극대화된다.


검증은 서버와 클라이언트가 모두 수행할 수 있으나 게임 종류에 따라서 서버만 수행하거나 클라이언트만 수행하는 경우가 있다. (주로 클라이언트가 처리하는 경우가 많다.)


 송수신에 있어서 지연시간이 발생하고 서버쪽 데이터 처리 로직 혹은 다른 유저에게 브로드캐스팅하는데 걸리는 시간 등이 있기 때문에 종종 오차가 발생하고, 특히 일시적 통신 오류가 발생할 경우에는 동기화 이후 캐릭터의 위치가 워프하는 등 상황이 발생하게 된다.


 당연히 이를 완벽하게 해결하는 방안은 없으며, 어느정도 운영 상의 도움이나 상호 약속된 정해진 알고리즘을 통해 조절하곤 한다.

이런면에서 어느정도 트레이드 오프를 가져가느냐가 사용자 경험에 있어서 핵심적인 영향을 미칠 수 있다.




+ Recent posts