[게임 서버] 4.5 게임 서버가 하는 일
카테고리: GameServer
태그: GameServer
📦 4. 게임 서버와 클라이언트
👉🏻 항목 5: 게임 서버가 하는 일
📋 게임 서버의 주요 역할
핵심 업무:
- 여러 사용자와 상호 작용
- 클라이언트 데이터 검수
- 플레이어 상태 보관
❌ 클라이언트가 계산하는 방식
sequenceDiagram
participant P1 as 플레이어1
participant S as 서버
participant P2 as 플레이어2
P1->>S: 플레이어 2 공격 판정<br>결정 내용 통보
S->>P2: 플레이어 1 계산 내용 통보
문제점:
- 플레이어가 서버에게 결정 내용을 통보할 때, 잘못된 값을 전달할 수 있다
- 해킹이나 조작에 취약
- 공정성을 보장할 수 없음
🐌 서버가 모두 계산하는 방식
sequenceDiagram
box Client
participant Input as 입력 받기
participant Render as 렌더링
end
box Server
participant Logic as 게임 로직 처리
end
Input->>Logic: 입력 이벤트 전송
Logic->>Render: 처리 결과 전달
문제점:
- 컴퓨터 네트워크는 레이턴시가 존재한다
- 즉, 렉이 걸릴 것이다
- 사용자 경험이 저하됨
✅ 분할해서 계산하는 방식 (하이브리드)
서버의 역할:
- 클라이언트에게 통보받은 것에 대해 검수하고, 이후 처리를 진행한다
클라이언트의 역할:
- 판정을 마친 뒤, 서버에게 통보해준다
예시 - 언리얼 엔진의 CharacterMovementComponent:
- 클라이언트에서 이동을 예측/진행한 뒤, 서버에게 전달한다
- 서버는 클라이언트의 결과를 검수한 뒤, 서버의 예상과 다르다면 조정해준다
📊 세 가지 방식 비교
| 방식 | 장점 | 단점 | 적합한 용도 |
|---|---|---|---|
| 클라이언트 계산 | 반응 속도 빠름 | 보안 취약 해킹 가능 |
비경쟁적 싱글플레이 |
| 서버 전체 계산 | 완전한 검증 공정성 보장 |
렉 발생 서버 부하 높음 |
턴제 게임 전략 게임 |
| 분할 계산 | 반응 속도 유지 보안 확보 |
구현 복잡 동기화 이슈 |
실시간 액션 게임 FPS, MMORPG |
🎯 분할 계산 방식의 동작 원리
클라이언트 측:
- 사용자 입력 발생
- 로컬에서 즉시 예측 실행 (낙관적 업데이트)
- 서버에 입력 정보 전송
서버 측:
- 클라이언트 입력 수신
- 게임 규칙에 따라 검증
- 서버 권위(authoritative) 결과 계산
- 클라이언트 예측과 비교
- 차이가 있으면 보정 값 전송
클라이언트 보정:
- 서버 보정 값 수신
- 로컬 상태를 서버 상태에 맞춰 조정
- 부드러운 보간으로 자연스럽게 처리
🧐 정리
게임 서버의 핵심 원칙:
- 서버가 권위(authority)를 가진다: 최종 결정권은 항상 서버
- 클라이언트는 예측한다: 반응성을 위해 로컬에서 먼저 실행
- 서버는 검증한다: 모든 클라이언트 데이터를 검수
- 불일치 시 조정한다: 서버 결과로 클라이언트 상태 보정
현대 게임 서버의 접근 방식:
- 실시간 게임은 대부분 분할 계산 방식 사용
- 클라이언트 예측 + 서버 검증 = 최적의 균형
- 네트워크 레이턴시를 사용자가 느끼지 못하도록 처리
- 보안과 사용자 경험을 동시에 만족
구현 시 고려사항:
- 어떤 로직을 클라이언트에서 처리할지 결정
- 서버 검증 로직의 강도 설정
- 보정 시 부드러운 전환 처리
- 치트 방지를 위한 추가 검증 레이어
댓글남기기