더북(TheBook)

메시지를 압축하는 방법으로 메시지의 양을 줄일 수도 있습니다. 일반적으로 메시지를 압축하고 풀기 위해 CPU가 연산하는 데 걸리는 시간은 메시지의 양에 비례하므로, 서버가 처리하는 데 걸리는 여타 시간보다 짧습니다. 수 킬로바이트 이상의 텍스트 데이터에서는 데이터 ZLib를 이용한 압축과 같은 무손실 알고리즘이 잘 동작합니다. 하지만 실시간 멀티플레이 게임에서 차지하는 대부분의 데이터는 플레이어 이동과 관련된 것인데 이는 데이터의 단위 크기가 수십 바이트 정도로 작은 데다 ZLib처럼 압축 여지가 있는 데이터 패턴을 이루지 않으므로 압축 효과가 별로 없습니다. 이때는 다른 방법의 압축 기법을 써야 합니다. 그중 하나가 바로 양자화(quantization)입니다.

양자화는 정수 혹은 부동소수점 값의 정밀도를 낮추는 대신 값이 차지하는 데이터 크기를 줄이는 간단한 방법입니다. 플레이어의 체력 값이 0~100으로 제한되고 소수점 값 정밀도가 0.5까지는 오차가 있다고 가정하겠습니다. 이 경우 2를 곱하면 정수 0~200으로 원하는 정밀도 값을 유지할 수 있습니다. 0~200의 값은 1바이트로 표현할 수 있으므로 플레이어 체력은 1바이트로 줄일 수 있습니다. 물론 네트워크로 주고받을 때만 1바이트로 줄이고, 게임 프로그램 안에서는 이를 f loat 같은 부동소수점 값으로 갖고 있어도 상관없습니다.

p208_1

▲ 그림 4-16 네트워크 최적화 프로토콜 1: 양자화

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