유니티/네트워크

[#1 유니티 네트워크 이론]

D-coding 2021. 12. 19. 09:08

내트워크상에서 클라이언트의 게임 월드는 평행우주처럼 동작한다.

 

 

클라이언트란 서버에 접속하여 서비스를 제공받는 단말기(컴퓨터), 프로그램, 사용자를 뜻한다.

 

 

A, B, C, D가 인터넷또는 사설 네트워크로 같이 게임을 할때

 

 

A의 컴퓨터에서 돌아가는 게임과 B의 컴퓨터에서 돌아가는 게임을 구성하는 오브젝트와

 

 

실행되는 코드들은 서로 다르다 A의 컴퓨터에서 실행되는 게임의 오브젝트가 2개

 

 

B의 컴퓨터에서 실행되는 게임의 오브젝트가 2개면

 

 

A와 B입장에서는 오브젝트가 2개인 것 처럼 보이지만

 

 

사실 각각 다른 오브젝트로 총 4개가 존재하는 것 이다.

 

 

그리고 A의 게임속에 존재하는 B는 B처럼 생긴 오브젝트일 뿐 같은 오브젝트는 아니다.

 

 

즉 동일한 상태로 만들기위해 동기화를 해야하는데 동기화는

 

 

네트워크 연결이 유지되고 있는 동안만 된다.

 

 

-----------------------------------------------------------------------------------

 

 

네트워크 이론에서 로컬리모트는 반대의 의미를 가진다.

 

 

로컬은 물리적으로 사용자의 위치에 있는 단말기, 프로그램, 오브젝트를 표현하는 단어다.

 

 

만대로 리모트는 원격 접속을 통해 접근할 수 있는 단말기나 프로그램, 오브젝트를 표현하는 단어다.

 

 

즉 자신이 주도권을 가지면 로컬, 주도권이 네트워크 너머의 타인에게 있으면 리모트다.

 

 

로컬 오브젝트는 자신의 게임 월드에서 생성된것이고 주도권이 자신에게 있다.

 

 

반대로 리모트 오브젝트는 타인의 게임 월드에서 생성되어 네트워크를 통해 같은 형태로 복제 생성이 된 것 이다.

 

 

즉 플레이어 자신은 리모트 오브젝트를 삭제하거나 변경할 수 없다.

 

 

-----------------------------------------------------------------------------------

 

 

A가 자신의 게임 월드에서 로컬 오브젝트인 자신의 캐릭터 a를 움직였다고 하자.

 

 

그러면 B, C, D의 게임 월드에 있는 리모트 오브젝트 a도 움직여야한다.

 

 

하지만 A기준에서 로컬 오브젝트 a와 B, C, D기준에서 리모트 오브젝트 a는 각각 다른 오브젝트이므로

 

 

특별이 변경되지 않는다.

 

 

그래서 A에 게임 월드에서 변경된 a의 위치를 B, C, D의 게임 월드로 동기화 신호를 전달해주어야 한다.

 

 

이렇게 동기화를 끊임없이 진행해야 A, B, C, D의 게임 월드 모두 변경된 a의 위치를 볼 수 있다.

 

 

그런데 D의 인터넷 속도가 느려서 동기화 간격이 상대적으로 느려지면 4개의 게임월드의 모습이 조금씩

 

 

달라질 수 있다.

 

 

-----------------------------------------------------------------------------------

 

 

A가 입력을 하면 A의 게임 월드에 있는 a, b, c, d 오브젝트가 입력된 정보를 받을 수 있다.

 

 

그런데 입력된 정보는 로컬 오브젝트인 a에만 반영되어야만 한다.

 

 

그러므로 코드에서 if문을 사용해 이 오브젝트가 플레이어의 로컬 오브젝트인지 판단하는

 

 

조건문으로 검사해야 한다.

 

 

-----------------------------------------------------------------------------------

 

 

일반적으로 네트워크 기반 게임은 대기 중인 서버에 클라이언트들이 참가하는 서버-클라이언트 방식으로 동작한다

 

 

서버는 클라이언트들이 참가할 수 있는 네트워크 공간을 마련하는 컴퓨터이며 호스트라고 부르기도 한다.

 

 

클라이언트는 서버에 참가하여 게임을 플레이하는 컴퓨터이다.

 

 

서버는 고정된 네트워크 공간을 마련하는 것뿐만 아니라 게임 내에서 여러 상호작용 연산도 담당한다.

 

 

서버-클라이언트 방식은 대부분

  • 전용 서버(Dedicated Server)
  • 리슨 서버(Listen Server)
  • P2P(Peer-to-Peer)

와 같은 방식으로 구현된다.

 

 

전용 서버

 

전용 서버는 모든 자원이 온전히 네트워크 서비스를 유지하는 데 사용되며 서버가 플레이어로서 게임에 직접 참가하지 않는 형태이다.

 

 

장점으로는 언제든지 서버에 참가 가능하며 고정된 고성능 서버를 제공해 쾌적한 환경에서 게임을 즐길 수 있는 것이다.

 

 

하지만 단점은 다른 방식에 비해 고정비용이 많이 든다.

 

 

리슨 서버

 

리슨 서버는 전용 서버가 없는 대신 클라이언트 중 하나가 서버 역할을 맡는다.

 

 

이러한 특성때문에 리슨 서버 방식을 'Play as Host'라고 부르기도 한다.

 

 

그리고 서버 역할을 맡은 클라이언트를 방장, 호스트, 마스터 클라이언트 등으로 부른다.

 

 

장점은 전용 서버에 비해 서비스 유지비용이 적고 물리적으로

 

 

가까이 있는 플레이어들끼리는 네트워크 반응 속도가 전용 서버보다 빠를 수 있다.

 

 

단점은 호스트 플레이어의 컴퓨터 성능에 따라 네트워크 품질이 크게 달라지고

 

 

호스트가 게임을 종료할 경우 진행 중인 게임을 일시 정지하고

 

 

남은 클라이언트 중에서 새로운 호스트를 선정하는 절차가 필요하다.

 

 

P2P

 

P2P 방식은 게임에 참가한 모든 클라이언트들이 호스트 역할을 한다.

 

 

일반적으로 호스트의 연산 부담이 큰데 P2P는 연산을 독점하는 호스트가 없다.

 

 

즉 클라이언트가 각자 자신의 월드에서 자신의 담당 연산을

 

 

실행하고 다른 클라이언트에 결과를 전파한다.

 

 

또한 호스트를 교체하는 과정이 필요 없어진다.

 

 

서버가 필요 없으므로 유지비용도 발생하지 않고

 

 

클라이언트끼리 직접 연결되어 있어 클라이언트 수가 적은 경우에 한해서

 

 

다른 방법보다 네트워크 반응 속도가 빠르다.

 

 

하지만 클라이언트가 늘어날 수록 속도가 느려져 16명을

 

 

참가자 상한선으로 여긴다.

 

 

또 중요한 연산과 데이터를 관리하는 호스트가 없어 수치 위조가 비교적 쉽다.

 

 

-----------------------------------------------------------------------------------

 

이렇게 정리할 수 있다.

 

 

 

이렇게 기본 개념을 살펴보고 다음에는 어떻게 사용하는지 알아보자.

 

 

그럼 20000