본문으로 건너뛰기
유환호 연락하기

홈 / 기록

새로 나온 정답이 사람이 고친 값 위에 덮이지 않게 하는 법

한눈에 답변

인용 검출 기능을 개선해 다시 판정을 돌렸는데, 화면에는 인용이 있다는 새 판정 대신 예전의 '확인 안 됨' 값이 그대로 남아 있었다. 원인은 같은 조건이면 이전에 저장된 값을 통째로 복원하는 로직이었다 — 사람이 수정한 값을 보호하려던 장치가, 자동 판정이 갱신된 경우까지 낡은 값으로 되돌리고 있었다. 사람이 직접 건드린 항목에만 '수정됨' 표시를 남기고, 그 표시가 없는 항목은 항상 최신 자동 판정을 따르도록 바꿨다.

무엇이 이상했나

인용 검출 로직을 개선해 다시 판정을 실행했는데, 실제로는 인용 링크가 있다고 새로 판정됐어야 할 결과가 화면에서는 여전히 “확인 안 됨” 상태로 남아 있었다.

원인을 어떻게 찾았나

같은 조건(같은 해시값)의 데이터를 다시 불러올 때, 기존에 저장된 값을 전부 그대로 복원하는 로직이 있었다. 이 로직은 원래 사람이 손으로 수정한 값이 자동 판정에 덮어써지지 않도록 보호하려고 만든 것이었다. 그런데 판정 로직 자체가 개선되면 같은 조건에서도 새 판정 결과가 달라질 수 있는데, 이 복원 로직은 “값이 다르면 사람이 고친 것”이라고 잘못 해석해 개선된 새 판정값 위에 예전 값을 덮어쓰고 있었다.

어떻게 고쳤나

항목을 사람이 직접 입력하거나 바꿨을 때만 별도의 표시를 남기도록 했다. 화면을 다시 그릴 때는 그 표시가 붙은 항목만 예전 값을 복원하고, 표시가 없는 나머지 항목은 항상 최신 자동 판정 결과를 그대로 따르게 했다.

검증은 어떻게 했나

실제 확장 프로그램을 띄운 상태에서 같은 조건의 데이터를 다시 판정시켜, 자동 판정이 바뀐 항목은 새 값으로 반영되고 사람이 직접 “아니오”로 고쳐 둔 항목은 그 뒤에 다시 판정을 돌려도 그대로 유지되는지 둘 다 확인했다.

이 사건에서 얻은 교훈

“사람이 입력한 값을 보호한다”는 규칙과 “값이 이전과 다르면 사람이 고친 것”이라는 판단은 다른 말이다. 후자로 구현하면, 판정 로직 자체가 발전해서 같은 조건에서도 더 나은 답을 내는 정상적인 경우까지 오래된 값으로 되돌리게 된다. 무엇을 보호할지는 “값의 차이”가 아니라 “누가 그 값을 마지막으로 정했는가”로 판단해야 한다.