[게임 서버] 4.7 플레이어 정보의 저장

게시:     수정

카테고리:

태그:

📦 4. 게임 서버와 클라이언트

👉🏻 항목 7: 플레이어 정보의 저장

💾 서버 저장의 필요성

온라인 게임의 저장 원칙:

  • 온라인 게임은 클라이언트에 정보를 잘 저장하지 않고, 서버에 저장한다

클라이언트 저장의 문제점:

1. 해킹에 취약하다:

  • 클라이언트 측 데이터는 쉽게 조작 가능

2. 크로스 플랫폼 플레이 불가:

  • 같은 사용자가 다른 기기를 사용할 때 이어서 할 수 없다

온라인이 아닌 게임도:

  • 온라인 게임이 아니더라도 서버에 저장하는 경우가 많다
    • 예시: 스팀 클라우드 시스템이 있다

🗄️ 1. 데이터베이스

일반적인 구조:

  • 온라인 게임은 일반적으로 클라이언트 - 서버 - 데이터베이스 구조로 운영된다

데이터베이스 종류:

관계형 데이터베이스 (RDBMS):

  • MSSQL
  • MySQL
  • Oracle
  • PostgreSQL

NoSQL:

  • MongoDB
  • Couchbase

🎯 2. 데이터베이스로 운영하는 이유

📊 1. 빠른 데이터 관리/분석

특징:

  • 특정 조건을 가진 데이터를 빠르게 검색/수정이 가능하다

🔄 2. 데이터 복원 기능

특징:

  • 사본 저장소를 사용하여 빠르게 복원할 수 있다

⚛️ 3. 트랜잭션 (Transaction)

정의:

  • 데이터베이스나 컴퓨터 시스템에서 논리적인 기능을 수행하기 위해, 더 이상 분할할 수 없는 최소한의 업무 처리 단위를 의미한다

원자성 보장:

  • 트랜잭션 기능을 통해 원자성을 가진다

실제 예시 - 송금 과정:

사용자 1이 2에게 100만원을 송금하는 과정은 두 과정을 거친다:

  1. 사용자 1의 계좌에서 100만원을 차감한다
  2. 사용자 2의 계좌에 100만원을 추가한다

문제 상황:

  • 만약 1을 수행하고 시스템이 중단되면, 중간에 돈이 증발한다

트랜잭션의 역할:

  • 이를 되돌릴 수 있도록 하는 기능이 트랜잭션이다
  • 모두 성공하거나, 모두 실패하도록 보장

🔒 4. 데이터 일관성

제약 조건 설정:

  • 데이터에 제약 사항을 걸 수 있다

예시:

  • 중복 닉네임 금지
  • 가진 돈 음수 금지

🔐 5. 락 (Lock)

개념:

  • 멀티스레드의 임계영역과 비슷한 개념이다

문제 상황:

  • 처리가 2개 이상 동시에 진행될 때, 한 데이터가 동시에 여러 처리에서 액세스하며 이상한 결과가 나올 수 있다

해결 방법:

  • 이를 락(Lock)을 이용하면 해결할 수 있다

🛡️ 6. 장애 내성

로그 버퍼 시스템:

  • 데이터베이스는 데이터를 미리 기록해 두는 로그 버퍼를 사용한다

복구 능력:

  • 시스템이 중단되더라도, 로그 버퍼가 있기에 원래 해야 했던 일들을 찾을 수 있다

🧐 정리

데이터베이스 사용의 6가지 이유

이유 핵심 기능 게임에서의 활용
빠른 관리/분석 효율적인 쿼리 처리 플레이어 검색, 랭킹 조회
데이터 복원 백업 및 복구 장애 발생 시 데이터 복구
트랜잭션 원자성 보장 아이템 거래, 재화 이동
데이터 일관성 제약 조건 설정 닉네임 중복 방지, 유효성 검증
동시성 제어 동시 거래 처리, 경쟁 상태 방지
장애 내성 로그 기반 복구 서버 다운 시에도 데이터 보호

저장 구조 비교

저장 위치 장점 단점 사용 사례
클라이언트 빠른 액세스
오프라인 가능
해킹 취약
기기 간 동기화 불가
그래픽 설정
키 바인딩
서버 보안
크로스 플랫폼
네트워크 필요
지연 시간
게임 진행 상황
계정 정보
데이터베이스 영구 저장
복구 가능
일관성 보장
복잡도 증가
관리 비용
플레이어 데이터
게임 통계

핵심 원칙

1. 중요한 데이터는 서버에:

  • 게임 진행 상황
  • 아이템 인벤토리
  • 재화 (골드, 보석 등)
  • 계정 정보

2. 사소한 데이터는 클라이언트에:

  • UI 설정
  • 그래픽 옵션
  • 키 설정
  • 사운드 볼륨

3. 트랜잭션이 필요한 작업:

  • 아이템 거래
  • 재화 이동
  • 계정 상태 변경
  • 중요 게임 이벤트

4. 락이 필요한 상황:

  • 동시 거래 처리
  • 공유 리소스 접근
  • 경매장 입찰
  • 길드 자금 관리

GameServer 카테고리 내 다른 글 보러가기

댓글남기기