컴퓨터구조(CS)

[CS] 네트워크 #2

2h1824 2025. 3. 11. 20:01

온라인 게임의 종류

  • 싱크(Sync): 동기, 실시간
    1. 온라인 서버(클라우드)
    2. LAN 파티
  • 어싱크(Async): 비동기

CAP 이론

  • Consistency(일관성): 공유되는 데이터가 동일한 상태를 보장
  • Availability(가용성): 데이터에 접근하여 언제든 Read, Write 가능
  • Partition Tolerance(분할 용인): 시스템이 분할되어 병렬 처리 가능

* 일관성을 추구 ㅡ> 가용성, 분할 용인 중 하나는 포기

ex) 사용자가 컨트롤 중인 클라이언트 먼저 업데이트 ㅡ> 가용성 우선, 일관성 보장 X

게임에서의 동기화

초기의 게임

  1. 클라이언트 ㅡ> 서버 접속
  2. 서버 ㅡ> 모든 클라이언트가 접속하면 게임 시작(상태 초기화)
  3. 클라이언트 ㅡ> 이벤트 발생(이동,공격 등)
  4. 서버 ㅡ> 이벤트 수집 ㅡ> Round(or Tick)마다 브로드캐스팅(모든 클라이언트에게 전달)
  5. 클라이언트 ㅡ> 상태 업데이트

* 4번에서 알 수 있듯이 Round만큼 딜레이가 생기기 때문에 빠른 반응속도를 요하는 게임에는 부적합

ㅡ> 따라서 빠른 반응속도를 요하는 FPS, MMO와 같은 장르들에서는 빠른 반응속도를 필요로 하는 캐릭터의 이동과 같은 부분에서 Round를 짧게 브로드캐스팅하고, 실시간으로 별도의 채널을 통해 다중 브로드캐스팅하는 방법으로 해결

가용성 보정

CP설계: 가용성 포기, 일관성 우선

CP설계의 동기화 흐름

  1. 이벤트 발생
  2. 게이머에게 피드백(사운드나 이펙트로 Delay를 숨김)
  3. 서버에 이벤트 전송
  4. 서버가 브로드캐스팅한 데이터로 클라이언트 업데이트
  • 즉, 이벤트가 발생하고 서버에서 브로드캐스팅을 하기 전까지는 클라이언트에서 상태 업데이트 X
    ㅡ> 그렇기 때문에 클라이언트에게 사운드나 이펙트로 효과를 연출해 상태 변화가 일어나기까지의 시간을 버는 느낌
  • 턴제 게임에 적합 ㅡ> 플레이어의 턴이 끝날때까지 다른 플레이어의 입력은 없기 때문
  • 스타크래프트와 같은 게임은 일정 시간 동안의 이벤트를 모았다가 브로드캐스팅하는 방식이라고 함
  • 서버와 클라이언트의 값이 항상 같음 ㅡ> 일관성 보장
  • But, 클라이언트의 상태 값은 서버에서 변경된 값을 브로드캐스팅할 때만 변경 ㅡ> 가용성 포기

일관성 보정

AP설계: 가용성 우선, 일관성 포기

AP설계의 동기화 흐름

  1. 이벤트 발생
  2. 게이머에게 피드백(사운드, 이펙트 및 예측한 값으로 미리 상태 업데이트 반영)
  3. 서버에 이벤트 전송
  4. 서버가 브로드캐스팅한 데이터와 예측값 비교
    1. 예측이 맞으면 그대로
    2. 예측이 틀렸다면 서버가 브로드캐스팅한 값으로 반영
  • CP와 달리 클라이언트에서 예측한 값을 토대로 미리 상태가 업데이트되고, 후에 서버에서 브로드캐스팅된 값과 비교하여 예측이 다른 경우 서버에서 온 데이터로 반영
  • 결과적으론 CP설계에 비해 반응성이 향상
  • But, 클라이언트와 서버의 값이 같다는 일관성을 보장하지 못함

클라이언트 보간(Interpolation)

  • 네트워크는 불안정한 전기 신호를 주고 받음
  • 결과적으로 서버에서 1/20초 마다 브로드캐스팅되는 데이터가 클라이언트에 1/20초 마다 도달한다는 보장X
  • 불규칙적으로 오는 값들을 그때그때 반영한다면 사용자경험에 좋지 못함
  • 이를 클라이언트에서 보간 (Unreal은 자동)

클라이언트 보간의 흐름

  1. 서버 데이터 수신: 서버에서 일정 시간마다 캐릭터 위치 클라이언트에 전송
  2. 클라이언트 버퍼링: 도착한 데이터를 바로 반영하지 않고 버퍼에 저장
    ㅡ> 네트워크 지터(Network Jitter) 보정 및 보간에 사용할 데이터 확보
  3. 보간 계산: 현재 위치와 서버로부터 받은 캐릭터의 위치 값을 이용해 특정 시점의 두 위치 사이의 보간된 위치 값 계산
  4. 렌더링: 매 프레임마다 보간된 위치를 화면에 반영
    ㅡ> 네트워크 지연 해결, 매끄러운 애니메이션

비동기(Async)

  • 네트워크 세션 유지가 어려운 모바일 환경에서 사용
  • 보장된 데이터 사용
    ㅡ> 이를 위해 TCP 사용 (속도보단 안정성이 중요)
  • 이벤트만 서버로 전송 ㅡ> 서버는 이벤트를 검증 ㅡ> 그 결과를 DB 저장

* 게임 플레이어 외에 다른 플레이어의 접속 여부와 상관없이 게임 진행 가능

 


참고자료

https://onduway.tistory.com/106

 

CAP 이론 소개 - 데이터베이스 초보자용

밑에 세줄요약 있음 살펴보기 CAP 이론이란? MongoDB의 CP 시스템과 Cassandra의 AP 시스템 CAP란? 분산 데이터베이스는 방대한 데이터를 다루기에 유용한 시스템이다. 분산 데이터베이스는 수평 확장할

onduway.tistory.com

https://etloveguitar.tistory.com/159

 

[분산 시스템] CAP 이론 제대로 이해하기 (CAP Theorem) (CAP에 대한 오해를 풀어보자)

NoSQL을 공부하다보면 가장 많이 접하게 되는 단어 중 하나가 CAP이다. 아무래도 NoSQL 스토리지들이 분산 시스템으로 동작하다보니, 이들을 이해하기 위해서는 꼭 알아두어야 할 개념이기 때문이

etloveguitar.tistory.com

https://cocoa106.tistory.com/entry/%EC%98%A8%EB%9D%BC%EC%9D%B8-%EA%B2%8C%EC%9E%84%EC%9D%98-%EC%9D%B4%EB%8F%99%EC%B2%98%EB%A6%AC-%EA%B8%B0%EB%B2%95-%EB%8D%B0%EB%93%9C-%EB%A0%88%EC%BB%A4%EB%8B%9D-2-%EB%B3%B4%EA%B0%84-%EC%B2%98%EB%A6%AC

 

온라인 게임의 이동처리 기법 - 데드 레커닝 2편 (보간 처리)

지난번 글에서 데드 레커닝에 대한 개념에 대해 알아보았습니다. 2010.11.05 - [프로그래밍/서버] - 온라인 게임의 이동처리 기법 - 데드 레커닝 무려 13년 전쯤(...) 작성했던 글인데요 생각보다 읽어

cocoa106.tistory.com