aimake.log
AI 실전

클로드가 한글(HWP) 파일을 못 읽을 때 — kordoc으로 마크다운 변환하기

한글(HWP) 파일을 Claude Code에 던져본 적 있다면 결과를 아실 겁니다. 못 읽습니다. PDF는 읽긴 하는데, 스캔본이면 글자를 못 꺼내고, 표는 자주 깨지고, 페이지 단위로 통째로 넣다 보니 토큰도 많이 먹습니다. 한국에서 일하는…

2026.07.28 6 MIN

한글(HWP) 파일을 Claude Code에 던져본 적 있다면 결과를 아실 겁니다. 못 읽습니다. PDF는 읽긴 하는데, 스캔본이면 글자를 못 꺼내고, 표는 자주 깨지고, 페이지 단위로 통째로 넣다 보니 토큰도 많이 먹습니다. 한국에서 일하는 이상 HWP와 PDF는 피할 수 없는데 말이죠.

해결은 단순합니다. 문서를 모델에게 직접 주지 말고, 마크다운으로 바꿔서 주는 것. 이 글은 그 변환을 맡는 kordoc MCP를 연결하고, 실제 문서를 변환해서 결과까지 확인한 기록입니다.

왜 마크다운인가

모델 입장에서 문서 포맷은 셋으로 갈립니다.

입력 형태 모델이 받는 것 문제
HWP/HWPX 읽기 불가 바이너리 포맷. 시작조차 안 됨
PDF 원본 페이지 이미지+텍스트 토큰 비쌈, 표 깨짐, 스캔본은 부정확
마크다운 구조화된 텍스트 없음 — 제목·표·목록이 그대로 전달

같은 내용이라도 마크다운으로 주면 토큰은 줄고 구조는 살아납니다. 표가 표로, 제목 위계가 위계로 들어가니까 “3번 표에서 2차 대상 부서만 뽑아줘” 같은 요청이 정확해집니다.

kordoc 변환 파이프라인

HWP · HWPXPDF · DOCX · XLSX스캔 이미지kordoc포맷 감지 · OCR · 표 복원마크다운구조 보존Claude컨텍스트문서를 통째로 넣지 않는다 — 모델에게는 항상 마크다운만 도착한다

연결 — 명령어 한 줄

kordoc은 npm 패키지라 설치랄 게 따로 없습니다. Claude Code에 MCP 서버로 등록하면 끝입니다.

claude mcp add kordoc -- npx -y kordoc mcp

등록하면 세션 안에서 문서 변환 도구들이 열립니다. 핵심은 네 가지입니다.

  • parse_document — HWP3~5, HWPX, PDF, XLSX, DOCX, 이미지를 마크다운으로
  • parse_table — 문서에서 N번째 표만 뽑기
  • detect_format — 확장자가 아니라 실제 바이트로 포맷 판별
  • generate_document — 반대 방향. 마크다운을 공문서 서식의 HWPX로

실전 — 공문서 하나를 왕복시켜 봤다

실제 업무 문서를 블로그에 올릴 수는 없으니, kordoc의 역방향 기능으로 개조식 보고서 샘플을 먼저 만들고 그걸 다시 마크다운으로 변환하는 왕복 시험을 했습니다. 생성된 HWPX는 115.5KB — 표지, 목차, 로마숫자 장 번호, □○※ 항목 부호까지 실제 정부 서식 그대로입니다.

이 파일을 parse_document에 넣으면 이렇게 돌아옵니다. (실제 출력 그대로입니다)

[포맷: HWPX]
📑 문서 구조:
- 사내 AI 도구 도입 추진 계획
  - 추진 배경
  - 추진 계획
  - 기대 효과

## 추진 계획

□ 부서별 단계 도입

| 단계 | 대상 부서 | 기간 | 비고 |
| --- | --- | --- | --- |
| 1차 | 기획팀 | 2026. 8. | 시범 운영 |
| 2차 | 총무팀, 인사팀 | 2026. 9. | 확대 적용 |
| 3차 | 전 부서 | 2026. 10. | 전면 도입 |

눈여겨볼 것 세 가지.

  • 문서 구조 요약이 먼저 나옵니다. 긴 문서라도 모델이 전체 뼈대를 먼저 잡고 본문을 읽습니다.
  • 표가 마크다운 표로 살아서 나옵니다. PDF에서 자주 깨지는 부분이 여기인데, HWPX의 표 구조를 직접 읽으니 셀이 안 섞입니다.
  • 항목 부호(□○※)가 유지됩니다. 개조식 문서의 위계가 그대로 전달됩니다.

표만 필요하면 문서 전체를 넣을 이유도 없습니다.

parse_table(file_path, table_index=0)
→ | 단계 | 대상 부서 | 기간 | 비고 | ...

100페이지 보고서에서 예산 표 하나만 뽑아 넣는 식으로 쓰면, 컨텍스트에는 딱 필요한 것만 들어갑니다. CLAUDE.md 세팅 가이드에서 말한 원칙 — 전부 미리 넣지 말고 필요한 것만 — 이 문서에도 그대로 적용되는 거죠.

스캔본은 OCR 옵션으로

옛날 문서 중엔 스캔해서 만든 이미지 PDF가 많습니다. 텍스트 층이 없어서 그냥 넣으면 글자를 제대로 못 꺼내는데, kordoc은 ocr 옵션을 켜면 내장 OCR(PP-OCRv5 한국어 모델)로 글자를 꺼냅니다. 정상 페이지는 그대로 두고 텍스트가 없는 페이지만 골라 인식하는 방식이라, 섞인 문서도 한 번에 처리됩니다. 변환 결과에 NEEDS_OCR 경고가 보이면 이 옵션으로 재시도하면 됩니다.

어디에 쓰면 좋은가

  • 회의록·공문 아카이브를 지식베이스로 — 부서에 쌓인 HWP 뭉치를 일괄 변환해두면, 이후 세션에서 “작년 3분기 회의에서 이거 결정된 적 있어?” 같은 질문이 가능해집니다
  • 표 데이터 추출 — 엑셀로 안 주고 HWP 표로 주는 자료, parse_table로 바로 구조화
  • 역방향 활용 — 모델이 쓴 초안을 generate_document로 공문서 서식 HWPX로 뽑아 제출용으로

정리

  1. HWP는 모델이 못 읽고, PDF는 비싸고 잘 깨진다 — 문서는 마크다운으로 바꿔서 준다
  2. 연결은 claude mcp add kordoc -- npx -y kordoc mcp 한 줄
  3. 표만 필요하면 parse_table로 표만 — 컨텍스트에는 필요한 것만 넣는다
  4. 스캔본은 ocr 옵션 — 텍스트 없는 페이지만 골라 인식한다
  5. 반대 방향(마크다운 → 공문서 HWPX)도 된다 — 초안 작성까지 이어진다

다음 글부터는 이 블로그를 만든 과정 자체를 시리즈로 다룹니다 — 왜 티스토리가 아니라 워드프레스 + Cloudflare Pages였는지부터.

참고 문서kordoc — npmv4.2.9 · HWP3-5 / HWPX / PDF / XLSX / DOCX → MarkdownConnect Claude Code to tools via MCP — Claude DocsMCP 서버 등록 공식 문서
Author

재박

AI로 뭔가를 만들다 막힌 지점과, 그걸 어떻게 뚫었는지 기록합니다.

RSS
구독
광고
이어서 읽기
aimake.log AI로 실제 결과물 만드는 실전 기록 RSS