더북(TheBook)

하지만 플레이어 1이 해커라고 가정합시다. 클라이언트에서 일어나는 모든 일은 해커가 마음대로 조작할 수 있습니다. 물론 해킹 방지 소프트웨어를 사용해서 해킹은 줄일 수 있지만, 완전히 없애기는 기술적으로 불가능합니다. 결국 플레이어 1은 클라이언트 프로세스를 해킹해서 플레이어 1의 공격력을 매우 큰 값으로 변경해 버렸습니다. 플레이어 1에서 공격 판정을 하고 나니, 플레이어 2의 생명력은 0이 되었다고 판정해 버렸습니다. 그리고 플레이어 1에서 서버에 메시지를 보냅니다. 결과는 어떨까요? 플레이어 2는 바로 죽어 버립니다. 플레이어 1이 매우 낮은 능력치의 캐릭터라면 플레이어 2 입장에서는 억울하겠죠.

p195

▲ 그림 4-8 클라이언트에서 일방적으로 판단하는 경우

 

다시 원래대로 그림 4-7과 같이 작동한다고 가정해 봅시다. 플레이어 1에서는 서버에 ‘플레이어 2를 때렸다는 사실’만 알릴 뿐, 플레이어 1과 플레이어 2에 대한 어떤 판정도 하지 않습니다. 플레이어 1의 능력치와 상태 값은 서버가 모두 갖고 있을 것입니다. 따라서 서버에서 공격 행동을 판정하고 나서 그 결과를 플레이어 1에게 응답하고, 플레이어 2에게는 변화한 생명력을 알려 줍니다. 이렇게 하면 플레이어 1의 해킹을 차단할 수 있습니다.4

정리하자면, 클라이언트에서 해킹을 당하지 않도록 서버의 힘을 빌립니다.

 

4 플레이어 1이 공격할 수 있는 속도에는 제한이 있을 것입니다. 그런데 플레이어 1이 해킹을 시도해서 “공격했다.”라는 메시지를 정상치를 훨씬 웃도는 횟수만큼 서버에 한꺼번에 보낼 수도 있습니다. 이를 패킷 복제 공격이라고 합니다. 이때도 해킹으로 변칙 플레이가 발생합니다. 서버에서는 이를 막기 위해 클라이언트가 실제로 공격할 수 있는 초당 횟수를 갖고 있고, 클라이언트에서 이를 상회하는 메시지가 도착할 경우 필요한 횟수 이상을 무시하게 만들기도 합니다.

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