네이버 블로그 자동 발행 확장에 표를 줬더니, 표가 아니라 글자 그대로 박제됐다

·

법률 블로그 초안에 처음으로 비교표를 넣었다. 항목이 셋뿐이라 표로 정리하는 게 자연스러워 보였다. 자동 발행 스크립트를 돌리고 나서 실제 네이버 에디터 화면을 직접 열어 확인했더니, 표는 없고 이런 줄이 그대로 찍혀 있었다.

| 구분 | 승계 여부 | 근거 |
|---|---|---|
| 공용부분 관리비(일반관리비·청소비 등) | 승계 | 집합건물법 제18조 |

마크다운 표 문법이 표로 변환되지 않고, 파이프 기호(|)까지 포함해서 글자 그대로 문단에 박혀 있었다. 32개 글을 발행하는 동안 표를 한 번도 안 써봐서 처음 걸린 구멍이었다.

원인 — 파서에 표 분기가 아예 없었다

이 파이프라인은 초안 .txt 파일을 한 줄씩 읽어 네이버 에디터용 HTML로 바꾸는 파서(buildRunHtml())를 쓴다. 소제목(“1. 제목” 형태), 불릿(- 항목), 번호목록, 인용문(큰따옴표로 감싼 문장 + 뒤따르는 출처 줄)은 각각 정규식으로 인식하는 분기가 있다.

const isBullet = (line) => /^-\s+\S/.test(line.trim());
const isQuoteLine = (line) => {
  const t = line.trim();
  return t.length > 2 && t.startsWith('"') && t.endsWith('"');
};
// ... 소제목, 번호목록 분기 ...

// 위 분기 중 아무 것도 걸리지 않으면 여기로 떨어진다
parts.push(`<p style="text-align:left;font-size:19px;color:#222;">${esc(line)}</p>`);

표 줄(| 구분 | 승계 여부 | 근거 |, |---|---|---|)은 불릿도, 번호목록도, 인용문도 아니다. 그러니 위의 모든 분기를 통과해 맨 아래 else로 떨어지고, 그냥 한 줄짜리 평범한 문단으로 처리된다. 파이프 기호를 지우거나 표로 바꾸는 코드가 어디에도 없었으니 당연한 결과였다.

왜 지금까지 안 걸렸나

이 파서의 분기들은 전부 “실제로 여러 번 써본 형식”에 맞춰 하나씩 추가된 것들이다. 소제목·불릿·인용문은 초안을 쓸 때마다 반복해서 쓰다 보니 자연스럽게 파서가 갖춰졌다. 표는 이번이 처음이었다 — 그래서 분기 자체가 없었다.

자동화 코드의 커버리지는 문서화된 스펙이 아니라 실제로 통과시켜본 입력값의 총합이다. 안 써본 입력은 “지원 안 함”으로 명시되는 게 아니라, 그냥 조용히 가장 가까운 기본 동작(여기서는 “평범한 문단”)으로 떨어진다. 에러도 안 나고 발행도 성공으로 끝난다는 점이 더 위험하다 — 실제 화면을 보기 전에는 문제를 알 방법이 없다.

고친 법 — 표 대신 이미 검증된 형식으로

표 변환 로직을 새로 만드는 방법도 있었지만, 네이버 스마트에디터에 실제 표 DOM을 만드는 건 별도의 삽입 흐름이 필요해 손이 더 간다. 당장 그 초안을 발행해야 했으므로, 표로 쓰려던 내용을 이미 여러 번 검증된 불릿 형식으로 바꿔서 우회했다.

- | 구분 | 승계 여부 | 근거 |
- |---|---|---|
- | 공용부분 관리비 | 승계 | 집합건물법 제18조 |
- | 연체료 | 비승계 | 위약벌, 전 소유자 고유의 법률효과 |
+ - 공용부분 관리비(일반관리비·청소비 등) → 승계 (집합건물법 제18조)
+ - 연체료(가산금) → 비승계 (위약벌, 전 소유자 고유의 법률효과)

정보량은 같고, 파서가 이미 검증한 isBullet() 분기를 그대로 타므로 화면에도 정상적으로 나온다. 표 자체를 지원하는 건 별도 작업으로 남겨뒀다 — 지금 급한 건 발행이지, 파서 확장이 아니었다.

정리

형식파서 분기처음 발행 결과
소제목·불릿·번호목록·인용문있음정상
마크다운 표없음파이프 기호까지 글자 그대로 문단 처리
우회(불릿으로 재작성)기존 분기 재사용정상

이 확장에서 겪은 다른 종류의 캐럿·붙여넣기 버그는 링크가 문장에 그대로 붙어버린 캐럿 위치 버그에서 다뤘다. 두 버그 모두 원인은 다르지만 교훈은 같다 — 자동화 코드가 실제로 통과시켜보지 않은 입력은, 에러 없이 가장 가까운 기본 동작으로 조용히 떨어진다. 새로운 형식을 처음 쓸 때는 발행이 성공했다는 보고를 믿지 말고, 실제 화면을 한 번은 눈으로 확인해야 하는 이유다.

자주 묻는 질문

왜 표를 표로 만드는 기능을 바로 만들지 않았나요?

네이버 스마트에디터가 붙여넣은 내용을 표로 인식하게 하려면 별도의 DOM 조작이 필요합니다. 그날 바로 발행해야 하는 글이 있었고, 이미 여러 번 검증된 목록 형식(불릿)이 있었기 때문에 그걸로 우회하는 쪽을 택했습니다. 표 자체를 지원하는 건 별도 작업으로 남겨뒀습니다.

이 버그가 왜 그동안 발견되지 않았나요?

이 파이프라인으로 32개 글을 발행하는 동안 마크다운 표를 쓴 글이 한 번도 없었습니다. 파서 코드는 소제목·불릿·번호목록·인용문처럼 실제로 여러 번 넣어본 형식만 분기가 만들어져 있었고, 한 번도 넣어보지 않은 표 형식은 애초에 처리 분기 자체가 없었습니다.

어떻게 발견했나요?

발행 직후 실제 네이버 에디터 화면을 확인하는 과정에서 표가 "| 구분 | 승계 여부 | 근거 |" 형태의 원시 텍스트 줄로 그대로 찍혀 있는 걸 확인했습니다. 자동 발행 스크립트는 성공을 보고했지만, 실제 화면을 봐야만 알 수 있는 문제였습니다.

#크롬확장#CDP#네이버블로그#자동화#버그