더북(TheBook)

이를 코드 레벨로 표현하면 다음과 같을 것입니다.

Player_Attack(player, monster)
{
  player.bullet--;
  otherServer.DamageCharacter(player.id, monster.id, 10); // ➊
}
 
DamageCharacter(callerServer, attacker, character, damage)  // ➊
{
  character.hitPoint -= damage;
  if (character.hitPoint < 0)
  {
      callerServer.GiveItem(attacker.id, gold, 30);       // ➋
      DeleteEntity(character, 10sec);
  }
}
 
GiveItem(character, item, amount)                           // ➋
{
  character.item.Add(item, amount);
}

이 방식이 가진 가장 큰 장점은 동기 분산 처리와 달리 잠금으로 인한 병목이 없다는 것입니다. 따라서 각 서버가 가진 성능을 최대한으로 활용할 수 있습니다.

그러나 단점도 있습니다. 모든 로직을 이 방식으로 구현하기 어렵거나 불가능하기 때문입니다. 쉽게 생각하면 반환 값 없는 함수만으로 로직을 구현하는 것과 유사합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.