RAG 의 입구 — LangChain 으로 문서 읽기
박수현 · (사)한국정보공학기술사회 · 2026
Document(page_content, metadata)🎯 목표: 어떤 형식이든 동일한
Document객체로 통일해 다음 단계(분할·임베딩)에 전달한다.
💡 핵심: Loader 는 형식별 추출 차이를 흡수해 후속 단계가 입력 형식에 의존하지 않게 한다.

🖼️ Document Loader · PyPDFLoader·TextLoader·Docx2txtLoader·WebBaseLoader가 다양한 포맷을 Document(page_content, metadata)로 통합
Document = 본문 + 출처 정보page_content — 추출된 텍스트(문자열)metadata — 출처 정보(dict)source (파일 경로)page (PDF 쪽 번호)Document(
page_content="환불은 7일 이내…",
metadata={"source": "faq.pdf",
"page": 3}
)
🔑
metadata는 이후 출처 표시·문서 삭제의 키로 쓰인다 (Day3 CRUD).
from langchain_community.document_loaders import TextLoader
docs = TextLoader("faq.txt", encoding="utf-8").load()
print(len(docs)) # 1 (파일 1개 = Document 1개)
print(docs[0].page_content[:40])
print(docs[0].metadata) # {'source': 'faq.txt'}
Document 1개 (통째로)source 메타데이터 자동 부착📁 전체 예제:
2.langchain/7.RAG/2.loaders/2.1_text_loader.py
from langchain_community.document_loaders import PyPDFLoader
docs = PyPDFLoader("manual.pdf").load()
print(len(docs)) # 페이지 수 만큼 Document
print(docs[0].metadata) # {'source': 'manual.pdf', 'page': 0}
page 메타데이터 자동📁 전체 예제:
2.langchain/7.RAG/2.loaders/2.2_pdf_loader.py
# pip install docx2txt
from langchain_community.document_loaders import Docx2txtLoader
docs = Docx2txtLoader("report.docx").load()
print(docs[0].metadata) # {'source': 'report.docx'}
Document 1개)Document 로 변환 (파일 외 입력원)💡 Day3 웹서비스는 업로드 확장자에 따라 로더를 자동 선택한다 (
.pdf → PyPDF,.docx → Docx2txt).
🔑 이 분기 로직은 Day3
POST /api/index의 첫 단계에 해당한다 (Session 19).
source·page 만으로 부족할 때for d in docs:
d.metadata["doc_type"] = "규정"
d.metadata["dept"] = "HR"
🔑 메타데이터는 검색 필터·출처 표시·선택 삭제를 잇는 공통 키다.
Document 로 통일Document = page_content(내용) + metadata(출처)page 메타 자동