온라인 게임과 네트워크 구성

2025. 3. 13. 16:19·CS

1. 온라인 게임의 종류


1 - 1. 싱크

  • 동기화, 실시간, 리얼타임
  • 온라인 서버 방식과 LAN 파티 방식으로 나뉨

1 - 2. 어싱크

  • 비동기

 

 

2.  CAP 이론과 게임의 동기화


2 - 1. CAP 이론

  • "분산 시스템의 동기화 조건 3개를 모두 만족하는 시스템은 없다"라는 이론

2 - 2. 분산 시스템의 동기화 조건

  • Consistency (일관성) : 전체 시스템은 동일한 상태 값을 가지고 있어야 함
  • Availability (가용성) : 언제든지 시스템에 접근하여 값을 읽고 쓸 수 있어야 함
  • Partition Tolerance : 시스템을 분할하여 병렬처리 등이 가능해야 함

 

 

3. 게임에서의 동기화 방법


게임 동기화에서 Partition Tolerance의 부분은 절대 포기할 수 없는 부분이기 때문에 나머지 두개 중 하나를 포기하는방법으로 동기화를 시킨다.

 

3 - 1. 초기의 온라인 게임

  • 일관성을 유지! (가용성을 포기)
  • 사용자의 입력을 서버로 보낸 후, 일정시간 마다 클라이언트로 브로드캐스팅하여 수신받은 이벤트로 클라이언트의 상태 업데이트
  • 즉, 클라이언트의 입력을 서버로 보내면 서버는 해당 정보들을 가지고 있다가 일정 tick 이후에 브로드캐스팅해서 클라이언트 모두가 같은 값을 가지도록 한다
  • 단점은 빠른 응답속도가 필요한 게임에서는 이 방식을 쓸 수 없다.

이 방식을 개선하기 위해서..

  • 반응성이 우선인 게임의 경우 캐릭터의 이동 등은 짧은 tick을 통해 브로드캐스팅 하고,
  • 실시간으로 별도의 채널을 이용하여 다중 브로드캐스팅 하는 방식을 사용

3 - 2. 가용성 보정 (CP 설계)

  • 일관성을 유지
  • 대표적인 예시는 스타크래프트
    • 마우스 클릭
    • 게이머에서 클릭에 대한 피드백을 줌(소리), 서버에 이벤트 전송
    • 서버가 이벤트들을 모아서 브로드캐스팅 한 데이터로 클라이언트 상태 업데이트
  • 카드 게임은 플레이어의 입력이 끝날 때 까지 다른 플레이어의 입력을 차단 하는 방식으로 동작

3 - 3. 일관성 보정 (AP 설계)

  • 가용성을 유지
  • 최근 게임이 사용하는 방식
    • 클라이언트(A)에서 발생한 이벤트를 서버로 보냄
    • 해당 내용을 서버가 처리 후 클라이언트(A)에게 브로드캐스팅하여 유효성 체크
    • 유효성 체크 후, 
      • 문제가 없으면 나머지 클라이언트(B, C) 에게 브로드캐스팅
      • 문제가 있으면 클라이언트 A를 서버값으로 보정 후 클라이언트(B, C)에게 브로드캐스팅
    • 응답 속도가 낮은 경우, 뒤늦게 죽는 경우나 캐릭터가 갑자기 뒤로 가는 등의 문제가 발생

 

 

4. 클라이언트 보간


네트워크는 강하게 결합되어있지 않아서 보간을 통해 사용자에게 어색함을 주지 않도록 노력한다.

언리얼 엔진은 자동으로 해준다...!

 

동작 방식

  • 서버 데이터 수신
    • 서버는 클라이언트에게 캐릭터의 위치를 전송
  • 클라이언트 버퍼링
    • 클라이언트는 서버가 준 값을 바로 렌더링 하지 않고 지연을 두고 저장
    • 지연을 통해서 네트워크 지터를 보정, 보간에 사용할 데이터 확보
  • 보간 계산
    • 확보한 데이터를 통해 중간위치(보간값 계산)
  • 렌더링
    • 보간된 위치를 화면에 반영해 부드러운 이동 구현

 

 

5. 비동기


클래시오브클랜 같은 게임은 AP 설계를 기반으로 비동기 온라인 게임 구현

 

특징

  • 느리지만, 손실 허용이 안되는 TCP 프로토콜 사용
  • 이벤트만 서버로 전송하고, 서버는 이벤트 검증 후 DB 저장
  • 다른 유저의 접속에 관계없이 게임 플레이 가능

 

 

6. 채팅 서버와 온라인 게임의 차이점


유사점

  • 사용자의 입력을 전체 사용자에게 브로드캐스팅
  • 사용자의 세션 관리
  • 서버 별로 다른 상태 가짐
  • 채널을 선택하거나 친구 목록을 보는 등의 로비 존재

차이점

  • 채팅 서버는 그래픽적 표현 없음
  • 채팅 서버는 데이터량이 작음
  • 채팅 서버는 낮은 latency 고려하지 않지만, 게임 서버는 보정이 필요할 때도 있다.

 

 

참고) 세션이란

  • 클라이언트와 서버간의 통신이 시작되고 유지되는 동안의 논리적 연결

'CS' 카테고리의 다른 글

OS & CS 몇 가지  (0) 2025.03.21
네트워크 개념  (0) 2025.03.13
운영체제 몇 가지  (1) 2025.01.13
'CS' 카테고리의 다른 글
  • OS & CS 몇 가지
  • 네트워크 개념
  • 운영체제 몇 가지
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    C++
    enhanced input system
    DP
    blend pose
    applydamage
    map을 vector로 복사
    BFS
    actor 클래스
    addonscreendebugmessage
    매크로 지정자
    motion matching
    템플릿
    additive animation
    상속
    Vector
    gamestate
    싱글턴
    const
    character animation
    cin함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
온라인 게임과 네트워크 구성
상단으로

티스토리툴바