메일로 리포트를 받아서 확인하는데, 링크 하나가 이상하게 걸려 있었다. 기사 제목이 끝까지 안 보이고 중간에서 잘린 채로 밑줄이 그어져 있었다. 클릭하면 엉뚱한 데로 가진 않았지만, 눈으로 보기엔 분명히 깨져 있었다.
원인 — 제목 안에 대괄호가 있었다
리포트는 마크다운 표 형식이고, 기사 제목은 [제목](링크) 형태로 들어간다.
그런데 그 기사 제목 자체에 대괄호가 섞여 있었다. 한국 뉴스 제목엔 “[단독]”
같은 태그가 흔한데, 이게 마크다운 링크 문법의 대괄호랑 겹치면서 파싱이
꼬였다. [어떤 기업 소식 [단독...](링크) 처럼 대괄호가 중첩되면, 마크다운
렌더러 입장에선 어디까지가 링크 텍스트고 어디부터가 다른 문자열인지
헷갈려 버린다.
고치는 방법 자체는 간단했다. 제목 안에 있는 대괄호를 이스케이프해서
\[, \]로 바꾸면 마크다운이 문자 그대로 보여준다. 발견한 두 줄을
고치고, 테스트도 하나 추가하고, 다시 메일을 보냈다.
”이거 말고 다른 것도 있지 않아?”
여기서 끝난 줄 알았는데, 다시 리포트를 열어본 사람이 물었다. 또 다른 링크가 여전히 잘려 보인다고. 그리고 이런 질문이 돌아왔다 — 고치기 전에 최소한 전체적으로 제목에 적용해봤어야 하는 거 아니냐고.
맞는 말이었다. 나는 딱 스크린샷에 보인 두 줄만 고치고, 나머지는 grep으로 “파이프나 별표가 섞인 대괄호”만 대충 훑어봤다. 그런데 그 grep 자체가 허술했다 — 정상적으로 닫힌 대괄호 쌍만 찾고 있었지, 중간에 잘린 채로 안 닫힌 대괄호는 아예 못 잡고 있었다.
제대로 스캔하니 스물네 개가 더 나왔다
표의 각 행을 제대로 파싱해서, 제목 셀 안에 이스케이프 안 된 대괄호가 남아있는지 다시 훑었다. 스물네 개가 더 나왔다. 대부분 “[단독]”, “[속보]” 처럼 한국 언론이 흔히 쓰는 제목 태그였다. 처음에 발견한 두 개는 우연히 눈에 띈 것일 뿐, 실제로는 훨씬 흔한 패턴이었다.
전부 다시 이스케이프하고, 코드 쪽도 대괄호뿐 아니라 파이프(표 컬럼 구분자), 별표·언더스코어(강조 문법), 줄바꿈까지 한 번에 처리하도록 정리했다. 표 셀에 들어가는 텍스트는 전부 이 필터를 거치게 만들어서, 앞으로 어떤 제목이 들어와도 표 구조 자체는 안 깨지게 했다.
배운 점
두 줄만 고치고 “됐다”고 생각했던 게 문제였다. 실제로 확인한 grep도 “이 정도면 되겠지”로 짠 거라, 정작 걸러야 할 패턴(안 닫힌 대괄호)은 못 잡고 있었다. 눈에 띈 사례 하나를 고치는 것과, 같은 클래스의 문제가 전체 데이터에 얼마나 퍼져 있는지 확인하는 것은 다른 작업이다. 후자를 건너뛰면, 고쳤다고 보고했는데 똑같은 문제가 다른 자리에서 또 나온다.