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

홈 / 기록

중복을 막으려던 장치가 개선된 결과까지 통째로 버렸다

한눈에 답변

인용 검출 기능을 개선한 뒤 이전에 이미 저장했던 같은 답변을 다시 캡처해 재분석했는데, 결과가 예전 값 그대로였다. 중복 방지 장치가 '같은 답변은 이미 등록됨'으로 판단해 새로 분석한 결과 자체를 저장하지 않고 버리고 있었기 때문이다. 같은 답변이라는 판정과 그 결과를 최신 분석으로 교체하는 것은 서로 다른 문제였는데, 하나의 장치가 둘을 같이 처리하고 있었다.

무엇이 이상했나

인용 검출 기능을 개선한 뒤, 이미 예전에 등록해 뒀던 답변을 다시 가져와 새 기능으로 재분석을 시도했다. 화면에는 “이미 등록된 같은 답변입니다”라는 안내만 뜨고, 개선된 분석 결과는 반영되지 않은 채 예전 값이 그대로 남아 있었다.

원인은 무엇이었나

같은 답변을 중복으로 저장하지 않기 위한 장치가 있었는데, 이 장치가 “같은 답변이니 새로 온 결과는 버린다”는 방식으로 동작하고 있었다. 문제는 이 장치가 만들어질 때는 분석 로직이 바뀌지 않는다는 것을 전제로 했다는 점이다. 분석 로직 자체가 개선되면, 같은 답변이라도 다시 분석했을 때 더 정확한 결과가 나올 수 있는데, 이 경우까지 전부 “중복이니 무시”로 처리되고 있었다.

어떻게 고쳤나

같은 답변이라는 판정과, 그 저장 결과를 무엇으로 할지를 분리했다. 같은 답변이면 화면에는 여전히 “중복”이라고 안내하되, 저장되는 값은 이번에 새로 분석한 최신 결과로 교체하도록 바꿨다. 사람이 그 카드에서 직접 수정해 둔 값이 있는 경우에는 별도로 보호하는 장치가 이미 있어서, 이 교체가 그 보호를 건드리지는 않았다.

검증은 어떻게 했나

먼저 어떤 답변을 정상적으로 캡처해 인용이 있다고 저장한 뒤, 그 저장값을 일부러 예전 방식의 부정확한 값으로 바꿔 뒀다. 그런 다음 같은 답변을 다시 캡처해, 화면에는 중복이라는 안내가 뜨면서도 저장값은 최신 분석 결과로 정확하게 갱신되는지 확인했다.

이 사건에서 얻은 교훈

“중복을 막는다”는 목적과 “낡은 결과를 새 결과로 덮어쓰지 않는다”는 목적은 얼핏 비슷해 보이지만 다른 규칙이다. 하나의 장치에 두 가지 의도를 섞어 넣으면, 시스템이 발전해서 같은 조건에서도 더 나은 답을 낼 수 있게 된 순간 그 발전이 무력화된다. 무엇을 막을지 정할 때는 “언제 이 규칙이 오히려 개선을 막게 되는가”까지 미리 생각해야 한다.