코드 프로파일링 결과를 보면 의외로 길찾기 연산이 가장 많은 시간을 차지합니다. 플레이어와 몬스터 간 상호 작용 횟수는 많으나, 정작 총 연산량은 많지 않다는 것을 알 수 있습니다. 이때는 가장 많은 연산을 처리하는 길찾기 연산 부분만 기능적으로 분산하는 방법이 좋습니다.
일단 게임 서버와 길찾기 연산 전담 서버를 분리합니다. 게임 서버는 길찾기 연산 전담 서버에 시작점과 끝점 정보를 보냅니다. 길찾기 연산 전담 서버는 두 점을 잇는 경로 정보를 응답합니다.
몬스터의 상태 정보는 게임 서버가 직접 가지며, 플레이어와 몬스터 간 상호 작용은 게임 서버가 모두 처리합니다(➊, ➋, ➐~➓). 몬스터가 어딘가로 이동해야 한다면, 길찾기 서버에 “내가 가야 하는 경로를 알려 줘.”라고 요청합니다(➎). 그러면 길찾기 전담 서버는 이에 대한 계산을 수행하여 그 결과를 게임 서버에 응답합니다(➏).
▲ 그림 10-35 길찾기 전담 서버 분리