Skip to content

LangChain Document Loader 시작하기: 단계별 가이드 (2025 업데이트)

Updated on

LangChain은 2023년 이후 매우 빠르게 발전했습니다. Retrieval-Augmented Generation(RAG)을 탐색하거나, 챗 기반 애플리케이션을 만들거나, 외부 지식을 LLM 파이프라인에 통합하고 있다면 이제 Document Loader는 가장 중요한 컴포넌트 중 하나입니다.

이 가이드는 LangChain Document Loader가 (2025 버전 기준으로) 어떻게 동작하는지에 대해 깔끔하고 정확하며 최신 이해를 제공하고, 올바르게 사용하는 방법과 그 위에 실전 애플리케이션을 구축하는 방법을 설명합니다.


LangChain이란?

LangChain은 다음과 같은 도구들을 활용해 LLM 기반 애플리케이션을 구축하도록 돕는 프레임워크입니다:

  • Document Loaders
  • Text Splitters
  • Vector Stores
  • Retrievers
  • Runnables & LCEL (LangChain Expression Language)

최신 LangChain(0.1–0.2+)에서 애플리케이션을 구축하는 파이프라인은 다음과 같습니다:

Load → Split → Embed → Store → Retrieve → Generate

Document Loader는 맨 처음 단계인
실제 세상의 콘텐츠를 LLM 친화적인 “Document” 객체로 가져오는 역할을 담당합니다.


LangChain Document Loader란?

LangChain의 Document는 두 개의 필드를 갖습니다:

{
  "page_content": "<raw text>",
  "metadata": {...}
}

Document Loader는 파일, URL, API, PDF, CSV, YouTube transcript 등의 외부 소스를 Document 객체 리스트로 변환합니다.

예시: .txt 파일 로드

from langchain_community.document_loaders import TextLoader
 
loader = TextLoader("./data/sample.txt")
docs = loader.load()

결과:

{
    "page_content": "Welcome to LangChain!",
    "metadata": { "source": "./data/sample.txt" }
}

LangChain의 Document Loader 유형

LangChain에는 수십 개의 Loader가 있지만, 크게 세 가지 카테고리로 나눌 수 있습니다.


1. Transform Loader (로컬 파일 포맷)

구조화/비구조화 파일을 로드합니다:

CSV 예시 (최신 import 방식)

from langchain_community.document_loaders import CSVLoader
 
loader = CSVLoader("./data/data.csv")
docs = loader.load()

각 CSV 행(row)이 하나의 Document가 됩니다.

기타 Transform Loader 예:

  • PyPDFLoader
  • JSONLoader
  • Docx2txtLoader
  • UnstructuredFileLoader
  • PandasDataFrameLoader

2. Public Dataset / Web Service Loader

온라인 소스에서 텍스트를 직접 가져옵니다.

Wikipedia 예시

from langchain_community.document_loaders import WikipediaLoader
 
loader = WikipediaLoader("Machine_learning")
docs = loader.load()

3. Proprietary / 인증 필요한 소스 Loader

다음과 같은 내부 서비스에 사용됩니다:

  • 사내 API
  • 내부 CMS
  • SQL 데이터베이스
  • SharePoint
  • Slack
  • Gmail

이들은 보통 인증 정보가 필요하며, 커스텀 Loader를 구현해야 할 때가 많습니다.


Document Loader는 현대 RAG 파이프라인에서 어디에 위치하나요?

Document Loader는 원시 텍스트를 로드하는 역할만 합니다.
다음은 하지 않습니다:

  • 임베딩 생성
  • “chain” 구성
  • “memory vector” 생성

(자주 발생하는 오해입니다.)

올바른 파이프라인:

Loader → Splitter → Embeddings → Vector Store → Retriever → LLM

PDF 예시:

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
 
loader = PyPDFLoader("file.pdf")
docs = loader.load()
 
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)
 
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(chunks, embeddings)

최신 LangChain Document Loader 활용 사례

예시 1: 인덱싱을 위한 파일 로딩 및 청킹

from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
 
