#5. 게임 네트워크

게임 서버 프로그래밍/게임 서버 프로그래밍 교과서

2020. 2. 17. 16:04

5.게임 네트워킹

게임 네트워킹


1. UML
  • UML 시퀀스 다이어그램

    • 구성요소

      • 객체

        네모상자

      • 메시지

        가로 화살표

    • 주요 용도

      객체 간 미시징 흐름을 일목요연하게 표현하는 것

      거시적인 흐름을 표현할 때 사용

    • 장점

      객체 사이에 메시지를 주고받는 것을 하눈에 알아보기 쉽게 표현 가능하다

    • 단점

      주고받은 메시지를 어떻게 처리하는지 자세하게 표현하는데 한계가 있다

  • 액티비티 다이어그램

    • 구성요소

      • 실린더 도형

        활동상태를 의미한다

      • 화살표

        실행흐름을 표현한다

      • 분기문

        화살표가 한 두가지 이상으로 뻗어나갈 수 있다

    • 주요용도

      세부적인 로직을 표현해야 할 때 사용

    • 장점

      시퀀스도가 표현하기 어려웠던 부분도 표현할 수 있다

    • 단점

      시퀀스도보다 일목요연하지 못하다

2. 게임 플레이 네트워킹
  • 사용이유

    게임 클라이언트에서 모든 연산은 해킹 위협에 노출될 수 있다

  • 종류

    • 모든 역할을 서버에서 하기

      • 클라이언트가 하는 일

        • 사용자 입력
        • 화면 출력
      • 서버가 하는 일

        클라이언트가 하는 일을 제외한 모든 연산

      • 문제점

        렌더링과 게임 로직을 모두 서버에서 담당하기는 무리다

    • 렌더링은 클라이언트에서 하기

      • 클라이언트가 하는 일

        • 렌더링
      • 서버에서 하는 일

        • 월드 상태의 연산
        • 서버와 클라이언트의 씬을 동기화
      • 지속성 이벤트

        씬의 상태에 영구적 변화를 가하는 것

      • 단발성 이벤트

        씬의 변화에 영향을 잠깐 주고 사라지는 것(ex 수류탄)

        미래가 클라이언트와 서버 간에 서로 약속된, 결정적인 경우에는

        지속성 이벤트보다 단발성 이벤트가 더 효과적

      • 장점

        앞의 방식보다 효율적이다

      • 단점

        • 서버와 클라이언트 사이에 레이턴시가 1/60초보다 훨씬 낮아야한다
        • 레이턴시가 항상 균일해야 한다
      • 해결방법

        • 월드 변화를 1/60초 보다 느리게 전송

          캐릭터 움직임이 딱딱해 진다

        • 상태값 보정

          • 서버에서 받는 상태 변화 메시지를 즉시 반영하는 것이 아니라, 일정 시간에 걸쳐서

            서서히 목적 상태로 변화하게 하는 것

          • 선형보간 , 스플라인을 이용

  • 추측항법

    • 정의

      상대방 움직임을 어느 정도 예상해서 그 위치로 갈 수 있게 보정시키는 방법

      두 기기 간의 레이턴시를 알아야 함

    • 사용이유

      상태값 보정을 통한 해결방법도 결국 우리가 원하는 결과값이 아님

    • 라운드 트립 레이턴시

      레이턴시를 측정하는 방식

      • 기기 A에서 B로 패킷을 보냄
      • 기기 B는 이를 받으면 기기 A에 패킷을 보냄
      • 기기 A는 1과정의 시간과 현재 시간의 차이를 구하여 2로 나눔
  • 레이턴시 마스킹

    • 사용 이유

      • 결국 레이턴시를 완전히 없앨 수 없다
      • 플레이어의 입력 명령이 서버를 거쳐 다시 도착할 때까지 시간이 걸림
      • 쾌적하지 못한 게임 환경
    • 종류

      • 사소한 것들은 클라이언트에서 판단하기

        캐릭터 위치 계산을 클라이언트에서 판단하고, 클라이언트는 판단 결과

        를 서버에 보내주는 방식

        • 장점

          쾌적한 게임 환경 제공

        • 단점

          해킹의 문제(ex 이동속도값을 엄청 증가시키는 방식)

        • 해결방법

          서버는 클라이언트의 정보를 받아서 유효성 검사를 해야한다

      • 보여 주고 나중에 얼렁뚱땅하기

        • 행동 명령에 대한 메시지를 서버에 보낸다. 동시에 행동을 연출하는 일부

          모습을 클라이언트에서 즉시 시작한다

        • 플레이어 캐릭터에 가해야 하는 행동을 클라이언트에 메시지로 보낸다

        • 클라이언트는 이 메시지를 받으면 연출해야 하는 나머지 부분들을 클라이

          언트에서 보여주기 시작한다

        • 장점

          사람들은 심리적으로 이러한 방식을 선호한다

