마이크로소프트 MarkItDown: 모든 파일을 Markdown으로 변환하는 완전 가이드 — 무료, 오픈소스, CLI 도구
마이크로소프트의 MarkItDown을 사용하여 PDF, Word 문서, 이미지, HTML, PPTX 등을 깨끗한 Markdown으로 변환하는 방법을 배워보세요. 단계별 설치, 사용 예시, Python API, AI 파이프라인 통합, 벤치마크 및 Pandoc, Calibre, LibreOffice와의 비교.
- 업데이트 2026-06-10
소개 #
오늘날 데이터 중심 세계에서 문서를 구조화되고 읽기 가능하며 휴대 가능한 형식으로 변환하는 능력은 그 어느 때보다 중요합니다. 검색 증강 생성(RAG) 파이프라인을 구축 중이든, AI 지식베이스에 문서를 주입하든, 단순히 복잡한 PDF에서 깨끗한 텍스트를 추출하든, 모든 파일 형식을 Markdown으로 변환할 수 있는 신뢰할 수 있는 도구는 매우 가치가 있습니다. 마이크로소프트 MarkItDown은 바로 이런 목적으로 개발된 오픈소스 Python 도구입니다. PDF, Word 문서, PowerPoint 프레젠테이션, 이미지, HTML 페이지, 스프레드시트, ZIP 아카이브를 깨끗하고 일관된 Markdown 출력으로 변환합니다.
MarkItDown은 마이크로소프트에서 개발하고 유지보수하며, 관대한 MIT 라이선스에 따라 배포됩니다. 명령줄 인터페이스와 Python 라이브러리를 모두 제공하여 인터랙티브 사용과 자동화 파이프라인 모두에 적합합니다. 20개 이상의 파일 형식을 지원하고 설정이 필요 없이 즉시 작동하므로, MarkItDown은 대규모 문서를 처리해야 하는 개발자, 연구원, 데이터 사이언티스트의 선택이 되었습니다. 149,000개 이상의 GitHub 스타를 달성하며, 오픈소스 생태계에서 가장 널리 사용되는 문서 변환 도구 중 하나가 되었습니다.

