PDF 파싱은 단순한 텍스트 추출이 아닙니다. 레이아웃, 표, 각주, 스캔 품질까지 함께 봐야 검색 가능한 데이터가 됩니다. 이 글은 Unstructured란 무엇인가와 LlamaParse란 무엇인가를 PDF 파싱 관점에서 연결해 정리합니다.
이런 분께 추천합니다 #
- PDF 기반 RAG를 운영하는 팀
- 표와 레이아웃이 중요한 리포트를 다루는 개발자
- 스캔 문서 OCR 이후 파싱 품질을 높이고 싶은 분
왜 중요한가 #
PDF는 화면에서 보기에는 멀쩡해도 파싱하면 순서가 꼬이기 쉽습니다. 컬럼이 두 개인 문서, 표가 많은 문서, 이미지가 섞인 보고서, 스캔본은 모두 별도 처리가 필요합니다. 그래서 PDF 파싱은 검색 품질의 출발점입니다.
구현 흐름 #
- PDF 유형을 분류합니다.
- 텍스트 기반인지 스캔 기반인지 판단합니다.
- 레이아웃과 표를 추출합니다.
- OCR이 필요한 페이지를 분리합니다.
- chunking과 embedding으로 넘깁니다.
텍스트가 깨지는 구간은 LlamaParse처럼 구조화 출력에 강한 도구가 유리하고, 다양한 소스와 함께 ingest하려면 Unstructured가 맞습니다. 이미지가 많은 PDF라면 Vision API 계열 흐름을 보강하는 편이 좋습니다.
아키텍처 도식 #
실무에서는 PDF를 한 번에 다루지 말고 계층을 나누는 편이 좋습니다. 먼저 파서를 두고, 다음에 chunker, embedding, vector store, retrieval을 분리합니다. 이렇게 하면 실패 지점을 좁히기 쉽습니다.
체크리스트 #
- 텍스트 PDF와 스캔 PDF를 먼저 분리하기
- 표와 머리말, 꼬리말을 별도 규칙으로 다루기
- OCR 페이지는 품질 점검을 따로 하기
- chunk 길이와 문단 경계를 동시에 조정하기
- 검색 결과와 원문 매칭을 꼭 검증하기
결론 #
PDF 파싱은 도구 선택보다 파이프라인 분리가 더 중요합니다. 문서 구조가 복잡하면 LlamaParse와 Unstructured를 중심으로 설계하고, 이미지가 섞이면 Vision API 계열 단계를 보강하는 방식이 안정적입니다.
참고한 자료 #
- Unstructured docs: https://docs.unstructured.io/
- LlamaIndex docs: https://developers.llamaindex.ai/
- OpenAI Vision / Responses docs: https://platform.openai.com/docs/guides/responses-vs-chat-completions