더북(TheBook)

9.6.1 동기 분산 처리

동기 분산 처리에서는 어떤 연산을 다른 서버에 던져 놓고 그 결과가 올 때까지 대기합니다. 대기할 뿐만 아니라 그 연산과 관계된 데이터가 도중에 변경되지 않게 잠금(lock)을 해야 합니다.

p379

▲ 그림 9-14 서버 1이 서버 2가 일을 끝낼 때까지 락을 걸고 있는 상황

 

서버 1에서는 플레이어 캐릭터 정보를 가지고 있으며, 서버 2에서는 몬스터 캐릭터 정보를 가지고 있습니다. 플레이어 캐릭터가 몬스터를 때렸을 때 몬스터 사냥 로직은 플레이어 캐릭터가 가지고 있는 정보를 잠그는 것부터 시행합니다(싱글스레드 게임 서버에서는 불필요한 과정입니다).

그러고 나서 플레이어 캐릭터 정보를 업데이트합니다. 몬스터 사냥에 사용한 무기를 하나 없애는 것이죠. 그리고 몬스터 캐릭터를 가진 서버에 “몬스터에게 대미지를 주어라.”라는 처리를 하라고 명령을 전송합니다. 이 명령을 전송하고 나서 서버 1은 서버 2에서 응답이 올 때까지 기다립니다.

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