본문으로 바로가기
728x90
반응형
728x170

TCP와 UDP를 통해 어떻게 전송을 하는지를 알아보았다면 이번에는 그 데이터를 어떻게 처리할 것인지에 대해 알아보도록 하겠습니다.

 

이 부분에서도 크게 두가지 방식으로 나뉘는데요.

  • Deterministic
  • server Authority

실제로 UDP를 쓰는 부분에는 Deterministic를, TCP를 쓰는 부분에서는 server Authority를 많이 씁니다.
왜 그렇게 됐는지는 모르겠지만 보통 보면 이런 형태를 나타내고 있습니다.
Deterministic는 반응성이 좋은 게임에 많이 쓰고, server Authority는 서버 권한이 필요한 경우에 많이 써서 MMORPG에 많이 쓰죠.

하지만 엄밀히 따지면 UDP와 TCP와 저 둘의 관계는 없습니다.

 

우선 첫번째로 Deterministic에 대해 알아보죠!

직역하면 결정적인, 결정되어진, 이미 결정되어 있다의 의미로 해석할 수 있습니다.

예를 들어보면 A와 B가 오락실에서 마주보며 대전 게임을 같이 할 때 A가 버튼을 눌렀을 때 이 입력이 A의 오락기에 가게 되고, 그 입력을 그대로 B의 오락기에 날려줍니다.

이 때 A오락기와 B오락기는 다른 기계지만 같은 입력이 같은 시간에 두 개의 오락기에 동시에 들어가는 것입니다.

이 때의 결과는 같다고 가정할 수 있습니다. 같은 입력이 들어가면 결과는 같습니다.

물론 이 결과가 같으려면 같은 환경이라는 가정이 있어야 합니다.

아까 오락실로 예를 들었는데 엄밀히 따지면 A의 오락기에 나오는 이미지와 B의 오락기에 나오는 이미지는 완전 다른 이미지이지만 입력이 같기 때문에 똑같은 이미지가 그려지는 것입니다.

그래서 Deterministic은 이 방식을 그대로 가져온 것입니다. 이미 입력이 결정되어 있기 때문에 결과는 같아야 한다는 것입니다.

그래서 관건은 같은 입력을 같은 시간에 어떻게 넣을것이냐?입니다.

내 입장에서는 바로 입력이 되지만 상대방 컴퓨터에는 지연시간(latency)가 걸립니다. 그래서 이 지연시간을 어떻게 극복해서 같은 시간에 넣을 것인지가 중점이죠.

그래서 이것을 잘 해결 한다면 같은 게임을 만들 수 있습니다.

 

예를 들어보면 두 사람이 격투게임을 하고 있다 가정해보죠.
한 플레이가 펀치버튼을 눌렀고, 다른 플레이어는 다른 곳에서 펀치버튼을 눌렀습니다.

그랬을 경우에 이 사람이 누른 시간이 위의 사진과 같다고 했을 때 A라는 사람은 100, B라는 사람은 200이라는 타임라인에 눌렀다고 가정하면 100 A, 200 B 라는 입력이 두 컴퓨터에 똑같이 들어가면 A가 빨리 눌렀다고 해서 빨리 적용되는 것이 아니라 어떤 처리를 거쳐서 상대방의 입력도 공평하게 똑같이 입력이 처리가 된다면 100 A, 200 B라는 입력이 들어갔을 때 결과는 두 컴퓨터에서 똑같이 나올 수 있습니다. 그렇게 되면 두 컴퓨터 모두 A가 때리고 B가 맞는 결과가 나올 것입니다.

 

그런데 이게 지켜지지 않으면 어떤 결과가 일어날지 생각을 해보죠
두 컴퓨터가 있고, 펀치버튼을 눌렀고, A는 1시에 B는 2시에 눌렀고, A가 눌러서 가는데 1시간50분이 걸린다 했을 때 A는 1시에 눌렀기 때문에 A의 컴퓨터엔 바로 적용이 됩니다.
그리고 A의 입력은 1시간 50분에 걸쳐 날아가게 되서 2시에 맞는게 적용이 되고, B는 2시에 날렸기 때문에 B가 누른 펀치도 3시 50분 되서야 A에게 날라옵니다.

그러니까 이게 어떻게 되는 거냐면 B쪽에서는 A가 3시에 맞는 결과가 나오고 A쪽에서는 B가 2시에 맞는 결과가 나옵니다.

같은 처리를 안했기 때문에 서로 다른 결과가 나온 것입니다.

그래서 1시간 50분 만큼의 지연시간을 서로 기다려 줄 경우 서로 똑같은 결과를 만들어 낼 수 있는데 이게 바로 Deterministic 방식입니다.

  Deterministic 방식 server Authority 방식
용도 1. 반응성이 좋은 게임에 사용됨.
2. UDP를 쓰는 부분에 많이 쓰이나 서로 관계는 없다.
1. 서버 권한이 필요한 경우에 많이 쓰는데 보통 MMORPG에 많이 사용.
2. TCP를 쓰는 부분에서 많이 쓰이나 서로 관계는 없다.
특징 1. 같은 시간에 같은 입력이 들어가면 결과는 같다.
2. 지연시간(latency)을 어떻게 극복할 것인가?가 관건임.
 

 

깃허브 주소 : github.com/ckdqja135/Typescript-restful-starter/blob/master/mdfile/Networking/2020-10-16/Deterministic%EB%B0%A9%EC%8B%9D.md

 

ckdqja135/Typescript-restful-starter

Contribute to ckdqja135/Typescript-restful-starter development by creating an account on GitHub.

github.com

728x90
반응형
그리드형

댓글을 달아 주세요