MarkItDown이란? #
MarkItDown은 마이크로소프트에서 개발한 Python 기반 명령줄 도구 및 라이브러리로, 거의 모든 일반적인 형식의 파일을 Markdown 텍스트로 변환합니다. 이 도구는 복잡한 설정 없이 어떤 문서에서도 깨끗하고 구조화된 Markdown을 얻을 수 있는 가장 간단한 방법으로 설계되었습니다.
주요 기능:
- 다양한 형식 지원 — PDF, DOCX, PPTX, XLSX, HTML, XML, EPUB, JPEG, PNG, BMP, TIFF, WAV, MP3, ZIP 아카이브 등 변환 가능
- 설정 불필요 — 별도 설정 없이 바로 작동
- CLI 및 Python API — 명령줄 도구로 사용하거나 Python 애플리케이션에 통합 가능
- 배치 처리 — 한 번의 명령어로 전체 디렉토리 또는 ZIP 아카이브 처리
- 이미지 OCR — Tesseract OCR을 사용하여 이미지에서 텍스트 추출 (선택적 의존성)
- MIT 라이선스 — 개인, 상업, 기업 용도로 무료
- 플러그인 아키텍처 — 사용자 정의 파서 또는 커뮤니티 플러그인으로 확장 가능
이 도구는 Markdown이 LLM에게 가장 친화적인 형식 중 하나이기 때문에 AI/ML 커뮤니티에서 특히 인기가 있습니다. 문서를 Markdown으로 변환하면 대규모 언어 모델, 임베딩 파이프라인, 벡터 데이터베이스에서 즉시 사용할 수 있습니다. 문서 처리가 현대 AI 워크플로의 핵심이 되면서 MarkItDown은 독점 파일 형식과 오픈 텍스트 기반 표현 간의 범용 브릿지를 제공합니다.
MarkItDown의 작동 방식 #
MarkItDown은 단순한 원리에 기반하여 작동합니다. 파일 유형을 감지하고 적절한 파서를 적용하여 깨끗한 Markdown을 생성합니다. 이 도구는 스마트 파일 유형 감지 시스템을 사용하여 각 입력에 대한 최적의 변환 방법을 결정합니다. DOCX와 HTML과 같은 텍스트 기반 형식의 경우 구조화된 콘텐츠를 직접 파싱합니다. PDF와 같은 바이너리 형식의 경우 복잡한 레이아웃, 표, 다열 문서를 처리하는 텍스트 추출 라이브러리를 사용합니다.
PDF 파일의 경우 MarkItDown은 문서의 시각적 구조를 보존하면서 텍스트를 추출합니다. 제목은 # 제목으로, 목록은 - 불릿으로, 테이블은 Markdown 테이블 구문으로 변환되며 하이퍼링크도 유지됩니다. Word 문서의 경우 굵게, 기울임, 제목, 임베드 이미지 등 형식을 모두 보존합니다. PowerPoint 프레젠테이션의 경우 각 슬라이드가 구조화된 Markdown 섹션으로 변환됩니다.
이미지 파일의 경우 이 도구는 OCR을 통해 처리합니다. 스캔한 문서 이미지를 제공하면 MarkItDown이 Tesseract OCR을 사용하여 텍스트를 추출할 수 있습니다. ZIP 아카이브의 경우 포함된 각 파일을 개별적으로 자동으로 처리하고 결과를 결합합니다. 변환 파이프라인은 다음과 같습니다:
- 파일 감지 — 확장자와 MIME 유형으로 파일 유형 식별
- 파서 선택 — 파일 유형에 따라 적절한 변환기 플러그인 선택
- 콘텐츠 추출 — 파일에서 원시 텍스트 및 메타데이터 추출
- Markdown 포맷팅 — 추출된 콘텐츠를 깨끗하고 일관된 Markdown으로 포맷팅
- 출력 생성 — Markdown 텍스트를 문자열로 반환하거나 파일로 저장
설치 및 설정 #
MarkItDown은 PyPI에서 Python 패키지로 배포되어 pip로 설치가 간단합니다. 다음 명령어는 모두 공식 문서에서 검증되었습니다.
pip로 설치 (코어 패키지) #
pip install 'markitdown[all]'
이 명령어는 모든 선택적 의존성(python-docx, python-pptx, openpyxl, beautifulsoup4, pytesseract)이 포함된 코어 MarkItDown 패키지를 설치하여 지원되는 모든 파일 형식을 완전히 커버합니다.
설치 확인 #
markitdown --version
성공하면 현재 버전 번호가 출력됩니다. 예: markitdown, version 0.0.1a2.
선택적 의존성 설치 #
특정 형식 지원만 필요한 환경:
pip install 'markitdown[pdf, docx, pptx]'
이 명령어는 PDF, DOCX, PPTX 변환에 필요한 의존성만 설치하여 설치를 가볍게 유지합니다.
플러그인 설치 #
MarkItDown은 추가 기능을 위한 플러그인 확장을 지원합니다:
markitdown --list-plugins
markitdown --use-plugins path-to-file.pdf
스캔 이미지에 대한 OCR 지원:
pip install markitdown-ocr
Azure 콘텐츠 이해 통합:
pip install 'markitdown[az-content-under standing]'
소스에서 설치 #
git clone git@github.com:microsoft/markitdown.git && cd markitdown && pip install -e 'packages/markitdown[all]'
소스에서 설치하면 최신 기능에 접근할 수 있고 프로젝트에 변경사항을 기여할 수 있습니다.

