ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION451 / 1500
게임 서버난이도 중하5분 답변 목표 · 보강본

NPC가 경로를 찾은 뒤 문이 닫히거나 목표가 바뀌었습니다. 기존 경로와 뒤늦게 도착한 탐색 결과를 어떻게 처리하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

경로 탐색이 끝난 시점에 유효했다는 사실과 실제 이동할 때도 유효하다는 사실은 다릅니다. 문이 닫히거나 목표가 바뀌면 기존 경로 전체를 맹목적으로 따르지 않고, 탐색에 사용한 맵 버전·목표 요청 세대·에이전트 이동 조건을 확인하면서 앞으로 이동할 짧은 구간을 다시 검증하겠습니다. 정적 지형 변경과 다른 캐릭터의 일시 점유를 구분해, 전자는 재탐색하고 후자는 기다림이나 지역 회피로 처리할 수 있습니다. 이를 경로 재검증(path revalidation)이라고 부릅니다.

버전과 영향 범위

맵 버전은 문·벽 같은 지형 상태의 버전이고, 요청 세대는 어느 목표와 어느 행동이 경로를 요청했는지를 나타냅니다. 목표가 바뀌면 맵이 그대로여도 이전 결과를 폐기해야 하며, 목표가 같아도 경로가 지나는 셀의 지형이 바뀌면 그 구간은 무효입니다. 월드 전체 버전만 비교하면 작은 문 하나가 바뀔 때 모든 NPC의 경로를 무효화하는 비용이 생깁니다. 경로가 참조한 타일·청크의 버전이나 변경 영역과 경로의 교차를 기록해 영향 범위를 줄이겠습니다. 다만 경로 검증과 실제 이동 사이에도 변경이 생길 수 있으므로, 검증 성공이 미래 전체의 보증은 아닙니다. 이동 직전 충돌 판정은 여전히 필요합니다. 예를 들어 경로가 A-B-C-D이고 B를 막는 문이 닫혔다면 D까지 다시 찾기 전에 B 근처에서 현재 위치와 동적 점유를 확인합니다. 문이 잠시 닫힌 것이라면 몇 틱 기다리고, 정적 지형 변경으로 통로가 사라졌다면 지역 재탐색을 시작합니다. 다른 NPC가 잠깐 점유한 경우 전체 맵을 무효화하지 않고 예약 만료·회피 규칙을 적용할 수 있습니다. 경로 스무딩이나 큰 에이전트 반경을 사용한다면 중심선뿐 아니라 실제 통과 폭도 같은 버전으로 검사합니다.

비동기 결과와 재탐색 폭주

탐색을 작업 큐에 맡겼다면 요청 시점의 목표 세대와 맵 버전을 결과에 넣습니다. 결과 도착 시 현재 세대가 다르면 성공 경로라도 적용하지 않고 폐기하거나 최신 변경을 반영해 재요청합니다. 여러 NPC가 같은 문 변경을 보고 동시에 전체 A*를 시작하면 틱 예산을 넘을 수 있으므로 변경별 요청 병합, NPC별 쿨다운, 전역 탐색 동시성, 실패 시 지수 백오프를 둡니다. 오래된 경로를 당장 버려야 하는 충돌 규칙과 잠시 사용할 수 있는 관찰·표시 데이터를 구분하겠습니다. 검증은 문 열림·닫힘, 목표 연속 변경, 좁은 통로의 일시 정체, 탐색 중 또 다른 변경, 늦은 결과, 서버 재시작을 포함합니다. 성공 기준은 모든 경로가 최신인 것이 아니라 안전하지 않은 셀로 이동하지 않고, 현재 요청에 맞지 않는 결과가 적용되지 않으며, 재탐색 CPU가 상한 안에 있는 것입니다.

즉, 경로는 한 번 계산한 사실이 아니라 버전이 붙은 실행 계획(versioned execution plan)입니다. 재검증 단위를 지나치게 작게 만들면 변경을 놓치고, 크게 만들면 모든 경로가 계속 무효화됩니다. 경로가 참조한 셀을 그대로 저장하는 대신 청크나 장애물 영역의 버전 집합을 저장하고, 큰 장애물은 영향 반경을 함께 등록하면 변경 시 후보 경로를 찾기 쉽습니다. 그래도 실제 캐릭터 반경과 이동 중 점유는 별도 검사로 남겨야 합니다. 재탐색이 실패했을 때 이전 경로를 계속 실행할지 즉시 멈출지는 안전성과 경험의 선택입니다. 다음 한 칸이 유효하면 짧게 대기하면서 재시도할 수 있지만, 문 뒤로 진입하는 경로처럼 위험이 확인되면 이동을 중지합니다. 요청 큐에는 NPC별 최신 목표만 남겨 중간 목표를 합치고, 맵 변경이 계속될 때는 작업 완료 후 최신 버전으로 한 번만 재시작하겠습니다. 취소 요청이 실행 중 계산을 즉시 멈추지는 않습니다.

중단하지 못한 작업은 완료 뒤 결과를 폐기하고 워커·맵 참조는 실제 종료까지 유지합니다. 캐시 키에도 맵뿐 아니라 에이전트 프로필과 이동 규칙 버전을 포함하겠습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 맵 버전과 목표 요청 세대를 서로 다른 무효화 기준으로 둔다.
  • 정적 변경·일시 점유를 구분하고 영향 영역·지역 재탐색을 사용한다.
  • 늦은 비동기 결과와 재탐색 폭주를 쿨다운·예산으로 통제한다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 한 번 찾은 경로는 도착까지 항상 유효하다고 가정한다.
  • 문 하나가 바뀔 때마다 모든 NPC가 전체 탐색을 다시 한다.
  • 늦게 도착한 성공 결과가 현재 목표를 덮는 문제를 무시한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기