devlog.md

[블로그, 인스타 업로드_자동화] 바이브코딩 개발일지: 로컬 LLM이 지시를 무시한 이유_05

경제뉴스 블로그 자동화 프로젝트를 이어받아, 마지막 남아 있던 "Blogger에 초안이 진짜 저장되는가"를 실검증했다. 그 과정에서 로컬 소형 모델이 지시를 계속 무시한 진짜 이유를 찾아냈고, 기존 코드에 숨어 있던 HTML 중첩 버그 2건까지 잡았다. 교훈은 하나로 요약된다 — 소형 모델에겐 설명 말고 골격을 보여줘라.

1단계: 상태 점검과 회귀 테스트

인계 문서 3종을 읽고 상태를 확인했다. 자동 실행 2종은 정상이었고 회귀 테스트도 54건 전부 통과. 다만 테스트 끝에 "Ollama 서버를 띄우지 못했습니다"가 떠서 잠깐 긴장했는데, Ollama는 멀쩡히 떠 있었다. 실패 경로를 검증하려고 테스트가 일부러 서버 상태를 False로 모킹한 것이었다. 정상인데 에러처럼 보이는 출력이라 문서에 적어뒀다.

2단계: Blogger 초안 저장 실검증

이번 세션의 본 과제. 중복 방지 로직은 실제 API로 검증했지만 Blogger 쓰기까지는 미검증 상태였다. 3개 모드를 순서대로 돌렸다.

확인 항목결과
1회차 실행 → 초안 저장990단어, market-summary 라벨
2회차 연속 실행 → 건너뜀1.6초 종료 (LLM·Blogger 호출 자체가 없음)
substitute 모드개념 설명형 글이 concept-explainer 라벨로 저장
자동 실행 트리거4조합 중 1개만 건너뜀, 한글 블로그 쓰기 첫 확인

초안 6건의 HTML도 전수 검사했다. 태그 중첩, 마크다운 잔존, 분량 지시 누출 전부 없음.

3단계: 검증 중 발견한 문제 3가지

검증은 통과했지만 걸리는 게 셋 있었다. 첫째, 한글 메타 설명에 "투자 결정에 도움이 되는 분석을 제공합니다"가 들어갔다. "투자 조언 아님"이라는 시스템 프롬프트가 본문 톤에만 걸리고 메타 필드에는 안 걸리고 있었다. 메타는 검색 결과에 노출돼 넘길 수 없었다. 둘째, 모든 글이 도입 문단 없이 소제목부터 시작했다. 셋째, 테마 XML 원본이 사라져 있었다.

4단계: 도입 문단이 안 먹힌 진짜 이유

프롬프트에 "첫 소제목 앞에 도입 문단을 써라"를 넣고 돌렸는데 모델이 무시했다. 문장을 더 강하게 써도 소용없었다.

원인은 엉뚱한 데 있었다. 출력 형식 예시가 소제목은 h2, 문단은 p 순으로 적혀 있어, 모델이 "헤딩부터 시작하라"로 읽고 있었던 것이다. 산문 지시와 형식 예시가 충돌하면 모델은 형식 예시를 따른다. 설명을 지우고 실제 HTML 골격을 넣었더니 한·영 8건 전부 도입 문단을 만들어냈다.

5단계: 숨어 있던 HTML 중첩 버그

도입 문단이 생기자 잘못된 HTML이 튀어나왔다. 파서가 헤딩을 블록 맨 앞에서만 분리해서, 도입 문단과 소제목이 한 덩어리로 오면 문단 태그가 헤딩까지 통째로 감쌌다.

고치고 나니 또 다른 형태가 남았다. 6회 중 1회꼴 간헐 버그라 4번을 더 돌려도 재현이 안 됐다. 재현을 노리는 대신 코드를 읽었더니 "블록 태그로 시작하면 그대로 둔다"는 분기가 검사 없이 통과시키고 있었다. 합성 입력으로 결함을 증명하고 고쳤다. 두 버그 모두 기존 글 경로에도 있던 공용 버그였다.

6단계: 테마 복구와 사실 정정

사라졌던 테마 XML을 다시 받아 검증했다. 그런데 이 파일 덕분에 내가 틀린 말을 했다는 걸 알았다. "도입 문단이 없어서 드롭캡이 적용될 곳이 없다"고 했는데, 실제 선택자는 형제 중 첫 문단을 잡는 방식이라 드롭캡은 글 중간 소제목 아래에 찍히고 있었다. 조치는 옳았지만 근거가 틀려 문서를 정정했다.

Trouble Shooting

증상원인해결 방법
테스트 끝에 "Ollama를 띄우지 못했습니다" 출력실패 경로 검증용으로 서버 상태를 일부러 False로 모킹정상 동작. 문서에 명시
도입 문단 지시를 모델이 무시출력 형식 예시가 헤딩을 먼저 나열해 "헤딩부터 시작"으로 읽힘HTML 골격 예시로 교체 → 8/8 성공
문단 태그가 헤딩을 통째로 감싸는 잘못된 HTML파서가 헤딩을 블록 맨 앞에서만 분리블록 중간의 블록레벨 태그에서 잘라 앞뒤를 따로 처리
수정 후에도 6회 중 1회 중첩, 재현 불가"블록 태그로 시작하면 그대로 둔다" 분기가 검사 없이 통과합성 입력으로 증명 후 겉 태그를 벗기는 함수 추가
메타 설명에 소제목과 줄바꿈이 섞여 들어감모델이 메타 줄을 통째로 빠뜨려 본문에서 대체 생성됨대체 생성 시 헤딩 제거 + 공백 정규화
테스트 실패, 값이 "m"으로 나옴테스트 헬퍼가 메타 줄을 자동으로 붙이고 있었음파서를 직접 호출하도록 변경
12분간 진행 상황이 안 보임출력을 파일로 리다이렉트해 파이썬 버퍼링에 걸림-u 옵션 사용을 문서에 명시

느낀 점 / 다음에 할 일

가장 크게 남은 건 지시가 안 먹히면 문장을 더 세게 쓸 게 아니라 형식 예시를 의심하라는 것이다. 정작 답은 출력 예시의 나열 순서에 있었다.

간헐 버그도 다르게 다뤘다. 6회 중 1회 나오는 버그를 재현하려고 계속 돌리는 건 도박이다. 코드를 읽고 합성 입력으로 증명하는 쪽이 훨씬 빨랐다.

회귀 테스트는 54건에서 65건으로 늘었고, 검증 스크립트도 저장소로 옮겨 다음에 바로 쓸 수 있게 했다. 다음 세션은 커밋이 1건뿐인 저장소 정리부터다.

댓글