더북(TheBook)

그림 10-30을 보면 로비 서버 1과 로비 서버 2는 플레이어 실력 점수(ELO)가 100~200인 것만 다루고, 로비 서버 3은 플레이어 실력 점수가 500~600인 것만 다룹니다. 이때 로비 서버 1에 접속한 플레이어 정보(‘매칭 대기 중 = TRUE 또는 FALSE’)가 변경되더라도, 로비 서버 3은 관심을 가질 필요가 없습니다. 즉, 로비 서버 3에 이를 동기화할 필요가 없습니다. 이렇게 하면 비슷한 실력의 플레이어끼리만 동기화를 하므로 결과적으로 각 로비 서버가 수신하거나 송신해야 할 데이터의 양이 적어집니다.

그러나 이것이 끝이 아닙니다. 로비 서버 간 플레이어 목록 동기화 과정에서 데이터 불일치 문제가 발생할 수 있습니다. 매치메이킹을 해서 기껏 게임방을 만들어 들어가게 했더니, 플레이어 하나가 이미 로비 서버에서 나가 버린 상항이 발생할 수 있습니다. 예를 들어 John은 로비 서버 1에 있고, Alice는 로비 서버 2에 있다고 가정합시다. 로비 서버 1은 John과 Alice를 매칭하기로 결정했는데, 이와 거의 동시에 로비 서버 2에서 Alice는 ‘매칭 대기 중 = FALSE’로 바뀝니다. Alice가 매칭 대기 버튼을 취소했기 때문입니다. 그러나 아직 로비 서버 2는 Alice의 이 상태 변경을 로비 서버 1에 알리기 직전입니다. 한편 로비 서버 1은 John과 Alice에게 배틀 서버로 이동을 지시합니다. Alice에게는 로비 서버 1 → 로비 서버 2 → Alice 클라이언트 순서로 지시합니다.

이러한 상황에서 Alice는 이미 ‘매칭 대기 취소’를 했음에도 원치 않는 매칭 및 게임 시작이 일어나 버립니다. 이때 로비 서버 2는 이미 Alice가 매칭 대기를 취소한 것을 알고 있습니다. 따라서 Alice에 대한 배틀 서버 이동 지시를 하지 말고, 로비 서버 1에 ‘원상 복구하라’고 알리는 방법도 있습니다. 그러나 이미 배틀 서버로 이동 중인 John은 어떻게 해야 할까요?

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