그렇다면 모든 게임 플레이 판정을 서버에서 처리하면 되지 않을까요? 가능한 방법이지만, 이는 또 다른 문제를 일으킵니다. 극단적으로 게임 판정뿐만 아니라 게임 로직 전체를 서버에서만 처리한다고 가정해 봅시다. 그러면 그림 4-9와 같이 모든 게임 로직 처리는 서버가 전담하고, 입력받기와 렌더링은 오로지 클라이언트에서만 처리할 것입니다.
캐릭터를 이동시키는 마우스 클릭이나 키보드 방향키를 누르는 일련의 입력들이 항상 네트워크를 통해 서버에 전달될 것입니다. 그리고 서버에서는 세션의 모든 캐릭터 상태를 1/60초마다 변화시켜서 그 결과를 클라이언트에 보내 줄 것입니다.
▲ 그림 4-9 게임 로직을 서버에서만 처리
이는 게임 플레이의 쾌적함을 방해하는데, 레이턴시 때문입니다. 앞 장에서 언급했듯이 현대 컴퓨터 네트워크의 레이턴시는 몇 밀리초에서 수백 밀리초로 다양합니다. 레이턴시가 50밀리초인데, 게임 루프의 초당 횟수, 즉 프레임률(frame rate)이 60이면 어떻게 될까요? 입력은 50밀리초 뒤에 서버에 도착할 테고, 서버에서 이를 판정하여 클라이언트에 완전히 도달할 때까지 또 50밀리초가 걸릴 것입니다. 게다가 매번 메시지를 보낼 때 걸리는 레이턴시는 제각각 다릅니다. 결국 클라이언트에서 세션의 변화, 즉 게임 진행 속도가 불규칙하여 한 템포씩 느리게 보일 것입니다. 속칭 ‘랙 쩌는’ 상황이 벌어집니다.