loader = TextLoader("article.txt")
docs = loader.load()
 
splitter = RecursiveCharacterTextSplitter(
    chunk_size=800, chunk_overlap=150
)
chunks = splitter.split_documents(docs)

예시 2: 데이터 이해를 위한 CSV 적재

from langchain_community.document_loaders import CSVLoader
 
loader = CSVLoader("data.csv")
docs = loader.load()
 
for doc in docs:
    print(doc.page_content)

예시 3: YouTube Transcript 로딩 (2025 기준 올바른 버전)

from langchain_community.document_loaders import YoutubeLoader
 
loader = YoutubeLoader.from_youtube_url(
    "https://www.youtube.com/watch?v=O5nskjZ_GoI",
    add_video_info=True
)
docs = loader.load()

토크나이저나 모델을 직접 다룰 필요는 없습니다 — LangChain이 텍스트 로딩만 책임집니다.


예시 4: Pandas DataFrame → Document 변환

from langchain_community.document_loaders import DataFrameLoader
 
loader = DataFrameLoader(dataframe, page_content_column="text")
docs = loader.load()

LangChain Document Loader의 실전 활용 예

아래는 유용하면서도 최신 패턴을 반영한 세 가지 예시입니다.


ChatGPT 스타일의 PDF QA 앱 만들기 (현대식 RAG)

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
 
# 1. Load
pages = PyPDFLoader("./SpaceX.pdf").load()
 
# 2. Split
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, overlap=150)
chunks = splitter.split_documents(pages)
 
# 3. Embed & store
db = Chroma.from_documents(chunks, OpenAIEmbeddings())
 
# 4. 질문하기
retriever = db.as_retriever()
llm = ChatOpenAI(model="gpt-4.1")
 
from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(llm, retriever=retriever)
 
qa.run("Summarize the mission in 3 bullet points.")

YouTube Transcript QA 앱 만들기

loader = YoutubeLoader.from_youtube_url(url)
docs = loader.load()
 
chunks = RecursiveCharacterTextSplitter.from_tiktoken_encoder().split_documents(docs)
db = Chroma.from_documents(chunks, OpenAIEmbeddings())
 
qa.run("Explain the main argument of this video")

웹사이트 QA 챗봇 만들기 (Sitemap 기반)

from langchain_community.document_loaders.sitemap import SitemapLoader
 
loader = SitemapLoader("https://docs.chainstack.com/sitemap.xml")
docs = loader.load()

이후 PDF/YouTube와 동일하게 chunk → embed → retrieve → chat 파이프라인을 실행하면 됩니다.


마무리

LangChain Document Loader는 모든 RAG 워크플로의 기초입니다. 이를 통해:

  • 어떤 소스에서든 데이터를 로드하고
  • 텍스트를 일관된 Document 포맷으로 정규화하며
  • 검색 가능한 데이터셋을 구축하고
  • 자신의 콘텐츠 위에서 채팅, 요약, QA 기능을 구현할 수 있습니다.

최신 Loader와 2025년 기준 올바른 LangChain 패턴을 활용하면 PDF, 웹사이트, YouTube 영상, CSV 등 다양한 데이터 위에 강력한 AI 애플리케이션을 구축할 수 있습니다.


FAQ

LangChain Document Loader란 무엇인가요?
Document Loader는 파일, URL, API 등 다양한 소스를 LangChain의 Document 객체로 변환해, 이후 단계에서 활용할 수 있도록 해주는 컴포넌트입니다.

Document Loader가 임베딩이나 인덱스를 생성하나요?
아니요. Loader는 텍스트 로딩만 수행합니다. 임베딩과 인덱싱은 별도의 단계입니다.

PDF에는 어떤 Loader를 써야 하나요?
PyPDFLoader가 LangChain에서 가장 신뢰할 수 있는 PDF 텍스트 추출용 Loader입니다.

YouTube Loader는 어떻게 동작하나요?
YouTube API 또는 커뮤니티 자막을 사용해 transcript를 가져오고, 이를 하나의 Document(텍스트 transcript)로 반환합니다.