더북(TheBook)

9.6.3 데이터 복제에 기반을 둔 로컬 처리

앞서 살펴본 두 가지 분산 처리 방식은 분산 처리에 관여하는 데이터들이 원본 서버에만 있었습니다. 플레이어를 담당하는 서버 1은 플레이어 정보만 가지며, 몬스터를 담당하는 서버 2는 몬스터 정보만 가집니다. 서버 1은 몬스터 정보를 가지고 있지도 않으며, 몬스터 정보를 변경할 권한도 없습니다. 마찬가지로 서버 2도 플레이어 정보에 대해 아무런 권한도 없습니다.

지금부터 알아볼 방식은 이것과는 다릅니다. 과정을 자세히 알아봅시다.

플레이어를 담당하는 서버 1은 몬스터를 담당하는 서버 2의 몬스터 정보를 갖고 있습니다. 마찬가지로 서버 2는 몬스터뿐만 아니라 플레이어 정보도 가지고 있습니다. 서버 1과 서버 2는 자기가 가진 데이터에 변경이 일어나면, 변경되었다는 사실을 상대방에게 알려 줍니다. 서버 1에서 몬스터 사냥에 대한 처리를 하면, 이에 관련된 플레이어와 몬스터 정보가 변경됩니다. 변경 사항은 서버 2에 전송되고, 서버 2는 이를 받아 자기 자신이 가진 플레이어와 몬스터 정보를 변경합니다.

Player_Attack(player, monster)
{
  player.bullet--;
  monster.hitPoint -= 10;
  if (monster.hitPoint < 0)
  {
      player.item.Add(gold, 30);
      DeleteEntity(monster, 10sec);
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.