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

홈 / 기록

푸터의 메뉴 제목이 본문 소제목으로 잘못 인식되고 있었다

한눈에 답변

새 글감이 기존 페이지와 얼마나 겹치는지 판정할 때 쓰는 소제목 목록을, 헤더·푸터를 걸러내지 않은 원본 HTML에서 그대로 뽑고 있었다. 그 결과 페이지 하단 메뉴의 짧은 제목('AEO' 등)이 관련 질문 대부분에 걸려 사실상 와일드카드처럼 작동하며, 존재하지도 않는 절을 가리키는 잘못된 작업 지시를 만들어내고 있었다.

무엇이 이상한 결과를 냈나

특정 질문에 대한 작업 계획을 만들었는데, “이 페이지의 특정 절을 확인하라”는 지시가 나왔다. 그런데 그 페이지를 직접 열어 보니 그런 절 자체가 없었다. 존재하지 않는 절을 가리키는 지시는 사람이 그대로 실행할 수 없다.

원인을 어떻게 찾았나

이 판정 로직이 페이지의 소제목 목록을 어디서 가져오는지 추적했다. 페이지 본문·헤더·푸터·내비게이션을 걸러내는 절차가 이미 있었는데, 소제목만은 그 절차를 거치지 않고 원본 HTML에서 곧바로 뽑고 있었다. 그래서 페이지 하단 메뉴의 열 제목들이 본문 소제목인 것처럼 섞여 들어가고 있었다.

왜 하필 크게 문제가 됐나

판정 로직은 소제목이 2글자 이상이면 질문에 포함되는지만 확인한다. 짧은 소제목은 원래 방식(연속된 세 글자 단위 비교)으로는 절대 걸리지 않아서 만든 예외 규칙이었다. 그런데 페이지 메뉴의 짧은 제목이 이 예외 규칙에 걸리면서, 관련된 거의 모든 질문에 그 메뉴 제목이 매칭돼 사실상 와일드카드처럼 작동하고 있었다.

어떻게 고쳤나

본문 텍스트를 뽑을 때 쓰는 것과 소제목을 뽑을 때 쓰는 것이 같은 걸러내기 규칙을 쓰도록 함수를 하나로 합쳤다. 두 곳이 각자 다른 규칙으로 같은 종류의 작업(불필요한 부분 제거)을 하고 있었던 것 자체가 이런 어긋남이 생기는 근본 원인이었다.

부수적으로 새로 만든 것

이 문제를 조사하다가, 기존 문서를 확장하는 작업 계획을 세워 주는 기능이 만들어져만 있고 실제로 사람이 불러 쓸 방법이 없다는 것도 함께 발견했다. 후보 하나를 골라 그 계획만 따로 확인할 수 있는 명령을 새로 만들었다 — 이 명령은 파일을 고치지 않고 계획만 보여준다. 적용은 여전히 사람이 판단해서 한다.