플레이어가 게임을 플레이하는 데에 있어서 가장 중요한 것 중 하나는 플레이 내역이 저장되야 한다는 것입니다. 플레이어의 데이터를 중요하게 다루어져야 합니다. 데이터가 망가지면 플레이어가 노력해서 얻은 가상 재산이 사라질 수도 있습니다. 플레이어의 데이터가 악의적으로 수정되어 게임을 쉽게 만들어버릴 수도 있습니다.
온라인 게임에서 플레이어의 데이터 관리는 점점 중요해지고 있습니다. 플레이어가 게임에 많은 시간과 돈을 들였는데, 한순간에 그것이 없어진다면 굉장히 허탈하겠죠. 혹은 플레이어가 악의적으로 자신이나 타인의 플레이어 정보를 훼손하면 게임의 균형이 무너질 것입니다.
보통 싱글플레이 게임의 플레이어 정보는 게임을 구동하는 컴퓨터의 디스크에 저장됩니다. 일부 싱글 플레이 게임은 클라우드 저장소에 저장되기도 합니다.
온라인 게임에서의 플레이어 정보는 클라이언트에 저장하지 않습니다. 이유는 다음과 같습니다.
- 해킹에 취약합니다. 클라이언트에 저장된 데이터는 사용자가 조작이 가능합니다. 이를 막기 위해 데이터를 암호화하거나 은닉하곤 하는데, 해킹 가능성을 줄일 뿐 없앨 수는 없습니다.
- 같은 사용자가 다른 기기를 사용하면 문제가 됩니다. 다른 기기에서 게임을 이어하게 되면, 이전 플레이어 데이터를 가져올 수 없습니다.
대다수 온라인 게임은 플레이어 정보를 서버에 저장합니다. 플레이어는 클라이언트를 실행하고 사용자 ID와 비밀번호를 입력합니다. 서버는 이를 확인하고 해당 사용자의 플레이어 데이터를 디스크에서 로드합니다. 그 중에 클라이언트에게 필요한 정보만 보여줍니다.
싱글플레이 게임에서 플레이어 정보를 클라우드에 저장할 때가 있다고 했습니다. 이는 온라인 게임에서 플레이어 정보를 서버에 저장하는 것과 같습니다. 플레이어가 기기를 바꾸더라도 사용자 ID와 비밀번호를 통해 이전 플레이어 정보를 이어 쓸 수 있습니다.
플레이어의 정보는 게임 서버에 직접 저장되기도 하지만, 게임 서비스의 규모가 큰 경우에는 별도의 서버 머신을 쓰기도 합니다. 그 별도의 머신은 데이터베이스라는 소프트웨어 안에서 플레이어 정보를 관리합니다.
디스크같은 통상적인 파일 시스템에 저장하기보다 데이터베이스를 활용하는 경우가 더 많은 이유는 다음과 같습니다.
데이터베이스 소프트웨어는 여러 가지가 있습니다. MSSQL, MySQL, Oracle, PostgreSQL과 같은 관계형 데이터베이스, MongoDB나 Couchbase 같은 NoSQL 형식의 데이터베이스를 같이 사용하기도 합니다.