HWPX 압축 및 XML 파싱 보안 방어 (XXE / Zip Slip)
HWPX 문서는 내부가 Zip+XML 구조입니다. 임의 파일 업로드 시 경로 순회(Zip Slip)를 원천 차단하기 위해 디스크에 파일을 쓰지 않고 메모리 스트림 상에서 파싱하며, 표준 ElementTree 대신 defusedxml을 강제 사용합니다.
Windows 한글 인코딩 (CP949 vs UTF-8)
Windows 환경에서는 인코딩을 명시하지 않으면 시스템 로캘(CP949)로 인한 텍스트 손상이 발생합니다. 모든 파일 I/O 및 파서에 encoding='utf-8' 및 charset-normalizer 자동 감지를 적용합니다.
// 시스템 파이프라인 흐름
[사용자 드래그 앤 드롭]
└─> [frontend/app.js] (FormData 전송)
└─> [POST /api/convert]
└─> [backend/parsers/smart_router.py]
├─> [.pdf/.docx/.pptx/.xlsx] : markitdown_parser.py
├─> [.hwpx] : hwpx_parser.py (defusedxml)
└─> [.txt/.csv/.json] : text_parser.py
└─> [markdown_cleaner.py] (옵시디언 Frontmatter & 정제)
└─> [JSON 결과 반환 및 ZIP 압축 스트리밍]