자동화 slecs

블로그 봇 마크다운 JSON 파싱 실패율을 낮춘 방법

목차

블로그 자동화 봇이 마크다운 형식의 JSON 데이터를 파싱할 때 자꾸 실패하는 문제가 있었다. parse_json_block 함수의 호환성을 개선해 다양한 포맷을 수용하도록 했다.

왜 파싱이 자꾸 깨졌을까

blog-bot 같은 자동화 도구를 운영하다 보면, 입력 데이터의 형식이 절대 일관적이지 않다. LLM이 생성한 마크다운이든, 사용자가 수동 편집한 콘텐츠든 시간에 따라 스타일이 달라진다. 특히 JSON 블록이 들어갈 때:

  • 누군가는 json ... 코드 펜스로 감싼다
  • 누군가는 순수 텍스트 안에 JSON을 그냥 붙여넣는다
  • 누군가는 들여쓰기(indentation)로 코드 블록처럼 표현한다
  • 앞뒤로 설명 문장이 붙어있다

기존 파싱 로직이 하나의 형식만 엄격하게 기대했다면, 그 형식에서 벗어난 순간 실패한다. 에러 로그를 보면 "JSON 디코딩 실패" "예상치 못한 문자" 같은 메시지가 반복되고, 결국 많은 자동화 작업이 중단된다.

parse_json_block의 유연성 높이기

이번 변경은 함수가 여러 가지 형식의 펜스와 산문을 모두 인식할 수 있게 개선한 것이다. 실제로는 이런 종류의 작업:

  • 정규식을 확장해서 마크다운 코드 펜스 앞/뒤의 여백과 텍스트를 유연하게 처리
  • 펜스가 없는 경우에도 JSON 블록을 찾아내는 로직 추가
  • 파싱 시도 순서를 조정해서 가장 명확한 형식부터 시도 → 점차 관대한 형식으로 fallback
입력 형식 이전 이후
json { "key": "val" }
{ "key": "val" } (펜스 없음)
이렇게 설명하면: { "key": "val" } 끝
펜스 앞에 공백/문단

관대한 수용의 의미

이 구현은 네트워킹에서 말하는 Postel의 법칙(관대성 원칙)을 따른다: "보내는 건 엄격하게, 받는 건 관대하게." 자동화 시스템이 다양한 입력을 받을 때는 이게 정답이다.

왜냐하면:

  1. 사용자 마찰을 줄인다 — "이 형식으로만 데이터를 주세요"라는 가이드를 반복하지 않아도 된다
  2. 유지보수 부담이 줄어든다 — 하나의 형식 변화로 인한 긴급 대응이 없어진다
  3. 복원력이 생긴다 — LLM이 생성한 콘텐츠나 사용자 입력의 약간의 변동에도 견딜 수 있다

반대로 "가비지 인 / 가비지 아웃" 철학은 파이프라인의 초반부에만 적용해야 한다. 즉, 받을 때는 최대한 용감하게 해석하되, 내부적으로는 정규화하고 나중 단계에서 엄격한 검증을 한다.

팀 관점에서의 효과

이런 식의 작은 개선들이 모이면 팀 전체의 불편함이 크게 줄어든다. 파싱 실패율이 떨어지면:

  • 에러 대응에 쓰는 시간이 줄어든다
  • 자동화의 신뢰도가 올라가서 더 많은 작업을 자동화할 용기가 생긴다
  • 사용자도 도구를 더 자신감 있게 쓴다

특히 내부 도구나 자동화 봇 같은 경우, 완벽한 입력보다는 실제 상황에 맞는 관대함이 훨씬 중요하다. 사용성이 올라가면 자연스럽게 그 도구의 사용 빈도가 늘어나고, 그게 다시 개선 피드백으로 돌아온다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.