3.넓은 월드, 많은 캐릭터 처리
  • 사용이유

    게임 월드 안에 캐릭터 수가 너무 많으면 통신량이 증가함

  • 가시 영역 필터링

    서버가 가진 월드 전체 상태 중에서 변화하는 것 모두를 플레이어에게 보여 줄 필요가 없음

    • 서버가 가져야 하는 목록

      • 플레이어 각각에 대해서 각 플레이어가 볼 수 있는 목록
      • 캐릭터 각각에 대해서 자기 자신을 볼 수 있는 플레이어 목록
    • 장점

      사용하지 않았을 때 보다 처리량 부담 빛 네트워킹 부담과 비교하면 훨씬 가볍다

4. 실시간 전력 시뮬레이션 게임에서 네트워크 동기화
  • 사용이유

    캐릭터 수가 많아질수록 통신량이 늘어남

  • 락스텝 동기화 알고리즘

    누군가가 신호를 주면 그 신호에 맞추어 모두가 똑같은 행동을 하는 것

    같은 상태에 같은 입력을 주면 같은 결과가 나온다는 원리를 응용(Deterministic)

    • 장점

      • 입력 명령만을 주고 받는다
      • 통신량이 상대로 매우 적다
    • 단점

      • 컴퓨터 간 통신 레이턴시가 거의 없을 때 완벽하게 동작
    • 해결방법

      • 언제 실행해야 하는지에 대한 미래 시간을 함께 보낸다

        미래시간 = 현재시간 + 왕복 레이턴시/2 + 임의의 일정 값

    • 아주 많은 단점!

      • 부동소수점을 쓸 수 없음 (하드웨어 종류마다 차이가 남)
      • 플레이어수가 많아지기 어려움(플레이어 수에 비례해서 통신량 증가)
      • 가시영역 필터링 사용 어려움
      • 씬 업데이트가 일시정지 할 확률 높음
      • 입력 명령의 속도에 민감한 게임에 부적합
5. 실제 레이턴시 줄이기
  • TCP대신 UDP 사용

    • 사용이유

      • TCP는 패킷 유실시 캐릭터 움직임이 튀는 현상 발생
      • 똑같은 양의 데이터를 보낸다 해도 가급적 적은 수의 패킷으로 보내는 게 좋음
  • C/S + P2P 혼용

    • 중요한 연산은 C/S 네트워킹과 서버 연산 처리
    • 덜 중요한 연산은 P2P 네트워킹과 클라이언트 연산으로 처리
    • 두 클라이언트는 서로 가깝지만 서버는 멀리 있을 때 효과적
6. 게임 플레이 이외의 네트워킹

온라인 게임을 개발할 때는 컴퓨터 간에 어떤 대화가 오가는지 순서를 미리 문서화 해놓자

  • 매치메이킹

    나와 실적이 비슷한 플레이어들을 모아서 같이 게임 플레이를 할 수 있는 공간을 생성

  • 플레이어가 수동으로 방을 만들고 들어가는 방식

    • 방 만들기 혹은 들어가기 정보는 클라이언트에서 판단 말고 서버에서 판단
    • 클라이언트는 일방적으로 판단 말고, 서버에 요청하여 그 결과에 따라서 행동
    • 방 목록이나 방 안의 플레이어 목록이 변할 때 클라이언트는 그 변화를 통보받을 것
  • 게임 로직에서 서버-클라이언트 규칙

    • 클라이언트에서는 요청을 보낸다
    • 서버는 그 요청을 받아 결과를 판단한다
    • 요청 결과에 영향을 받을 다른 클라이언트가 서버에 있으면 그 클라이언트에 통보한다
7. 해킹과 보안
  • 해킹의 종류

    • 크래킹

      다른 사람의 ID와 비밀번호를 도용하거나 비밀 정보를 보는 것

    • 치트

      내 능력치를 비상적으로 높이거나 다른 사람의 플레이를 망가뜨리는 것

  • 네트워크 해킹

    • 암호화

      • 암호 키를 이용해서 암호화

        • 대칭 키 알고리즘 (AES)
        • 비대칭 키 알고리즘 (RSA)
  • 서버 컴퓨터 해킹

    • 게임 서버에는 일반적인 유저가 접속할 수 있는 리스닝 포트를 제외하고

      모두 방화벽으로 막아야 한다

    • 데이터베이스처럼 일반적인 유저가 접속할 일이 없는 서버에는 아예 일반

      유저가 접속조차 할 수 없게 방화벽으로 막는것이 좋다.