레고 블록으로 이해하는 LangChain — 왜 프레임워크를 쓸까
AI 서비스를 처음 만들 때 저는 필요한 기능을 전부 직접 코딩했습니다. 그러다 프로젝트가 커지면서 "이걸 왜 매번 새로 짜지?" 하는 순간이 왔고, 그때 LangChain을 진지하게 보게 됐습니다. 오늘은 LangChain을 레고 블록에 비유해 풀어보겠습니다.
레고 블록으로 이해하기
레고의 장점은 블록마다 규격(돌기 크기)이 같아서 아무거나 끼워도 맞는다는 점이죠. LangChain이 하는 일이 딱 이거예요. 모델(LLM), 프롬프트, 문서 검색기, 메모리 같은 부품을 같은 규격으로 표준화해 둬서, 원하는 대로 끼우고 바꿀 수 있게 해줍니다. OpenAI를 쓰다 다른 모델로 바꿔도 블록 하나만 교체하면 되는 식이죠.
직접 짜면 뭐가 힘든가
순수 코드로 챗봇에 "문서 검색 + 대화 기억 + 외부 API 호출"을 다 넣으면, 각 기능이 서로 얽혀서 하나를 고칠 때 다른 게 깨집니다. 저는 임베딩 모델 하나 바꾸려다 코드 절반을 다시 짠 적이 있어요. LangChain은 이 부품들을 느슨하게 연결해, 교체 비용을 크게 줄여줍니다.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("{q}에 대해 3줄로 설명해줘")
llm = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | llm # 블록 두 개를 끼운 셈
print(chain.invoke({"q": "LangChain"}).content)
제 기준: 언제 도입하나
솔직히 LLM을 한 번 부르는 수준이면 LangChain은 과합니다. 저는 "검색·기억·도구 중 두 개 이상이 엮인다" 싶을 때부터 도입해요. 그 전엔 순정 SDK가 더 가볍고 디버깅도 쉽습니다. 프레임워크는 문제가 복잡해졌을 때 본전을 뽑습니다.
마무리
LangChain은 "AI 부품을 레고처럼 끼웠다 뺐다 하게 해주는 틀"입니다. 개념만 읽지 말고 위 invoke 예제부터 돌려보세요. 다음 글에서는 이 블록들이 실제로 어떤 순서로 실행되는지 살펴보겠습니다.
댓글
댓글 쓰기