클라이언트가 이동 위치와 공격 결과를 서버에 보냅니다. 서버는 무엇을 그대로 받아들이고 무엇을 다시 계산해야 하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
클라이언트는 ‘어떻게 하려 했는가’를 보내고, 서버는 그 의도가 현재 게임 규칙과 상태에서 실행 가능한지 확인한 뒤 확정 상태와 결과를 계산해야 합니다. 클라이언트가 보낸 위치·피해량·처치 여부를 최종 사실로 받아들이면 변조뿐 아니라 지연과 순서 뒤섞임에도 상태가 깨집니다. 이동 방향, 버튼 입력, 공격 대상과 입력 번호는 주장으로 받을 수 있지만, 속도 제한을 지킨 위치와 실제 피해·자원 차감은 서버가 판정합니다. 이런 권한 배치를 권위 서버(authoritative server) 모델이라고 부릅니다.
이동과 전투를 검증하는 순서
이동 입력은 세션·캐릭터 권한과 형식을 먼저 확인하고, 입력 번호가 중복되거나 너무 오래됐는지 검사합니다. 이후 서버가 알고 있는 직전 위치, 틱 간격, 최대 속도, 충돌, 이동 가능 지형을 사용해 허용된 새 위치를 계산합니다. 단순히 클라이언트가 보낸 최종 위치와 서버 위치의 거리를 비교하면 순간이동이나 지연 보정 악용을 놓칠 수 있습니다. 공격은 대상이 유효한지, 공격자 상태와 재사용 대기·탄약·자원이 맞는지, 거리와 시야·팀 관계가 맞는지 확인하고 서버 시뮬레이션으로 피해를 결정합니다. 클라이언트가 보낸 피해 100은 UI 예측의 참고값일 수 있지만 권위 있는 전투 결과는 아닙니다. 클라이언트 화면의 반응을 빠르게 하려면 입력을 서버에 보내는 동시에 로컬에서 임시로 이동하는 클라이언트 예측(client-side prediction)을 사용할 수 있습니다. 서버는 입력 번호와 확정 틱의 상태를 돌려주고 클라이언트는 확인된 상태 이후 아직 확인되지 않은 입력을 재적용합니다. 예측이 틀리면 보정하되, 보정 범위가 너무 크면 사용자가 순간이동을 느끼고 너무 넓으면 치팅 허용 범위가 됩니다. 지연은 정당한 사용자의 현상이지 과거 상태를 무제한 승인하는 근거가 아니므로 서버가 허용할 RTT·입력 연령·속도 상한을 정하겠습니다.
순서, 비용, 실패 계약
입력 번호는 중복·누락·역순을 구분하는 데 사용합니다. 중복은 같은 입력의 재전송으로 보고 한 번만 적용하며, 누락은 기다릴지 다음 입력을 제한적으로 처리할지 게임 규칙으로 정합니다. 검증은 값싼 형식과 세션 확인부터 시작하고, 광범위한 충돌·시야 계산은 유효한 빈도와 비용 예산 안에서 수행합니다. 한 요청에 계산을 몰아넣으면 공격자가 유효해 보이는 비싼 입력으로 서버를 압박할 수 있습니다. 서버 판정 결과가 클라이언트 예측과 다를 때는 수정된 상태와 이유 코드까지 보내야 디버깅과 재현이 가능합니다. 테스트는 정상 고지연, 중복·역순·오래된 입력, 비정상 속도, 사거리 밖 공격, 자원 경합, 서버 재접속을 넣습니다. 같은 입력 로그를 다시 재생해 결과가 일치하는지와 클라이언트가 받은 위치를 믿지 않아도 최종 상태가 안전한지를 확인하겠습니다.
권위 서버의 본질은 ‘클라이언트를 전혀 믿지 않는다’가 아니라, 입력 의도와 확정 사실을 분리하는 계약(authority contract)입니다. 서버가 재계산하는 범위는 게임 규칙에 따라 계약화해야 합니다. 이동은 입력 방향과 시각을 받아 서버 물리로 위치를 정하지만 조준 방향은 화면 반응을 위해 클라이언트 값을 사용할 수 있습니다. 그래도 조준 방향이 사거리와 시야를 우회하지 않는지 서버가 확인해야 합니다. 입력에는 접속 세대와 캐릭터 세대를 붙여 이전 세션의 늦은 패킷이 재접속한 캐릭터에 적용되지 않게 하겠습니다. 검증 실패를 모두 같은 오류로 반환하면 정상적인 지연과 비정상 조작을 구분하기 어렵습니다. 형식·권한·순서·게임 규칙 위반을 별도 사유로 계측하고 반복 위반은 연결 빈도와 계산 비용을 제한합니다. 확정 결과에는 기준 틱과 적용 입력 번호를 남겨 리플레이와 분쟁 조사를 가능하게 하되, 서버 내부 판정 정보를 클라이언트에 과도하게 노출하지 않겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 입력 의도와 위치·피해 같은 서버 확정 결과를 구분한다.
- 이동·공격 검증 항목과 입력 번호·중복 처리 순서를 제시한다.
- 클라이언트 예측의 반응성과 서버 보정·남용 상한을 함께 설명한다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 클라이언트의 피해량이나 최종 위치를 그대로 저장한다.
- 권위 서버면 지연과 예측 불일치가 사라진다고 말한다.
- 오래된 입력과 고비용 검증 요청을 무제한 허용한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 서버가 받은 게임 입력 번호가 중간에 비었습니다. 기다림·다음 입력 처리·재동기화 중 무엇을 선택하나요?
- 클라이언트가 서버 확정 상태 뒤의 입력을 다시 적용합니다. 충돌·시간 간격·중복 입력의 오차는 어떻게 줄이나요?
- 서버 판정과 리플레이 재생의 결정성을 유지하려면 난수와 시간은 어떻게 관리하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.