오늘은 언리얼로 네트워크 게임을 설계하기 위한 기본 개념을 공부해보았다.

 

온라인 게임의 네트워크 방식


싱크(Sync)

  • 동기, 실시간, 리얼타임
  • PC 게임에서 주로 사용

 

 어싱크(Async)

  • 비동기
  • 모바일 게임에서 주로 사용

 

 

CAP 이론과 게임의 동기화

CAP 이론

  • 분산 시스템의 동기화 “조건 3개를 모두 만족하는 시스템은 없다” 라는 이론
  • Consistency(일관성) : 전체 시스템은 동일한 값을 가지고 있어야 함
  • Availability(가용성) : 언제든지 시스템에 접근하여 값을 읽고 쓸 수 있어야 함
  • Partition Tolerance(분할 용인) : 시스템을 분할하여 병렬처리 등이 가능해야 함
  • 여기서 주로 CP or AP로 구성해서 사용함 (-> 네트워크 게임에선 항상 분할이 가능해야하니까 P는 고정으로 가져감)

 

 

클라이언트 보간
  • 네트워크는 불안정한 전기 신호로 수신됨
  • 따라서 클라이언트에서 보간 작업을 수행해줘야함(언리얼은 자동으로 된다고 함?)

 

CP 방식(가용성 보정)

  • 일정 시간동안 이벤트를 모았다가 브로드캐스팅
  • 플레이어의 입력을 받음 → 플레이어에게 피드백(송수신간의 Gap을 위장)하면서 서버에 이벤트 전송 → 서버가 브로드캐스팅 → 클라이언트는 서버가 브로드캐스팅한 데이터로 상태 업데이트

 

AP 방식(일관성 보정)

  • 게임 클라이언트를 우선적으로 업데이트하고 후에 일관성을 보정
  • 예측과 서버 값이 맞으면 그대로 사용, 틀리면 서버값으로 반영(그래서 응답속도가 낮을 경우 게임 하다가 롤백이나 상대방의 순간이동하는 것처럼 보일 수 있음)
  • 플레이어 입력 → RPC 호출 → 서버 브로드캐스팅 → 클라이언트 상태 업데이트

 

 비동기

  • 네트워크에서 세션을 유지하기 어려운 모바일 환경 등에서 사용하는 방법으로 “보장된 데이터를 사용”하여 게임 환경을 구축함
  • 느리지만 손실 허용이 안되는 TCP 프로토콜 사용
  • 이벤트만 서버로 전송하고, 서버는 이벤트 검증하고 결과를 DB에 저장

 

 

채팅 서버와 온라인 게임 서버의 유사점과 차이점
  • 유사점
    • 사용자의 입력을 전체 사용자에게 브로드캐스팅함
    • 사용자의 세션을 관리함
    • 채널(서버)별로 다른 상태를 가짐
    • 채널을 선택하거나 내 아바타를 커스텀하거나 친구 목록을 보는 등의 로비가 있음
  • 차이점
    • 채팅에서는 사용자를 그래픽으로 나타내지않음
    • 게임은 승과 패의 요소가 있지만 채팅은 그렇지 않음
    • 채팅은 낮은 Latency를 고려하지 않지만 게임 서버는 클라이언트 예측과 서버 보정을 해야함

 

 

마무리 말

서버 개념에 대해 처음 접하는 부분이 많아 아직 제대로 이해하지 못했다.

지금은 개념부터 익숙해지도록 공부하고, 이후에 실습을 통해 자세한 이해를 해야겠다.