mirror of
https://github.com/sotam0316/brain_dogfood.git
synced 2026-04-24 19:48:35 +09:00
2.3 KiB
2.3 KiB
버그 조치 보고서: 마크다운 문서 저장 시 데이터 소실 (2026-04-18)
1. 버그 내용
- 현상: 마크다운 형식의 메모(가장 흔하게는
roadmap.md)를 저장할 때, 본문 중간에 위치한 수평선(---) 이후의 내용이 모두 삭제되는 현상 발생. - 원인:
- 메모 하단에
$그룹,#태그를 추출하여 푸터로 모아주는 로직이 본문 내의 마크다운 수평선(---)과 그 뒤에 나오는 헤더(# 제목)를 '자동 생성된 푸터'로 오인함. - 정규식이 너무 탐욕적(Greedy)이었으며, 줄 단위 구분이 명확하지 않아 파일 끝까지의 모든 내용을 푸터로 간주하고 삭제함.
- 메모 하단에
2. 조치 사항
푸터 식별 로직 정교화 (app/utils/__init__.py)
- 수단: 정규식을 파일의 가장 끝에 위치한 **'수평선 + 순수 메타데이터 줄'**의 조합으로만 한정하도록 수정.
- 적용:
re.MULTILINE플래그를 활용하여 줄 시작(^)과 끝($)을 명확히 구분하고,#뒤에 공백이 있는 헤더는 절대로 푸터 구성 요소로 보지 않도록 개선. - 결과: 본문 중간의 수평선 및 마크다운 헤더 구조가 완벽히 보존됨.
태그 추출 정규식 개선
- 수단:
#뒤에 공백이나 숫자가 먼저 오는 경우(마크다운 헤더 등)를 제외하고, 문자로 시작하는 경우만 태그로 인식하도록 강화. - 적용:
(?<!\w)#([^\s\#\d\W][^\s\#]*)패턴 적용.
자동 제목 생성 로직 개선
- 수단: 첫 번째
---이전만 본문으로 보던 방식에서, 전체 내용 중 가장 상단의 유의미한 텍스트를 찾아 제목으로 사용하도록 변경.
3. 결과 및 확인
- 재현 스크립트(
scratch/repro_bug.py)를 통해roadmap.md와 같은 복합 마크다운 구조에서도 데이터가 삭제되지 않고 정확히 보존됨을 확인. - 의도적으로 추가한 푸터 메타데이터는 정상적으로 제거 후 재배치됨을 확인.
4. 향후 주의사항
- 텍스트 후처리 로직 수정 시 마크다운의 특수 기호와 충돌할 가능성을 항상 염두에 두어야 함.
- 특히
[\s\S]*와 같은 광범위한 매칭은 앵커($)가 있더라도 지양하고, 줄 단위 매칭을 우선할 것.