페이지 설명을 미리 준비해 두면 에이전트가 빠르게 시작할 수 있다. 그런데 그 설명에 예전 클릭 참조까지 남기면 편의 캐시가 오래된 행동의 입구가 된다. 나는 수동 읽기 준비의 결과에서 ref를 제거하고 실제 조작 전에 새로 대상을 찾게 했다.
캐시에 남길 것은 설명이고 실행 표가 아니다
PagePreparation은 관찰의 elements를 복사할 때 ref를 제외한다. 반환 자료는 PageView로 남고 버튼 이름과 역할, 상태 같은 설명은 이어 쓸 수 있다. 하지만 같은 객체에서 ref를 꺼내 바로 클릭하는 흐름은 만들지 않는다.
이 구조에서 ref를 권한 증서처럼 부르는 것도 정확하지는 않다. 실제 행동은 작업 범위와 호스트 검사를 더 거친다. 다만 ref가 실제 노드로 이어지는 행동용 식별자라는 점에서 수명을 더 짧게 다뤘다. 읽기 자료를 보관하는 이유가 실행 검사를 생략할 이유로 바뀌지 않게 한 것이다.
수동 준비와 행동 관찰은 실행 세계도 나눈다
호스트는 준비에 passiveDriver를 연결하고 실제 행동용 관찰과 구별한다. 준비 드라이버는 revision 추적을 위한 고정 코드를 쓰며 제거 시 관련 관찰 상태를 잊는다. 사전 준비가 실제 작업의 최신 참조를 갱신하거나 대체하는 개념으로 두지 않았다.
같은 페이지를 읽었다는 이유로 두 관찰의 수명을 합치면 어떤 snapshot이 현재 조작의 근거인지 모호해진다. 설명이 같아도 내부 문서와 노드의 정체성은 달라질 수 있다. 나는 관찰 데이터를 재사용할 때 무엇을 재사용하지 않는지도 계약으로 남겼다.
캐시를 읽을 때도 지금과 맞는지 본다
peek은 휴면·로딩 상태와 문서 세대·URL을 확인하고 현재 revision이 맞는지 본다. 내용이 바뀌면 옛 view를 돌려주지 않고 새 준비를 예약한다. 읽기 자료라서 영원히 같은 것으로 봐도 되는 것은 아니다.
이 검사와 행동용 새 관찰은 서로 다른 역할이다. peek이 최신이라고 통과해도 이후 클릭 전 페이지가 바뀔 수 있다. 캐시 확인을 통과했다는 사실로 실제 노드의 존재와 가림, 문서·snapshot 검사를 대체하지 않는다. 데이터의 현재성과 행동 시점의 유효성을 따로 유지한다.
제거하는 항목이 무엇인지 실제로 시험한다
관련 단위 시험은 관찰에 secret-ref라는 합성 참조를 넣는다. 준비 후 peek 결과를 문자열로 바꾸어도 그 값이 없고 본문은 남아 있는지 확인한다. 단지 ref가 없어질 것이라는 설명이 아니라 반환 자료에서 실제로 제외되는지 보는 시험이다.
원본 관찰을 수정하지 않고 요소 설명을 새로 만드는 것도 중요하다. 실행용 관찰을 공유한 채 속성을 지우면 다른 코드의 동작을 깨뜨릴 수 있다. 이 글에서는 현재 복사 코드와 그 시험을 대조했다. 운영 중 탭의 실제 참조를 탈취하거나 새 클릭을 수행한 시험은 아니다.
참조 제거를 모든 내용 비공개 보장으로 넓히지 않는다
ref를 뺐다는 사실은 페이지의 모든 입력값과 민감한 내용이 자동 익명화됐다는 뜻이 아니다. 일반 입력 보호와 사이트별로 읽는 편집 내용은 각 관찰 코드의 별도 계약이다. passive 결과의 요소를 복사할 때 ref만 제외하는 지점이 무엇을 하는지 정확히 설명해야 한다.
자료를 외부로 보내거나 공개할 때는 본문과 서비스별 설명 필드도 따로 검토해야 한다. 읽기 캐시는 내부 편의 자료이고 공개 콘텐츠 검수기는 아니다. 나는 작은 보호 기능을 과장하지 않고 다음 계층에서 필요한 검토를 남겨야 재사용 모듈과 글을 믿고 연결할 수 있다고 본다.
재사용할 자료와 다시 확인할 조건을 나눈다
이 설계는 업무용 화면의 요약과 실제 저장 대상에도 적용할 수 있다. 요약은 캐시에서 읽되 저장할 때는 현재 레코드와 수정 버전, 권한을 다시 확인한다. 빠르게 보여 주는 기능이 예전 상태를 무조건 실행하는 기능이 되어서는 안 된다.
북극성에서는 설명 자료와 행동 참조를 분리하는 방식으로 그 기준을 만들었다. 현재 글은 코드와 기존 단위 시험의 범위를 설명하며 모든 실사이트의 상태 변화를 새로 검증했다는 보고는 아니다. 나는 편의를 위한 재사용이 어떤 확인을 생략하지 않는지까지 남기는 것이 제작자의 중요한 설명이라고 생각한다.