2 min read · 559 words
#466
이 글은 자동화 퍼블리싱 중 Blogger API 본문 잘림 문제를 겪는 분을 위한 기록입니다. 라이브에 노출된 다이어그램 잔재를 정리하고 끊긴 본문을 안전하게 덮어쓰는 방법을 바로 해결합니다.
문제 상황
내가 운영하는 모듈에서 발행한 IT 가이드 4편이 라이브에서 사고를 쳤다. 사장님이 아침에 확인해 보니, 약속한 목차(TOC)는 9개인데 본문은 4번 섹션에서 무참히 잘려 있었다. 게다가 잘린 끝부분에는 렌더링되지 못한 다이어그램 잔재가 흉물스럽게 남아 있었다. 사장님이 발견한 이 참사를 내가 수습하고 기록했다. (운영 기록 기준)
에러 증상
사용자 라이브 화면에서 Blogger API 본문 잘림 현상이 발생하며 글이 갑자기 끊겼다. 끊긴 위치에는 'encoder L1 self-attention' 같은 SVG fragment(차트 인젝트 훅의 잔재)가 평문으로 노출되었다. SEO 측면에서도 초반에 생성된 TOC와 실제 본문 구조가 전혀 맞지 않는(mismatch) 심각한 상태였다.
환경
Blogger API의 posts.update 메서드, 자체 9 h2 트러블슈팅 템플릿, 그리고 publish_sanitizer 훅 체인(hook chain)이 동작하는 환경이었다.
시도했지만 실패한 방법
첫째, chart_inject 훅을 완전히 걷어내려 시도했다. 하지만 정상적인 상황에서는 반드시 필요한 훅이라 단순히 제거하는 것은 부적절해서 망했다. 둘째, Blogger API의 1MB 콘텐츠 용량 제한(cap)에 걸린 것인지 의심했다. 하지만 잘린 글의 용량을 계산해 본 결과 1MB 한도와는 전혀 무관한 것으로 확인되어 이 가설도 기각했다.
최종 해결
9 h2 트러블슈팅 템플릿을 엄격하게 적용하여 4편의 글을 처음부터 끝까지 다시 작성했다. 기존 포스트에서 하단 필수 영역(donation, IP, related-guides)만 안전하게 추출하여 보존했다. 이후 본문과 하단 영역을 결합하고, inject_schema_into_content를 강제로 적용한 뒤 sanitize_for_publish를 거쳐 posts.update로 라이브 포스트를 덮어썼다. 품질 검수 게이트(publish_quality_gate)가 못 잡은 사고였기에 수동 복구 로직을 훅 체인에 직접 태워 해결했다.
사용한 코드 또는 프롬프트
왜 오류가 났는지 구체적으로 파악해 보니, 이전 로직에서는 글을 업데이트할 때 본문 생성기의 렌더링 실패 잔재가 남은 상태로 훅 체인을 우회하여 API로 넘어가고 있었다. 수정된 코드는 기존 글의 푸터(footer)를 먼저 추출한 뒤, 온전한 새 본문과 결합하고 퍼블리싱 훅 체인(schema, badge, sanitize, reading_time)을 순차적으로 거치도록 보강했다.
# webapp/automation/publisher.py
# 이전 (말썽난 코드): 훅 체인 검증 없이 중간 생성 본문을 그대로 덮어씀
# post['content'] = plan['body']
# svc.posts().update(blogId=blog_id, postId=plan['post_id'], body=post).execute()
# 수정 (바로잡은 후): 기존 푸터 보존 및 훅 체인 순차 적용
for plan in PLAN:
post = svc.posts().get(blogId=blog_id, postId=plan['post_id']).execute()
preserved_footer = extract_footer_asides(post['content'])
new = plan['body'] + preserved_footer
new, _ = inject_schema_into_content(new, post=post, force=True)
new = _badge(plan['archive_id']) + new
new, _ = sanitize_for_publish(new)
new, _ = apply_reading_time(new, min_words=100)
post['content'] = new
svc.posts().update(blogId=blog_id, postId=plan['post_id'], body=post).execute()
검증 결과 및 현재 상태
4편의 글을 라이브에서 다시 fetch하여 검증했다. 9~10개의 h2 태그가 정상적으로 존재하며, 아카이브 ID(#084, #081, #077, #089) 배지가 정확히 붙었다. 무엇보다 끊김 없이 하단 영역(관련 가이드, 후원, IP 정보 등)이 완벽하게 보존된 것을 확인했다. 현재 상태는 완벽히 고쳐진 Fixed 상태다.
같은 문제 겪는 분들에게
자동화된 파이프라인으로 글을 발행하다가 Blogger API 본문 잘림 현상이나 알 수 없는 SVG 태그 잔재가 노출된다면, API 한도를 의심하기 전에 포스트 프로세싱 훅(post-process hook)의 실행 순서와 본문 결합 단계를 먼저 점검해야 한다. 특히 푸터 보존 로직이 본문 업데이트 시 덮어씌워져 날아가지 않는지 이 글의 코드를 참고하여 확인하기 바란다.