오늘은 언리얼로 네트워크 게임을 설계하기 위한 기본 개념을 공부해보았다.
온라인 게임의 네트워크 방식
싱크(Sync)
- 동기, 실시간, 리얼타임
- PC 게임에서 주로 사용
어싱크(Async)
- 비동기
- 모바일 게임에서 주로 사용
CAP 이론과 게임의 동기화
CAP 이론
- 분산 시스템의 동기화 “조건 3개를 모두 만족하는 시스템은 없다” 라는 이론
- Consistency(일관성) : 전체 시스템은 동일한 값을 가지고 있어야 함
- Availability(가용성) : 언제든지 시스템에 접근하여 값을 읽고 쓸 수 있어야 함
- Partition Tolerance(분할 용인) : 시스템을 분할하여 병렬처리 등이 가능해야 함
- 여기서 주로 CP or AP로 구성해서 사용함 (-> 네트워크 게임에선 항상 분할이 가능해야하니까 P는 고정으로 가져감)
클라이언트 보간
- 네트워크는 불안정한 전기 신호로 수신됨
- 따라서 클라이언트에서 보간 작업을 수행해줘야함(언리얼은 자동으로 된다고 함?)
CP 방식(가용성 보정)
- 일정 시간동안 이벤트를 모았다가 브로드캐스팅
- 플레이어의 입력을 받음 → 플레이어에게 피드백(송수신간의 Gap을 위장)하면서 서버에 이벤트 전송 → 서버가 브로드캐스팅 → 클라이언트는 서버가 브로드캐스팅한 데이터로 상태 업데이트
AP 방식(일관성 보정)
- 게임 클라이언트를 우선적으로 업데이트하고 후에 일관성을 보정
- 예측과 서버 값이 맞으면 그대로 사용, 틀리면 서버값으로 반영(그래서 응답속도가 낮을 경우 게임 하다가 롤백이나 상대방의 순간이동하는 것처럼 보일 수 있음)
- 플레이어 입력 → RPC 호출 → 서버 브로드캐스팅 → 클라이언트 상태 업데이트
비동기
- 네트워크에서 세션을 유지하기 어려운 모바일 환경 등에서 사용하는 방법으로 “보장된 데이터를 사용”하여 게임 환경을 구축함
- 느리지만 손실 허용이 안되는 TCP 프로토콜 사용
- 이벤트만 서버로 전송하고, 서버는 이벤트 검증하고 결과를 DB에 저장
채팅 서버와 온라인 게임 서버의 유사점과 차이점
- 유사점
- 사용자의 입력을 전체 사용자에게 브로드캐스팅함
- 사용자의 세션을 관리함
- 채널(서버)별로 다른 상태를 가짐
- 채널을 선택하거나 내 아바타를 커스텀하거나 친구 목록을 보는 등의 로비가 있음
- 차이점
- 채팅에서는 사용자를 그래픽으로 나타내지않음
- 게임은 승과 패의 요소가 있지만 채팅은 그렇지 않음
- 채팅은 낮은 Latency를 고려하지 않지만 게임 서버는 클라이언트 예측과 서버 보정을 해야함
마무리 말
서버 개념에 대해 처음 접하는 부분이 많아 아직 제대로 이해하지 못했다.
지금은 개념부터 익숙해지도록 공부하고, 이후에 실습을 통해 자세한 이해를 해야겠다.
'Unreal Engine' 카테고리의 다른 글
[ UE ] 언리얼 멀티플레이어에서 NetMode가 뭘까? (0) | 2025.03.14 |
---|---|
[ UE ] FIntPoint가 뭘까? (0) | 2025.03.12 |
[KPT 회고] HelloWorld TPS 슈터게임 (0) | 2025.03.07 |
[ UE ] 적 공격할 때 카메라 깜빡이는 문제 (0) | 2025.02.28 |
[ UE, C++ ] 오늘 배운 내용 정리 및 애니메이션에 대해 알게 된 꿀팁 (0) | 2025.02.26 |