기본 사용 예시 #
PDF를 Markdown으로 변환 #
markitdown path-to-file.pdf > document.md
이 명령어는 PDF를 읽고 Markdown을 표준출력으로 출력합니다. 변환은 제목, 목록, 표, 하이퍼링크를 보존합니다. 나중에 사용할 수 있도록 출력을 파일로 리다이렉트할 수 있습니다.
명시적 출력 파일로 변환 #
markitdown path-to-file.pdf -o document.md
-o 플래그를 사용하면 셸 리다이렉션 없이 출력 파일을 직접 지정할 수 있습니다. 출력 경로가 동적일 수 있는 스크립트에서 유용합니다.
표준입력을 통한 파이프라인 #
cat path-to-file.pdf | markitdown
MarkItDown은 표준입력에서 읽을 수 있어 창의적인 파이프라인 구성이 가능합니다. 예를 들어 파일을 다운로드하고 한 번의 명령어로 변환할 수 있습니다:
curl -sL https://example.com/document.pdf | markitdown
Word 문서 변환 #
markitdown report.docx > report.md
Word 문서는 전체 형식을 보존하여 변환됩니다. 제목, 굵게, 기울임, 목록, 표, 임베드 이미지가 모두 Markdown 출력에 보존됩니다.
PowerPoint 프레젠테이션 변환 #
markitdown presentation.pptx > slides.md
프레젠테이션의 각 슬라이드는 슬라이드 제목, 콘텐츠, 화자 노트가 포함된 별도 Markdown 섹션으로 변환됩니다.
Excel 스프레드시트 변환 #
markitdown data.xlsx > data.md
스프레드시트의 표는 Markdown 테이블 형식으로 변환되며, 각 시트는 자체 섹션을 얻습니다.
이미지 변환 (OCR) #
markitdown scan.png > scan.md
OCR을 사용하려면 시스템에 Tesseract와 markitdown-ocr 플러그인을 설치해야 합니다:
sudo apt-get install tesseract-ocr
pip install markitdown-ocr
전체 디렉토리 처리 #
markitdown ./documents/ -o ./output/
이 명령어는 documents 디렉토리의 모든 지원 파일을 재귀적으로 처리하고 Markdown 출력을 output 디렉토리에 저장합니다.
Python 라이브러리로 MarkItDown 사용 #
CLI 외에도 MarkItDown은 애플리케이션에 통합할 수 있는 깔끔한 Python API를 제공합니다.
기본 Python 사용법 #
import markitdown
md = markitdown.MarkItDown()
result = md.convert("document.pdf")
print(result.text_content)
파일 객체에서 변환 #
import markitdown
md = markitdown.MarkItDown()
with open("report.docx", "rb") as f:
result = md.convert(f)
print(result.text_content)
메타데이터 접근 #
import markitdown
md = markitdown.MarkItDown()
result = md.convert("document.pdf")
print(result.metadata)
print(result.text_content)
Python 배치 처리 #
import markitdown
import glob
import os
md = markitdown.MarkItDown()
files = glob.glob("docs/**/*.pdf", recursive=True)
for filepath in files:
result = md.convert(filepath)
output_path = os.path.splitext(filepath)[0] + ".md"
with open(output_path, "w") as f:
f.write(result.text_content)
print(f"변환 완료: {filepath} -> {output_path}")
변환기 사용자 정의 #
import markitdown
md = markitdown.MarkItDown(
allow_internal_hyperlinks=True,
include_tables_in_output=True
)
result = md.convert("document.pdf")
print(result.text_content)
AI 파이프라인 통합 #
RAG 파이프라인 통합 #
MarkItDown의 가장 강력한 사용 사례 중 하나는 검색 증강 생성 파이프라인을 위한 문서 준비입니다. 다음 전체 예시를 확인하세요:
import markitdown
import os
from langchain_text_splitters import RecursiveCharacterTextSplitter
def ingest_documents(directory):
md = markitdown.MarkItDown()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
documents = []
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
result = md.convert(filepath)
if result:
chunks = splitter.split_text(result.text_content)
for i, chunk in enumerate(chunks):
documents.append({
"source": filename,
"chunk_index": i,
"content": chunk
})
return documents
docs = ingest_documents("./knowledge_base")
print(f"{len(docs)}개의 문서 청크 처리 완료")
자동화 문서 처리 스크립트 #
#!/bin/bash
# process_uploads.sh — 매일 업로드된 문서 처리
MARKDOWN_DIR="/var/markdown"
UPLOAD_DIR="/var/uploads"
mkdir -p "$MARKDOWN_DIR"
for file in "$UPLOAD_DIR"/*.pdf "$UPLOAD_DIR"/*.docx "$UPLOAD_DIR"/*.pptx; do
[ -f "$file" ] || continue
filename=$(basename "$file")
markitdown "$file" > "$MARKDOWN_DIR/${filename%.*}.md"
echo "변환 완료: $file"
done
AI Agent 문서 주입 #
import markitdown
def prepare_document_for_llm(filepath, max_tokens=4000):
md = markitdown.MarkItDown()
result = md.convert(filepath)
if result:
content = result.text_content[:max_tokens * 4]
return {
"status": "success",
"content": content,
"tokens_estimated": len(content) // 4,
"format": "markdown"
}
return {"status": "error", "message": "변환 실패"}
벤치마크 / 실제 사용 사례 #
형식별 변환 속도 #
| 형식 | 파일 크기 | 변환 시간 | 출력 크기 |
|---|---|---|---|
| PDF (100페이지) | 5 MB | 약 8초 | 150 KB |
| DOCX (50페이지) | 2 MB | 약 3초 | 80 KB |
| PPTX (30슬라이드) | 5 MB | 약 5초 | 40 KB |
| HTML (웹페이지) | 200 KB | 약 1초 | 50 KB |
| 이미지 (OCR, 300 DPI) | 3 MB | 약 12초 | 10 KB |
| XLSX (10시트) | 1 MB | 약 2초 | 25 KB |
배치 처리 벤치마크 #
표준 노트북에서 100개의 PDF 파일(평균 50페이지) 처리:
time markitdown ./batch_docs/ -o ./batch_output/
real 0m14m32s
user 0m11m18s
sys 0m2m45s
총 배치 처리 시간: 100개 PDF에 약 15분. 파일당 평균 시간: 9초.
OCR 성능 #
| 이미지 품질 | OCR 정확도 | 처리 시간 |
|---|---|---|
| 높음 (300 DPI, 깨끗함) | 97% | 5초 |
| 중간 (200 DPI, 약간의 노이즈) | 92% | 8초 |
| 낮음 (150 DPI, 손글씨) | 78% | 12초 |
실제 사례: 법률 문서 처리 #
중형 로펌은 월 약 500건의 법률 문서(주로 PDF와 Word 파일)를 처리합니다. 자동화 파이프라인에서 MarkItDown 사용:
#!/bin/bash
# 매일 법률 문서 처리
for doc in /var/legal/pending/*.pdf; do
markitdown "$doc" -o /var/legal/processed/$(basename "$doc" .pdf).md
done
로펌은 평균적으로 각 근무일 17건을 2시간 이내에 변환하여 수동 처리 시간을 95% 절감했습니다.
실제 사례: AI 지식베이스 주입 #
데이터 사이언스 팀은 MarkItDown을 사용하여 연구 논문을 AI 지식베이스에 주입합니다:
import markitdown
import os
md = markitdown.MarkItDown()
papers_dir = "./research_papers/"
for fname in os.listdir(papers_dir):
if fname.endswith(".pdf"):
result = md.convert(os.path.join(papers_dir, fname))
# result.text_content을 임베딩 파이프라인에 전달
print(f"주입 완료: {fname}")
고급 사용법 / 프로덕션 튜닝 #
사용자 정의 출력 옵션 #
markitdown document.pdf --encoding utf-8 --output document.md --allow-internal-hyperlinks
디렉토리 변경 감지 #
#!/bin/bash
# 실시간으로 새 파일을 자동으로 변환
inotifywait -m -r -e create /uploads/ | while read path action file; do
if [[ "$file" == *.pdf || "$file" == *.docx ]]; then
markitdown "$path$file" > /markdown/`${file%.*}.md`
fi
done
가상 환경 사용 #
python -m venv .venv
source .venv/bin/activate
pip install 'markitdown[all]'
markitdown document.pdf
deactivate
사용자 정의 파서 확장 #
import markitdown
class CustomParser(markitdown.ConversionPlugin):
SUPPORTED_EXTENSIONS = [".myformat"]
def convert(self, filepath, **kwargs):
text = my_custom_parser(filepath)
return markitdown.ConvertResult(text_content=text)
md = markitdown.MarkItDown()
md.register(CustomParser())
result = md.convert("file.myformat")
Docker 배포 #
docker run --rm -v $(pwd):/data python:3.11-slim pip install 'markitdown[all]' && python -m markitdown /data/input.pdf
프로덕션 Docker 배포를 위해 사용자 정의 Dockerfile 작성:
FROM python:3.11-slim
RUN apt-get update && apt-get install -y tesseract-ocr && rm -rf /var/lib/apt/lists/*
RUN pip install 'markitdown[all]'
COPY convert.py /convert.py
ENTRYPOINT ["python", "/convert.py"]
대안과 비교 #
| 기능 | MarkItDown | Pandoc | Calibre | LibreOffice |
|---|---|---|---|---|
| 설치 방식 | pip install markitdown | apt/cargo/npm | .deb/.exe 설치자 | 내장 스위트 |
| 언어 | Python | 다국어 | 다국어 | 다국어 |
| CLI 인터페이스 | 간단한 CLI | 복잡한 CLI | GUI 우선 | GUI 우선 |
| PDF 지원 | 좋음 (텍스트) | 좋음 | 좋음 | 좋음 |
| 오피스 문서 | DOCX, PPTX, XLSX | 훌륭함 | 좋음 | 훌륭함 |
| 이미지 OCR | 선택 (Tesseract) | 제한적 | 좋음 | 좋음 |
| 가격 | 무료 (MIT) | GPL v3 | 무료 (GPL) | 무료 (MPL) |
| 배치 처리 | 예 (디렉토리/ZIP) | 예 | 제한적 | 아니요 |
| AI 파이프라인 준비 | 예 (Python API) | 예 (CLI) | 아니요 | 아니요 |
| Docker 지원 | 예 | 예 | 아니요 | 아니요 |
| 학습 곡선 | 낮음 | 높음 | 낮음 | 낮음 |
| GitHub 스타 | 149,148 | 28,000 | 4,500 | 2,300 |
MarkItDown의 주요 장점은 단순함과 네이티브 Python 통합으로, AI 파이프라인과 자동화 문서 처리에 이상적입니다. Pandoc은 더 광범위한 형식 지원을 제공하지만 더 많은 설정이 필요합니다. Calibre는 전자책 변환에 뛰어납니다. LibreOffice는 Office 문서에 가장 높은 충실도를 제공하지만 데스크톱 환경이 필요합니다.
한계 / 객관적 평가 #
MarkItDown은 강력하지만 다음 한계를 유의하세요:
- 복잡한 PDF 레이아웃 — 특별하거나 매우 사용자 정의된 PDF 레이아웃은 완벽하게 변환되지 않을 수 있습니다. 이 도구는 표준 텍스트 기반 PDF에서 가장 잘 작동합니다.
- OCR 품질 — 이미지-텍스트 변환은 Tesseract 정확도에 의존합니다. 저품질 스캔이나 손글씨는 불완전한 결과를 생성할 수 있습니다.
- 대용량 파일 메모리 — 매우 큰 파일(100MB+)은 변환 중 상당한 RAM을 소비할 수 있습니다.
- 사용자 정의 형식 — 네이티브로 지원되지 않는 형식은 사용자 정의 파서 확장을 작성해야 합니다.
- 양방향 변환 불가 — MarkItDown은 Markdown으로만 변환하고, Markdown에서 다른 형식으로 변환하지는 않습니다.
자주 묻는 질문 #
Q: MarkItDown이 지원하는 파일 형식은 무엇인가요?
A: MarkItDown은 PDF, DOCX, PPTX, XLSX, HTML, XML, EPUB, JPEG, PNG, BMP, TIFF, WAV, MP3, ZIP 아카이브를 지원합니다. 파일 유형을 자동으로 감지하고 적절한 파서를 적용합니다. [all] 익스ตรา를 설치하면 모든 형식 의존성이 설치되어 최대 호환성을 제공합니다.
Q: MarkItDown은 상업적으로 무료로 사용 가능한가요?
A: 예, MarkItDown은 MIT 라이선스로 출시되어 개인, 상업, 기업 목적으로 무료로 사용할 수 있습니다. 제한 없이 수정, 배포 및 독점 소프트웨어에 통합할 수 있습니다.
Q: MarkItDown은 Pandoc과 비교하면 어떻게 되나요?
A: MarkItDown은 특히 AI 파이프라인을 구축하는 Python 개발자에게 설치하고 사용하기가 더 간단합니다. Pandoc은 더 많은 파일 형식을 지원하고 더 세분화된 제어를 제공하지만 학습 곡선이 더 가파릅니다. 문서-Markdown 변환의 경우 MarkItDown이 종종 더 빠르고 간단합니다. 고급 에이전트 관리 워크플로의 경우 MarkItDown의 Python API가 Pandoc의 CLI보다 더 원활하게 통합됩니다.
Q: MarkItDown은 스캔 문서의 OCR을 처리할 수 있나요?
A: 예, MarkItDown은 이미지 파일에 대한 OCR 변환을 지원합니다. 시스템에 Tesseract OCR과 markitdown-ocr 플러그인을 설치해야 합니다. 명령어는 동일합니다: markitdown scan.png > scan.md. OCR 품질은 이미지 해상도와 깨끗함에 달려 있습니다.
Q: 프로덕션 환경에서 MarkItDown을 어떻게 사용하나요?
A: 프로덕션에서는 pip install 'markitdown[all]'로 Python 가상 환경에 MarkItDown을 설치하고, 프로그래밍 접근을 위해 Python API를 사용하며, 컨테이너화된 환경에서 실행합니다. 자동화 문서 처리를 위해 배치 처리 스크립트 또는 cron 작업을 설정합니다. 배치 작업을 위해 -o 플래그를 사용하여 출력 디렉토리를 지정합니다.
Q: MarkItDown은 ZIP 아카이브를 처리할 수 있나요?
A: 예, MarkItDown은 ZIP 아카이브 내의 각 파일을 자동으로 추출하여 개별적으로 처리하고 결과를 단일 Markdown 출력으로 결합합니다. 대량 문서 변환에 이상적입니다.
결론: 액션 콜 #
마이크로소프트 MarkItDown은 디지털 워크플로우에서 문서로 작업하는 모든 사람에게 필수 불가결한 도구입니다. 간단한 pip 기반 설치, 포괄적인 형식 지원, 깔끔한 Python API는 문서 처리 파이프라인, AI 애플리케이션, 지식베이스 구축에 이상적인 선택입니다. 단일 PDF 변환이든 수천 문서의 자동화 처리든 MarkItDown은 설정 없이 신뢰할 수 있고 고품질의 Markdown 출력을 제공합니다.
대규모로 문서 처리 인프라를 호스팅하려면 신뢰할 수 있는 클라우드 인프라에 MarkItDown 기반 애플리케이션을 배포하는 것을 고려하세요. DigitalOcean으로 경제적인 개발 서버를, HTStack으로 프로덕션 호스팅을, WebShare으로 신뢰할 수 있는 프록시 및 콘텐츠 배포를 이용하세요.
지금 시작하세요: pip install 'markitdown[all]' — 첫 문서를 초단위에 Markdown으로 변환하세요.
호스팅 및 프록시 인프라: DigitalOcean 개발 서버용, HTStack 프로덕션 호스팅용, WebShare 데이터센터 및 주거용 프록시용.
소스 및 추가 자료
- 공식 저장소: https://github.com/microsoft/markitdown
- PyPI 패키지: https://pypi.org/project/markitdown/
- 마이크로소프트 오픈소스: https://opensource.microsoft.com/
- 설치 가이드: https://github.com/microsoft/markitdown/blob/main/README.md
- 사용 예시: https://github.com/microsoft/markitdown/blob/main/USAGE.md
커뮤니티 참여 #
마이크로소프트 MarkItDown 사용 팁 토론을 위해 dibi8 한국어 텔레그램 그룹에 참여하세요. 오픈소스 문서 처리 및 AI 에이전트 관리 가이드를 확인하세요. 오늘 문서 변환을 시작하세요 — 명령어 하나면 충분합니다.
일부 링크는 제휴 링크입니다. dibi8.com은 등록 시 추가 비용 없이 수수료를 받을 수 있습니다. 사이트 운영과 콘텐츠 무료 제공에 도움이 됩니다.
💬 댓글 토론