온라인 게임은 여러명의 사용자가 하나의 콘텐츠(Contents)를 공유하는 게임을 말한다. 장르를 떠나, 크게 보면 실시간과 어싱크 방식 2가지로 나뉘며, 실시간은 온라인 서버(클라우드) 환경과 LAN 파티 환경으로 나뉜다.

싱크 - 동기, 어싱크 - 비동기(주로 모바일 게임)
CAP 이론 이란?
Consistency (일관성)
Availability (가용성)
Partition Tolerance (분할 용인)
초기 온라인 게임은 일관성을 유지하고 “가용성을 포기”해서, 사용자의 입력을 서버로 보내서 일정 시간(Round 또는 Tick : 0.333~X 초)마다 클라이언트로 브로드캐스팅(Broadcasting) 하여 수신 받은 이벤트로 게임 클라이언트의 상태를 업데이트 처리한다.
클라이언트
서버
클라이언트 A, B
서버
클라이언트 A, B 업데이트
⇒ 빠른 반응 속도가 필요 없을 때 비교적 쉽게 구현 가능.

이후에 다수의 사용자가 게임을 동시 실행하는 MMO, FPS, Sports 와 같이 반응성이 우선인 게임 장르의 경우 기본적인 캐릭터의 이동 등은 Round (또는 Tick)을 짧게 브로드캐스팅(Broadcasting)하고, 실시간 으로 별도의 채널을 통해 다중 브로드캐스팅 방식으로 진화해옴.
아래 그림은 Tick/Round로 기본정보 (Transform 위치, 회전 등의 정보)를 주기적으로 보내면서 추가적으로 이벤트를 보내는 동작을 나타냄.
⇒ 사용자가 컨트롤(Control)하고 있는 클라이언트를 먼저 업데이트하기 때문에 가용성을 우선하고, 일관성은 포기.
가용성을 포기하고 일관성을 우선으로 하는 CP (또는 PC)설계의 대표적인 게임이 스타크래프트로, 만약 게이머가 “마린”을 움직였다고 가정해 보자.
1. 마우스를 클릭한다.
2. 게이머에게 피드백하면서, 서버에 이벤트를 전송한다.
3. 서버가 브로드캐스팅한 데이터로 클라이언트가 상태를 업데이트 한다.
이때 플레이어가 입력한 이벤트 시간과 서버에서 오는 데이터를 수신하는 시간 간의 Gap이 발생한다.
그래서 옛 게임들은 클라이언트 업데이트 이전에 플레이어에게 사운드나 이펙트로 줘서 기다리는 시간이 없는 것처럼 위장했다.

일관성을 포기하고 가용성을 우선으로 하는 AP(PA) 설계의 대표적인 게임 최근에 등장하는 게임들은, 게임 클라이언트를 우선 업데이트하고, 후에 일관성을 보정하는 방법을 사용한다.
이 때문에 응답속도(Latency)가 낮을 경우 게임을 하다 보면 뒤에 잘 숨었는데 뒤늦게 죽는 경우나, 갑자기 캐릭터가 뒤로 가는 경우 등이 발생

일반인들의 상식과는 다르게 네트워크는 강하게 결합되어 있지 않으며, 불안정한 전기 신호이다.
따라서, 1/20 초 마다 브로드캐스팅되는 데이터가 클라이언트에서 1/20초 마다 도달한다고 생각하면 문제가 사용자경험(UX)에 좋지 않은 영향을 주기 때문에 클라이언트에서는 보간을 한다. (Unreal은 자동)

1️⃣ 서버 데이터 수신
2️⃣ 클라이언트 버퍼링
3️⃣ 보간 계산
4️⃣ 렌더링