2 minute read

Deterministic 방식

복습

  • TCP : MMORPG, 보드게임
  • UDP : 액션, 격투, 슈팅, FPS, RTS
  • 이것들은 데이터를 ‘어떻게’ 보낼 것인가에 관한 이야기라고 볼 수 있다

강의 들으면서 메모하고 정리를 많이 안해서 읽기에 편안한 문체가 아닐 수 있습니다.

어떤 데이터를 보내서 어떻게 활용할 것인가?

데이터 활용에 관하여 : Deterministic / Server Authiority

  • Deterministic : UDP와 짝이 지어진다. 반응성이 좋아야하는 게임에 많이 사용
  • Server Authiority : TCP와 짝이 지어진다. 서버 권한이 필요한 MMORPG에서 사용된다. MMORPG는 서버의 권한이 막강해야함
  • 엄밀히 따지면 둘 사이(전송과 활용)에는 관계가 없지만 둘이 짝이 지어지는 경우가 많다.

Deterministic

  • 결정적인, 결정되어진 이런 느낌. 이미 결정되어있다. 너는 이미 죽어있다. (?)

추억의 오락실 게임을 기억해보자

  • 예전 철권 같은 게임을 오락실에서 할 때를 기억해보면, 바로 옆에 앉아서 하는 것이 아니고 반대편에 앉아서 서로 마주보는 식으로 게임을 했다. (유혈사태 방지를 위해.. )
    • 한쪽 게임기에서 버튼을 누르면 반대쪽과 연결이 되어있어서 서로의 입력을 주고받을 수가 있다. 일종의 네트워크 게임이었던 것이다. 온라인 격투 게임의 시초랄까.
  • 게임기 내부에서는 무슨 일이 일어나고 있는 걸까?
    • 내가 버튼을 누르거나 조이스틱을 흔들어대면, 입력된 결과가 컴퓨터에 들어가서 화면에 30~60fpas, 그러니까 초당 30~60장의 이미지가 보여지게 된다. 그러니까 거의 동시에 눌렀어도 한 프레임이라도 먼저 누르는 사람이 먼저 떄리게 되는 것이다.
    • 다시 말해서 같은 입력이 두 대의 컴퓨터에 동시에(매우 가깝기 때문에 전송 속도, 레이턴시 따위는 고려할 필요도 없을 것이다) 들어가는 것이다. 동시에 같은 화면, 같은 결과물을 볼 수 있다.
    • 하지만 같은 결과를 보여주려면 같은 환경에 놓여져야 한다는 조건이 붙는다.
      • 다시 말해서 한 쪽에는 Mac이 깔려 있고, 한 쪽에는 Windows가 깔려있다면 같은 조건이라고는 볼 수 없다.

다시 본론으로 돌아가면

  • Deterministic이라는 것은 같은 입력같은 시간에 들어가면 같은 결과가 보여져야 한다는 것이다.
  • 만약 내가 입력을 눌렀을 때 100ms의 레이턴시가 있다면 어떻게 상대방 화면에 나와 동일한 결과물을 보일 수 있을까?
    • 예를 들어 만약 A 사용자가 100이라는 시간에 펀치를 누르고, B 사용자가 200이라는 시간에 펀치를 눌렀다면, A가 먼저 눌렀기 때문에 A가 B에게 펀치를 먼저 먹일 수 있다는 것은 자명한 상황이다. 양쪽 컴퓨터에서 이렇게 동일한 결과물을 보이게끔 하는 것이 목적이다.
    • 그런데 B까지 도달하는데 150의 시간이 걸린다면, A의 컴퓨터에서는 바로 펀치를 날린 것으로 보여지겠지만, B가 입력을 하는 200이라는 시간에서 B는 아직 A의 펀치를 맞지 않았기 떄문에 B는 자신이 먼저 때렸다고 생각할 것이다. 즉, 처리를 따로 해주지 않으면 서로 다른 결과물이 나온다.
  • 이를 해결하기 위해서 약간의 딜레이를 준다. A가 버튼을 눌렀을 때 바로 화면에서 떄리는 것이 아니라 150 정도의 시간 후에 입력 결과를 보인다. 반면 200에 눌렀던 B의 입력이 350 쯤에 A에 도달할 것인데, 그 사이 250이라는 시간에 A의 공격이 도착하므로 B의 공격 입력은 처리되지 않고 그냥 얻어맞게 된다. A가 먼저 떄렸으니깐.
    • 지연시간만큼 기다려줬을 때, 결과적으로 A가 B를 때린 화면이 양쪽에 동일하게 보여지게 된다.