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

    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);
    }

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

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

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