이 글을 통해 LangChain을 아주 쉽게 이해해 보고, 작은 프로젝트를 만들어 봅시다.

LangChain이 왜 존재하는가?
코드는 잠시 잊고, 진짜 문제를 먼저 생각해 봅시다.
GPT, Mistral, Llama 같은 LLM을 직접 쓰면 세 가지 큰 한계가 있습니다.
문제 1. LLM은 모든 걸 잊어버린다
메시지 하나 보낼 때마다 이전 대화 기억이 전혀 없어요. 직접 이전 대화를 다 넣어주지 않으면 초기화됩니다.
장기 기억 기능이 없어요.
문제 2. LLM은 내 데이터를 볼 수 없다
다음 같은 질문을 하면 LLM은 아무것도 못 합니다.
- “이 PDF 읽어줘”
- “이 데이터베이스에서 찾아줘”
- “내 폴더 보고 요약해줘”
LLM은 외부 데이터를 스스로 가져올 수 없기 때문입니다.
문제 3. LLM은 여러 단계를 거치는 작업을 잘 못한다
예: “이 문서 읽고 → 사람 이름 추출 → 번역 → 요약해줘”
시도야 하겠지만, 체계적으로 단계를 나누고, 도구를 부르고, 논리를 따라가며 작업을 관리할 방법이 없습니다.
항상 대충 추측하면서 진행합니다. → 매우 답답함
LangChain은 이 세 문제를 모두 해결해 줍니다
LangChain이 LLM에게 주는 새로운 능력 3가지:
- 기억(Memory) - 채팅봇이 매번 모든 걸 잊지 않게 해줍니다.
- 도구(Tools) - 웹 검색, PDF 읽기, 파이썬 코드 실행, 데이터베이스 조회 등 외부 기능을 사용할 수 있게 합니다.
- 구조화된 작업 흐름(Chains & Agents) - 단계별로 논리적으로 진행하거나, 상황에 맞는 도구를 스스로 선택하게 합니다.
→ LangChain은 날것의 LLM을 실제로 쓸 수 있는 똑똑한 시스템으로 바꿔줍니다.
이 기본 개념만 이해하면 나머지는 다 쉬워집니다.
LangChain의 5가지 핵심 구성 요소
이 부분만 이해해도 LangChain의 70%는 이해한 겁니다
- Models (모델)
- Prompts (프롬프트)
- Output Parsers (출력 파서)
- Document Loaders & Retrievers (문서 로더 & 검색기)
- Chains & Agents (체인 & 에이전트)
이제 각 부분에 대해서 알아 봅시다.
(A) Models — 앱의 두뇌
- Chat Models : 대화용으로 GPT-4, Llama 3, Mistral 등이 있음
- Text LLMs :Prompt로 부터 텍스트 생성용
- Embedding Models : 텍스트 → 벡터 변환용, 검색/RAG에 필수
LangChain은 통일된 인터페이스를 제공하므로 모델(GPT → Llamma → Mistral)을 변경하는데 단지 한줄 수정으로 끝낼 수 있습니다.
(B) Prompts — 모델이 이해하는 Instructions
프롬프트는 단순한 Instruction들이다. 하지만 Langchain에서는 큰 힘을 발휘할 수 있습니다.
단순메시지가 아닌 프롬프트 템플릿을 만들어 재 사용이 가능하도록 해 줍니다.
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("간단한 말로 {topic}을 설명해줘.")
→ {topic}만 바꿔가며 재사용 가능해짐 . 즉 Prompt가 깔끔하고 유지보수가 쉬워지게 됨
(C) Output Parsers — 모델에게 구조를 강제하기
LLM은 자유롭게 길게 문장으로 쓰는 걸 좋아하지만, 실제 앱에서는
- JSON
- 리스트
- 키-값 쌍
- 특정 Formats
같은 구조가 필요합니다.
Output Parser를 사용하므로 “이 형식으로만 답변해!”라고 강제 할 수 있습니다
Example:
from langchain.output_parsers import StructuredOutputParser
이는 모델의 출력을 예측 가능하게 만들어주며, 이는 앱에 필수적인 요소입니다
(D) Document Loaders & Retrievers — LangChain이 정보를 읽는 방법
Document Loaders : PDF, 웹페이지, Notion, DB 등에서 데이터를 가져옴
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://example.com")
docs = loader.load()
Retrievers : 문서가 시스템에 저장되면 검색 도구를 사용하여 문서를 지능적으로 검색할 수 있습니다. → RAG의 핵심 기반
비유하자면...
- Document Loader = 도서관에 책 가져오기
- Retriever = 필요한 정확한 페이지를 찾아주는 사서
(E) Chains & Agents — 작업 흐름 엔진
이 부분이 Langchain을 Powerful하게 만들어 주고 있는 것입니다.
Chains = 고정된 레시피 - 다음 단계가 미리 정해져 있음 (순서가 있는 직선형 흐름)
Agents = 상황에 따라 판단하는 요리사 - LLM이 스스로 “다음엔 뭘 해야 하지?” 생각하고 도구 선택 (무엇을, 어떤 툴을 사용할지, 다음 Step은 어디로 갈지 등)
RAG — LangChain의 심장
왜 RAG가 필요한가? LLM은 엄청난 양의 데이터를 학습했지만 당신의 개인 문서는 모릅니다.
예를 들어 나의 PDF를 요약해줘, 회사 Handbook의 내용을 알려줘 같은 질문을하면 LLM은 해당 문서에 대한 정보가 없으므로 답변할 수 없습니다.
그렇다고 긴 문서를 프롬프트에 다 넣으면 → 토큰 초과 발생
짧게 넣으면 → 맥락 손실 이 발생합니다.
그래서 큰 용량의 문서를 저장해야 하고, 그 문서를 똑똑하게 검색하고, 관련 부분만을 취해서 LLM에 전달하는 시스템이 필요합니다.그런데 그런 시스템이 RAG (Retrieval Augmented Generation)입니다.
RAG가 하는 일 (가장 쉽게 이해하기)
LLM에 Goodle Search 를 연결한 것과 같은 것이 RAG 입니다.
하는일은...
- 질문이 들어옴
- 내 문서들 중 관련 있는 조각을 검색
- 그 문서 조각 + 질문을 LLM에게 전달
- LLM이 실제 데이터 기반으로 답변 생성
이렇게 함으로 환각(hallucination)을 대폭 감소시키고, 사실 기반 답변이 가능해 집니다.
RAG 파이프라인 7단계 (이 순서만 외우세요)
- 문서 로드 : Bring PDFs, websites, text files, or databases into LangChain.
- 문서 → 작은 조각(Chunk)으로 분할 (200–500 tokens)
- 조각 → 임베딩(벡터) 변환 : 의미적으로 가까운 Text를 높은 숫자로 부여 / AI가 의미 기반으로 검색하는 방법이 됨
- 벡터 데이터베이스에 저장 (Chroma, Pinecone, Weaviate, FAISS 등)
- 사용자의 질문 도착 : VectorDB에서 검색할 수 있음
- 질문과 가장 비슷한 조각 검색 (Retriever)
- LLM이 질문 + 검색된 조각을 확인해서 최종 답변을 생성함
- RAG is not a LangChain thing.
- RAG is an industry standard.
- LangChain just makes it extremely easy to implement.
이 흐름만 알면 LangChain으로 어떤 RAG든 만들 수 있습니다.
Agents (에이전트)
Agent란? = LLM이 어떤 도구를 언제 쓸지, 다음 행동은 뭘 할지 스스로 결정하는 시스템
Agent = LLM + 행동 능력
에이전트가 반복하는 추론과정 사이클 (ReAct : Reason + Act ) : Pick a tool → Use it → Think again → Answer
- Thought: 지금 뭘 해야 하지?
- Action: ○○ 도구 사용
- Observation: 도구 결과 받음
- Thought: 이제 다음은?
- 반복과 최종 답변
언제 에이전트를 써야 하나?
- 여러 단계가 필요한 경우
- 도구를 써야 하는 경우 (웹 검색, 계산기, 코드 실행 등)
- 동적 판단이 필요한 경우
에이전트를 쓰지 말아야 할 때
- 단순 Q&A
- 순수 RAG
- 고정된 순서 작업 → 불필요한 지연 + 예측 불가능성 증가
- 요약하기
Example of an Agent in LangChain
from langchain.agents import initialize_agent, load_tools
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description"
)
agent.run("What is 23 * 47? Also search who discovered gravity.")
This agent:
- uses a calculator tool
- uses web search
- then produces the final answer
All automatically.
Agents allow an LLM choose which tool to use and execute multi-step reasoning to solve tasks.
Memory (기억)
LLM은 약점이 있는데 기본적으로 모든 대화 기록을 잊습니다.
LangChain Memory가 자동으로 과거 대화를 프롬프트에 넣어줌으로 유지할 수 있습니다.
주요 메모리 유형 4가지
- ConversationBufferMemory — 전부 저장 (짧은 대화용)
- ConversationSummaryMemory — 요약본만 저장 (긴 대화용)
- ConversationBufferWindowMemory — 최근 N개 메시지만 저장
- EntityMemory — 사람/사물에 대한 사실 저장 (개인화 좋음)
미니 프로젝트 — 25줄 이내로 PDF 질문 답변 RAG 앱 만들기
목표는 PDF 파일을 업로드하고 질문을 하여 PDF 파일을 기반으로 정확한 답변을 얻는 것입니다.
과정은 다음과 같습나다
문서 로딩 → 청킹 → 임베딩 → 벡터 DB → 리트리버 → LLM → 최종 답안
- 라이브러리 설치
Bash
pip install langchain langchain-community langchain-openai chromadb pypdf - PDF 로드
Python
from langchain_community.document_loaders import PyPDFLoader loader = PyPDFLoader("sample.pdf") docs = loader.load() - 청크로 자르기
Python
from langchain.text_splitter import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = splitter.split_documents(docs) - 임베딩 + 벡터 DB
Python
from langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings db = Chroma.from_documents(chunks, OpenAIEmbeddings()) retriever = db.as_retriever() - RAG 체인 생성
Python
from langchain.chains import RetrievalQA from langchain_openai import ChatOpenAI qa = RetrievalQA.from_chain_type(llm=ChatOpenAI(), retriever=retriever) - 질문하기 → 답변
Python
response = qa.run("이 PDF의 핵심 아이디어는 뭐야?") print(response)
이 정도면 LangChain의 거의 모든 핵심을 이해하신 겁니다.
자 이것으로 "LangChain을 사용한다"라고 하는 사람들의 90%수준까지 배운것입니다. (대부분의 개발자 보다 많은 것을 알게 된 것입니다.) LangChain은 복잡한 프레임워크가 아니라, 간단한 아이디어들을 조합한 것일 뿐입니다.
이해한 내용을 다시 한번 정리해 봅시다.
- Why LangChain exists
- The 5 core components (LLMs, prompts, parsers, retrievers, chains)
- How RAG actually works
- How agents think and act
- How memory makes LLMs feel human
- How to build a real mini project
'최신 AI' 카테고리의 다른 글
| 15분만에 LangGraph로 챗봇 만들기 (0) | 2026.03.09 |
|---|---|
| LangGraph를 활용한 ReAct 에이전트 구축 (0) | 2026.03.04 |
| LangGraph로 AI 에이전트 구축하기 (0) | 2026.02.10 |
| LangGraph 사용법 (0) | 2026.02.10 |
| 로컬 에이전트 기반의 개인용 AI 비서 플랫폼: Moltbot(구 Clawdbot) (0) | 2026.02.03 |