본 시리즈로 왠만한 이브 얘기 전부 다 적고나니까 쓸 게 없어서 한동안 저희 콥일이랑 얼라/코얼에만 신경쓰다가, 요즘 뉴비들 유입이 많이 되면서 뉴비들한테 게임이 반응이 느리네, 핑이 구리네 어쩌네 하는 얘길 보게되서 다시 글을 쓰게 됐습니다.
고인물들은 다 아는 얘기지만, 이브는 “서버 틱”이라고 해서 이브온라인의 서버는 1 Hz의 딜레이를 갖고있습니다. 좀 더 자세히 설명하자면, 이브온라인에 접속한 모든 사용자는 정확히 1초 후에 응답받게 되어있죠. 소숫점은 반올림이 아닌 절상을 하게 되는데, 예를 들어서 내가 뭔가를 수행했는데 그게 서버 측으로부터 1.2초가 걸리는 작업이라면 이것에 대한 응답을 내가 받는 건 2초 후가 됩니다. 좀 더 자세히 알아보겠습니다.
게임 내에서 어떤 변화가 발생했을 때 게임 서버 입장에서 그것을 데이터베이스 서버까지 실시간으로 모두 작업하기란 불가능합니다. 물론 동접자가 아주 적다면 가능하겠지만 그렇지 않다면 긴 시간의 랙이 발생하게 되죠. 일반적인 게임 서버들이 수백대씩 구성되어있긴 해도 매초마다 그리드 단위로 수많은 변화가 생기는 이브온라인의 특성상, 그런 것들을 거의 실시간으로 DB 서버에 기록하는 것은 무리가 있습니다. 그래서 대부분의 무거운 작업들은 순차적으로 처리하게끔 코드가 작성되어있죠. 다시 말하자면, 하나 끝내면 그 다음 작업을 처리하고, 그거 끝나면 또 그 다음꺼 처리하는 식으로요. 그래서 클라이언트들이 어떤 명령어를 즉시 처리하는 것처럼 보이지만, 실제로 서버 측에서는 “즉시” 처리되는게 아니라 자신의 순서 즉 해당 명령어의 틱이 돌아올 때까지 기다려야됩니다.
이제 예를 들어보겠습니다.
1. 제가 현재 게이트를 타고 점프하려고 한다면, 화면 하단 HUD 위에 Jumping through the gate라는 메시지가 뜰 겁니다. 그러면 게임 클라이언트는 점프 허가를 받고 즉시 점프를 하죠. 하지만 그리드 내에 있는 다른 사람들은 다음 서버틱까지 그 사실을 알 수 없습니다. 즉, 내가 보는 화면의 메시지와 다른 사람들이 보는 제 상태는 최소 1초 이상 차이가 난다는 점입니다.
2. 제가 만약 터렛 무기를 작동시키면 일단 데미지는 바로 계산이 되고 목표물에 바로 들어갑니다. 하지만 제 게임 클라이언트는 다음 서버틱 전까진 얼만큼의 데미지가 실제로 들어갔는지는 보여주지 않을 겁니다. 무슨 말이냐면, 제가 쏜 건 일단 그냥 쏜 거고, 다음 서버틱에서는 상대방한테 들어간 데미지에서 탱킹모듈이랑 스킬 이런저런거 다 합쳐서 다시 실제 데미지 들어온 거 계산을 한 뒤 저한테 신호를 돌려주거든요. 물론 이브에서는 당연히 틱당 한 번 이상 무기를 발사할 수 있지만, 어찌됐건 응답이 돌아오는건 무조건 1초 후라는 겁니다.
3. 만약 제가 워프 스크램블러를 작동시킨다면 제 화면에서는 상대방한테 바로 즉시 태클을 건 것처럼 보일 겁니다. 하지만, 내가 너한테 태클 걸었음 이라는 메시지는 다음 서버틱 전까진 보여주지 않습니다.
좀 더 복잡하고 정교한 서버틱의 메커니즘에 대해서는 http://eve.501gu.de/misc/travelceptor_vs_instalocker.png 여기 있는데, 이건 내용이 너무 길어서설명은 하지않았고, 필요한 사람들은 보면 이해되실 겁니다.
위에 것을 제 개인적으로 응용하고 있는 방법으로는, 돌아다닐 때 게이트 넘으면 클로킹 상태에 있죠? 그리고 거기서 어디론가로 다시 워프를 해야만 클로킹이 풀리죠. 그 상태에서 마웝 트릭을 쓴다거나 코옵 함선 타는 중이라 코옵 모듈을 작동시키고 싶은데 보통 대부분의 사람들이라면 (저도 예전에 그랬지만) Warp drive active라는 음성이 나왔을 때서야 모듈을 켰습니다. 근데 이 서버틱을 알고나서부터는 이제 Warp 버튼을 누른뒤 대충 1초를 세고나서 마웝을 작동시키니까 “Warp drive active”라는 음성이 나옴과 동시에 모듈이 켜지더라구요. 물론 실제로는 워프에 돌입하고난 다음 틱인 1초 후에 모듈이 작동됐겠지만, 이 메커니즘을 이해함으로 단 1초라도 늦으면 위험한 상황에서 유용하게 써먹을 수 있게 됐습니다.
도움이 되셨길 바래요.
Leave a Reply