ONE QUESTION AT A TIME.

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

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

복셀 원본이 바뀔 때 충돌·경로·시야 파생 데이터를 서로 다른 버전으로 사용하지 않게 갱신하는 방법은 무엇인가요?

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

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

구두 답변

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

복셀 원본을 새 버전으로 바꾸는 일과, 그 원본에서 만든 충돌·경로·시야 파생 데이터가 모두 그 버전을 사용하는 일은 별개입니다. 원본은 새 벽을 포함하는데 충돌 인덱스가 이전 버전이면 벽을 통과하고, 경로는 새 길을 보는데 시야 데이터는 이전 지형이면 기능 사이의 판정이 모순됩니다. 변경마다 원본 버전을 발급하고 각 파생 산출물에 sourceVersion, 생성 상태, 영향 영역을 기록해 어떤 조합을 허용할지 정해야 합니다. 이 원본과 파생 결과의 일관성을 버전 정합성(version consistency)이라고 부릅니다.

변경과 재생성

한 청크의 복셀이 바뀌면 해당 청크와 캐릭터 반경·ray 길이·경로 footprint가 닿는 이웃을 무효화합니다. 충돌은 새 벽을 즉시 막아야 하는 반면 화면 메시나 먼 거리 시야는 잠시 이전 버전을 사용해도 될 수 있으므로 기능별 허용 지연을 분리합니다. 새 충돌 파생 데이터가 준비되기 전에는 임시 보수 충돌층으로 이동을 막거나, 해당 영역에 진입하는 작업을 보류하고, 임시 정책의 최대 지속 시간을 둡니다. 이전 충돌층을 그대로 허용하면 안전성은 빠른 재생성보다 약해집니다. 재생성 작업은 시작할 때 읽은 원본 버전과 결과를 묶습니다. 생성 중 원본이 다시 바뀌면 결과를 최신으로 덮어쓰지 않고 오래된 산출물로 폐기하거나, 변경을 병합해 새 작업을 예약합니다. 충돌·경로·시야를 각각 새 배열에 완전히 생성한 뒤 모든 필수 산출물이 같은 호환 버전인지 확인하고, 완성된 스냅샷 포인터를 한 번에 교체하겠습니다. 부분적으로 새 배열을 공개하면 한 요청이 서로 다른 버전을 읽을 수 있습니다.

읽기 수명과 운영

교체 직후 이전 파생 데이터를 해제하면 진행 중인 raycast나 경로 탐색이 dangling reference를 읽습니다. epoch는 오래된 결과의 적용을 막는 논리적 장치일 뿐 메모리 안전성을 보장하지 않습니다. 이전 버전은 더 이상 새 요청에 쓰지 않되, 참조 카운트·RCU·hazard pointer·작업 완료 대기처럼 실제 독자 참조를 유지하는 방법으로 기존 읽기가 끝난 뒤 회수합니다. 비동기 결과가 도착할 때 현재 원본 버전과 산출물의 sourceVersion을 다시 비교하고, 맞지 않으면 적용하지 않습니다. 계속 변경되는 지역에서는 여러 변경을 하나의 최신 목표 버전으로 합쳐 재생성 폭주를 줄이되, 충돌 안전층은 별도 우선순위로 처리할 수 있습니다. 지표는 원본-파생 버전 차이, 오래된 작업 폐기율, 임시 충돌층 지속 시간, 재생성 대기, 요청별 사용 버전을 기록합니다.

테스트는 연속 파괴·복원, 경계 이웃 변경, 생성 중 워커 중단, 늦은 결과, 세 기능의 동시 조회를 포함합니다. 성공 기준은 모든 데이터가 늘 즉시 최신인 것이 아니라, 허용되지 않은 버전 조합이 권위 판정에 사용되지 않는 것입니다. 세 파생 데이터가 동시에 완성되지 않는 현실을 고려해 호환성 행렬을 명시하겠습니다. 새 충돌과 이전 시야의 조합은 화면에서만 허용하지만, 새 경로와 이전 충돌의 조합은 실행에 사용하지 않는 식입니다. 여러 청크를 읽는 요청은 최신 버전만 모으지 말고 하나의 일관된 스냅샷 ID를 선택하거나 잠정 결과로 표시합니다. 변경이 연속으로 들어오면 최신 목표 버전까지 합쳐 재생성하되 충돌 안전층은 우선 처리합니다. 오래된 작업 완료를 성공으로 기록하지 않고, 원본 변경 후 파생 지연·버전 불일치 거절·임시 정책 지속 시간을 관찰해 워커가 밀리는지 판단하겠습니다.

02

득점 포인트

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

  • 원본 버전·파생 sourceVersion·적용 상태를 함께 관리한다.
  • 기능별 이전 버전 허용과 보수적 임시 충돌 정책을 구분한다.
  • 완성 스냅샷 원자 교체와 이전 읽기 참조 수명을 설명한다.
03

감점 포인트

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

  • 원본이 바뀌면 모든 파생 데이터가 즉시 최신이라고 가정한다.
  • 생성 중인 부분 결과를 서비스한다.
  • 늦게 끝난 작업의 버전 비교 없이 결과를 덮어쓴다.
04

더 파고들 거리

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

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

원리부터 공부하고 싶다면

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

← 전체 질문 보기