개발 환경 구성과 첫 LangChain 앱 만들기
시작은 '작게, 깨끗하게, 바로 실행되게'
LangChain을 배우는 가장 좋은 방법은 거창한 챗봇부터 만드는 것이 아닙니다. 먼저 아주 작은 프로그램 하나를 끝까지 실행해 보는 것입니다. 모델을 하나 부르고, 질문을 던지고, 응답을 확인합니다. 그다음 프롬프트 템플릿을 붙이고, prompt | model 형태의 체인으로 바꿔 봅니다. 이 작은 성공 경험이 이후 RAG, 도구 호출, 에이전트, LangGraph로 넘어가는 발판이 됩니다.
이번 장의 목표는 분명합니다. Python 환경에서 LangChain 프로젝트를 시작하고, 첫 번째 실행 가능한 체인을 만드는 것입니다. 여기서 중요한 것은 "설치가 됐다"에서 멈추지 않는 것입니다. 설치 후 import가 되는지 확인하고, API 키를 안전하게 관리하고, 실제 모델 호출까지 성공해야 진짜 출발점에 도착한 것입니다.
LangChain 공식 설치 문서 기준으로 Python 패키지 langchain은 Python 3.10 이상을 요구하며, 기본 설치 명령은 pip install -U langchain입니다.1 예전 블로그나 오래된 예제에서는 Python 3.8 또는 3.9를 언급하는 경우가 있지만, 이 책에서는 최신 LangChain 공식 문서 기준으로 Python 3.10 이상을 전제로 진행하겠습니다.

Python 버전 확인하기
먼저 터미널을 열고 Python 버전을 확인합니다.
python --versionmacOS나 Linux에서 python 명령이 Python 2 또는 다른 버전을 가리킨다면 다음 명령을 사용합니다.
python3 --version출력이 다음처럼 나오면 좋습니다.
Python 3.11.8Python 3.10 이상이면 이 장의 예제를 진행할 수 있습니다. 만약 여러 버전의 Python이 설치되어 있다면, 지금 어떤 Python 실행 파일을 사용하고 있는지도 확인해 두는 것이 좋습니다.
python -c "import sys; print(sys.executable)"이 명령은 현재 터미널에서 사용 중인 Python의 실제 경로를 보여 줍니다. 나중에 "분명 설치했는데 import가 안 된다"는 문제가 생겼을 때, 거의 대부분은 패키지를 설치한 Python과 코드를 실행한 Python이 서로 다른 경우입니다. 그러니 지금 이 경로를 한 번 확인하는 습관을 들이면, 앞으로 많은 시간을 아낄 수 있습니다.
독립 가상환경 만들기
LangChain은 여러 패키지와 함께 움직입니다. 모델 provider 패키지, 벡터스토어 패키지, 문서 로더 패키지, 평가 도구까지 붙기 시작하면 의존성이 빠르게 늘어납니다. 그래서 시스템 Python에 바로 설치하는 것은 추천하지 않습니다. 프로젝트마다 독립된 가상환경을 만들면 패키지 충돌을 크게 줄일 수 있습니다.
가장 간단한 방법은 Python 내장 도구인 venv를 사용하는 것입니다. 새 프로젝트 폴더를 만들고 그 안으로 이동합니다.
mkdir langchain-start
cd langchain-start이제 가상환경을 만듭니다.
python -m venv .venvmacOS나 Linux에서 python 대신 python3를 써야 한다면 다음처럼 실행합니다.
python3 -m venv .venv가상환경을 활성화합니다.
# macOS / Linux
source .venv/bin/activateWindows PowerShell에서는 다음 명령을 사용합니다.
.venvScriptsActivate.ps1Windows 명령 프롬프트에서는 다음과 같습니다.
.venvScriptsactivate.bat활성화에 성공하면 터미널 앞쪽에 (.venv) 같은 표시가 붙습니다. 이제부터 설치하는 패키지는 이 프로젝트의 .venv 안에 들어갑니다. 마치 실험실 안에 필요한 도구만 따로 정리해 두는 것과 같습니다.
conda를 선호한다면 다음처럼 진행할 수도 있습니다.
conda create -n langchain-start python=3.11
conda activate langchain-startvenv와 conda 중 무엇을 써도 괜찮습니다. 중요한 것은 "프로젝트마다 독립된 환경을 만든다"는 원칙입니다.
pip 업그레이드와 LangChain 설치
가상환경을 활성화했다면 먼저 pip를 최신 상태로 올립니다.
python -m pip install --upgrade pip이제 LangChain 코어 패키지를 설치합니다.
pip install -U langchain여기서 한 가지 중요한 변화가 있습니다. LangChain은 수많은 모델과 외부 도구를 지원하지만, 모든 통합 기능을 한 패키지에 전부 넣어 두지 않습니다. OpenAI, Anthropic, Google Gemini 같은 모델 연동은 각각 별도의 provider 패키지로 설치합니다. 공식 문서에서도 OpenAI 연동은 langchain-openai, Anthropic 연동은 langchain-anthropic처럼 독립 패키지 설치를 안내합니다.1
예를 들어 OpenAI 모델을 사용할 계획이라면 다음을 추가합니다.
pip install -U langchain-openaiAnthropic Claude를 사용할 계획이라면 다음을 설치합니다.
pip install -U langchain-anthropicGoogle Gemini를 사용할 계획이라면 다음을 설치합니다.
pip install -U langchain-google-genai커뮤니티 통합 기능이 필요하다면 다음 패키지도 자주 사용합니다.
pip install -U langchain-community이번 장에서는 OpenAI 예제를 중심으로 진행하겠습니다. 따라서 최소 설치 명령은 다음과 같습니다.
pip install -U langchain langchain-openai python-dotenvpython-dotenv는 .env 파일에 적어 둔 환경 변수를 Python 코드에서 읽어 오게 해 주는 패키지입니다. API 키를 코드에 직접 적지 않기 위해 곧 사용할 것입니다.
설치가 정말 되었는지 확인하기
설치 명령이 에러 없이 끝났다고 해서 모든 준비가 끝난 것은 아닙니다. 간단한 확인 절차를 거쳐야 합니다.
먼저 설치된 패키지 목록을 확인합니다.
pip list목록에서 langchain, langchain-core, langchain-openai, python-dotenv 같은 패키지가 보이면 정상입니다. 더 직접적인 import 테스트도 해 봅니다.
python -c "import langchain; print('LangChain import OK')"OpenAI 연동 패키지도 확인합니다.
python -c "from langchain_openai import ChatOpenAI; print('OpenAI integration import OK')"여기까지 성공했다면 패키지 설치는 잘 된 것입니다.
만약 ModuleNotFoundError가 나온다면 가장 먼저 가상환경이 활성화되어 있는지 확인하세요. 터미널 앞에 (.venv)가 보이지 않는다면 다시 활성화해야 합니다. 그래도 문제가 계속되면 다음 순서로 점검합니다.
python --version으로 Python 버전을 확인합니다.python -c "import sys; print(sys.executable)"로 현재 실행 중인 Python 경로를 확인합니다.pip list로 실제 설치된 패키지 목록을 확인합니다.필요하면
pip install -U langchain langchain-openai python-dotenv를 다시 실행합니다.계속 꼬이면
.venv를 삭제하고 새 가상환경을 다시 만듭니다.
개발 초반에는 환경을 고치는 데 너무 오래 매달리지 않는 편이 좋습니다. 특히 학습용 프로젝트라면 가상환경을 새로 만드는 것이 가장 빠른 해결책일 때가 많습니다.
API 키는 코드에 쓰지 않는다
LLM provider를 사용하려면 API 키가 필요합니다. 이 키는 서비스 이용 권한이자 비용 청구와 연결되는 민감한 정보입니다. 따라서 코드에 직접 적으면 안 됩니다.
나쁜 예는 다음과 같습니다.
llm = ChatOpenAI(api_key="sk-...")이렇게 작성한 파일을 GitHub에 올리면 API 키가 외부에 노출될 수 있습니다. 한 번 노출된 키는 누군가가 몰래 사용할 수 있고, 예상치 못한 비용이 발생할 수도 있습니다.
대신 프로젝트 루트에 .env 파일을 만듭니다.
touch .envWindows에서는 파일 탐색기나 에디터에서 직접 .env 파일을 만들어도 됩니다. 파일 안에는 사용할 provider의 키를 적습니다.
OPENAI_API_KEY=your_openai_api_key_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
GOOGLE_API_KEY=your_google_api_key_here
LANGSMITH_API_KEY=your_langsmith_api_key_here이번 장에서 OpenAI만 사용할 경우에는 OPENAI_API_KEY만 있어도 됩니다.
OPENAI_API_KEY=your_openai_api_key_here그리고 .gitignore 파일을 만들어 .env와 가상환경 폴더를 Git 관리 대상에서 제외합니다.
.env
.venv/
__pycache__/
*.pyc이 작은 습관이 매우 중요합니다. 예제 프로젝트가 나중에 실무 프로젝트가 되더라도, 비밀값은 코드 밖에서 관리한다는 원칙은 그대로 유지됩니다.
운영 환경에서는 .env 파일 대신 서버나 클라우드 플랫폼의 환경 변수 설정 기능을 사용하는 것이 일반적입니다. 로컬 개발에서는 .env, 운영 배포에서는 실제 환경 변수. 이렇게 나누어 생각하면 됩니다.
첫 번째 모델 호출 만들기
이제 첫 번째 LangChain 코드를 작성해 보겠습니다. 프로젝트 루트에 app.py 파일을 만듭니다.
touch app.py다음 코드를 입력합니다.
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.2,
)
response = model.invoke("LangChain을 처음 배우는 개발자에게 한 문장으로 응원해 줘.")
print(response.content)실행합니다.
python app.py정상적으로 설정되었다면 모델의 응답이 터미널에 출력됩니다. 출력 내용은 매번 조금씩 다를 수 있습니다. 중요한 것은 응답이 나왔다는 사실입니다.
여기서 ChatOpenAI는 OpenAI의 채팅 모델을 LangChain 방식으로 사용할 수 있게 해 주는 클래스입니다. model에는 사용할 모델 이름을 넣고, temperature에는 응답의 창의성 정도를 설정합니다. temperature가 낮을수록 더 안정적이고 일관된 답변이 나오고, 높을수록 더 다양하고 창의적인 답변이 나오는 경향이 있습니다.
invoke()는 LangChain에서 매우 자주 보게 될 실행 메서드입니다. 입력 하나를 넣고 결과 하나를 받습니다. 이번 예제에서는 문자열을 넣었고, 모델은 AIMessage 형태의 객체를 반환했습니다. 그래서 실제 텍스트를 출력하려면 response.content를 사용했습니다.
이 순간 여러분은 이미 LangChain으로 첫 모델 호출을 성공한 것입니다. 하지만 아직 "체인"은 아닙니다. 지금은 모델에 문자열을 바로 던진 상태입니다. 이제 LangChain다운 방식으로 한 단계 더 나아가 보겠습니다.
프롬프트 템플릿 붙이기
실제 애플리케이션에서는 사용자의 입력을 그대로 모델에 던지는 일이 많지 않습니다. 보통은 시스템 역할, 응답 형식, 말투, 제약 조건 등을 프롬프트에 함께 담습니다. 예를 들어 "초보자에게 쉽게 설명해라", "3문장으로 답해라", "한국어로 답해라" 같은 규칙을 넣습니다.
그때 사용하는 것이 프롬프트 템플릿입니다. app.py를 다음처럼 바꿔 봅니다.
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
load_dotenv()
model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.2,
)
prompt = ChatPromptTemplate.from_messages(
[
("system", "너는 초보 개발자에게 기술 개념을 쉽게 설명하는 친절한 튜터야."),
("user", "{topic}을 파이썬 초보자에게 3문장으로 설명해 줘."),
]
)
messages = prompt.invoke({"topic": "LangChain"})
response = model.invoke(messages)
print(response.content)이번에는 프롬프트 템플릿에 {topic}이라는 변수가 들어 있습니다. prompt.invoke({"topic": "LangChain"})를 실행하면 이 변수가 실제 값으로 채워진 메시지가 만들어집니다. 그리고 그 메시지를 모델에 전달합니다.
흐름을 말로 풀면 이렇습니다. 먼저 프롬프트 템플릿이 입력값을 받아 채팅 메시지로 바꿉니다. 그다음 모델이 그 메시지를 읽고 답변을 생성합니다. 아직 코드가 짧아서 괜찮아 보이지만, 단계가 많아질수록 이렇게 직접 중간 변수를 만들고 넘기는 방식은 번거로워집니다.
그래서 LangChain에는 파이프 연산자 |가 있습니다.
첫 번째 체인 만들기: prompt | model
LangChain의 여러 구성요소는 Runnable이라는 공통 실행 인터페이스를 따릅니다. Runnable은 쉽게 말해 "입력을 받아 처리한 뒤 출력을 내보내는 실행 가능한 조각"입니다. LangChain의 Runnable 객체는 선언적으로 조합할 수 있고, 이렇게 만든 체인은 동기 실행, 비동기 실행, 배치 실행, 스트리밍 같은 실행 방식을 공통적으로 지원합니다.2
프롬프트도 Runnable이고, 모델도 Runnable입니다. 그러니 둘을 파이프 연산자로 연결할 수 있습니다.
app.py를 다시 바꿔 봅니다.
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
load_dotenv()
model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.2,
)
prompt = ChatPromptTemplate.from_messages(
[
("system", "너는 초보 개발자에게 기술 개념을 쉽게 설명하는 친절한 튜터야."),
("user", "{topic}을 파이썬 초보자에게 3문장으로 설명해 줘."),
]
)
chain = prompt | model
response = chain.invoke({"topic": "LangChain"})
print(response.content)이 코드의 핵심은 단 한 줄입니다.
chain = prompt | model이 한 줄은 "프롬프트를 먼저 실행하고, 그 결과를 모델에 넘겨라"는 뜻입니다. 마치 터미널에서 cat file.txt | grep LangChain처럼 앞 명령의 결과가 뒤 명령의 입력으로 들어가는 것과 비슷합니다.
이제 chain.invoke({"topic": "LangChain"})를 호출하면 LangChain이 내부적으로 다음 일을 처리합니다.
입력 딕셔너리에서
topic값을 꺼내 프롬프트를 완성합니다.완성된 채팅 메시지를 모델에 전달합니다.
모델의 응답 메시지를 반환합니다.
코드는 짧아졌지만 의미는 더 명확해졌습니다. "프롬프트와 모델을 연결한 체인"이라는 구조가 눈에 보이기 때문입니다.
문자열 결과만 받고 싶다면 출력 파서를 붙인다
지금 체인은 AIMessage 객체를 반환합니다. 그래서 매번 response.content를 출력해야 합니다. 작은 예제에서는 괜찮지만, 체인을 다른 함수나 API 응답에 연결할 때는 그냥 문자열로 받는 편이 편합니다.
이때 StrOutputParser를 사용합니다.
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.2,
)
prompt = ChatPromptTemplate.from_messages(
[
("system", "너는 초보 개발자에게 기술 개념을 쉽게 설명하는 친절한 튜터야."),
("user", "{topic}을 파이썬 초보자에게 3문장으로 설명해 줘."),
]
)
parser = StrOutputParser()
chain = prompt | model | parser
result = chain.invoke({"topic": "LangChain"})
print(result)이제 result는 문자열입니다. 흐름은 다음과 같습니다.
입력값 → 프롬프트 템플릿 → 채팅 모델 → 문자열 파서 → 최종 문자열이것이 LangChain의 기본 감각입니다. 작은 부품을 만들고, |로 연결하고, invoke()로 실행합니다. 앞으로 등장할 RAG 체인, 도구 호출 체인, 평가 체인도 이 감각 위에 세워집니다.
모델 provider 바꾸기
LangChain을 쓰는 이유 중 하나는 모델 provider를 비교적 일관된 방식으로 다룰 수 있다는 점입니다. OpenAI를 쓰다가 Anthropic Claude나 Google Gemini를 실험해 보고 싶을 수 있습니다. 이때 전체 애플리케이션 구조를 갈아엎기보다 모델 부분만 교체할 수 있으면 좋습니다.
Anthropic을 사용하려면 먼저 패키지를 설치합니다.
pip install -U langchain-anthropic.env에 키를 추가합니다.
ANTHROPIC_API_KEY=your_anthropic_api_key_here그리고 모델 import와 초기화 부분을 바꿉니다.
from langchain_anthropic import ChatAnthropic
model = ChatAnthropic(
model="claude-3-5-sonnet-latest",
temperature=0.2,
)Google Gemini를 사용하려면 다음 패키지를 설치합니다.
pip install -U langchain-google-genai.env에는 다음 키를 둡니다.
GOOGLE_API_KEY=your_google_api_key_here모델 초기화 예시는 다음과 같습니다.
from langchain_google_genai import ChatGoogleGenerativeAI
model = ChatGoogleGenerativeAI(
model="gemini-2.0-flash",
temperature=0.2,
)물론 provider마다 지원하는 모델 이름, 응답 속도, 가격, 컨텍스트 길이, 도구 호출 기능이 다를 수 있습니다. 하지만 LangChain의 기본 체인 구조는 상당 부분 유지됩니다. 이것이 추상화의 장점입니다. 모델이라는 엔진은 바꿔도, 자동차의 운전대와 페달은 비슷하게 유지되는 셈입니다.
LangSmith 추적 설정 맛보기
처음에는 print()만으로도 충분합니다. 하지만 체인이 길어지고, 중간에 검색기와 도구와 파서가 붙으면 "어느 단계에서 이상한 답이 나왔는지" 추적하기 어려워집니다. LangSmith는 LangChain 애플리케이션의 실행 과정을 관찰하고 디버깅하는 데 사용하는 도구입니다. LangChain 공식 RAG 문서에서도 복잡한 체인이나 에이전트가 여러 LLM 호출을 포함하게 되면 내부에서 무슨 일이 일어나는지 확인하는 것이 중요하며, 이를 위해 LangSmith 추적 설정을 안내합니다.3
지금 당장 필수는 아니지만, 프로젝트 초기에 환경 변수 자리를 마련해 두면 나중에 편합니다. .env에 다음 값을 추가할 수 있습니다.
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=your_langsmith_api_key_here
LANGSMITH_PROJECT=langchain-startLangSmith 계정과 키가 없다면 이 부분은 건너뛰어도 됩니다. 이 책에서는 뒤쪽 LangSmith 장에서 디버깅, 평가, 관측 가능성을 본격적으로 다룹니다. 지금은 "복잡한 체인은 추적 도구로 들여다볼 수 있다" 정도만 기억하면 충분합니다.
학습용 프로젝트 구조 잡기
지금까지는 app.py 하나에 모든 코드를 넣었습니다. 첫 실행에는 이 방식이 가장 좋습니다. 하지만 곧 프롬프트가 늘어나고, 체인이 늘어나고, 문서 데이터와 벡터스토어가 생깁니다. 그때도 모든 것을 app.py에 몰아넣으면 금방 복잡해집니다.
처음부터 너무 과하게 나눌 필요는 없지만, 학습용 프로젝트라도 기본 구조를 잡아 두면 좋습니다.
langchain-start/
├── .env
├── .gitignore
├── requirements.txt
├── app.py
├── chains/
│ └── explainer.py
├── prompts/
│ └── explainer.md
├── data/
├── vectorstore/
└── tests/각 폴더의 역할은 단순합니다. app.py는 프로그램의 진입점입니다. chains/에는 LangChain 체인 생성 로직을 둡니다. prompts/에는 길어진 프롬프트 파일을 분리합니다. data/에는 나중에 RAG에서 사용할 원본 문서를 둡니다. vectorstore/에는 임베딩된 벡터 데이터베이스 파일을 저장할 수 있습니다. tests/에는 체인과 유틸리티 함수의 테스트 코드를 둡니다.
이번 장의 예제를 약간 분리해 보겠습니다. 먼저 chains/explainer.py 파일을 만듭니다.
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
def create_explainer_chain():
model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.2,
)
prompt = ChatPromptTemplate.from_messages(
[
("system", "너는 초보 개발자에게 기술 개념을 쉽게 설명하는 친절한 튜터야."),
("user", "{topic}을 파이썬 초보자에게 3문장으로 설명해 줘."),
]
)
return prompt | model | StrOutputParser()그리고 app.py는 다음처럼 단순해집니다.
from dotenv import load_dotenv
from chains.explainer import create_explainer_chain
load_dotenv()
chain = create_explainer_chain()
result = chain.invoke({"topic": "LangChain"})
print(result)이제 app.py는 "무엇을 실행하는지"만 보여 줍니다. 체인을 어떻게 만드는지는 chains/explainer.py 안으로 들어갔습니다. 프로젝트가 커질수록 이런 분리가 큰 힘을 발휘합니다.
chains 폴더를 Python 패키지처럼 안정적으로 인식시키고 싶다면 빈 __init__.py 파일을 추가해도 좋습니다.
touch chains/__init__.pyWindows에서는 파일을 직접 만들어도 됩니다.
requirements.txt로 환경 재현하기
지금 만든 환경을 나중에 다시 설치하거나 팀원과 공유하려면 의존성 목록이 필요합니다. 가장 단순한 방법은 pip freeze입니다.
pip freeze > requirements.txt이렇게 하면 현재 가상환경에 설치된 패키지와 버전이 requirements.txt에 기록됩니다. 다른 사람이 같은 프로젝트를 실행할 때는 다음 명령으로 설치할 수 있습니다.
pip install -r requirements.txt학습 단계에서는 이 정도면 충분합니다. 실무에서는 uv, Poetry, pip-tools 같은 도구로 더 엄격하게 잠금 파일을 관리하기도 합니다. 하지만 지금 중요한 것은 "내 컴퓨터에서만 우연히 되는 코드"가 아니라 "다른 환경에서도 재현 가능한 프로젝트"를 만드는 습관입니다.
자주 만나는 문제와 빠른 해결법
LangChain 자체보다 환경 설정에서 더 많이 막히는 경우가 있습니다. 다행히 대부분의 문제는 몇 가지 패턴으로 정리됩니다.
ModuleNotFoundError가 나오면 패키지가 설치되지 않았거나, 다른 Python 환경에서 실행 중일 가능성이 큽니다. 가상환경 활성화 여부를 확인하고, python -c "import sys; print(sys.executable)"로 실행 경로를 확인하세요.
OPENAI_API_KEY 관련 오류가 나오면 .env 파일 위치와 변수 이름을 확인합니다. .env는 보통 app.py를 실행하는 프로젝트 루트에 있어야 합니다. 변수 이름은 정확히 OPENAI_API_KEY여야 하며, 따옴표를 써도 되지만 불필요한 공백이 들어가면 문제가 될 수 있습니다.
OPENAI_API_KEY=sk-...API 호출은 되지만 권한이나 모델 오류가 나온다면 모델 이름이 올바른지, 해당 계정에서 사용할 수 있는 모델인지 확인해야 합니다. 또한 provider별 패키지를 설치했는지도 확인하세요. 예를 들어 ChatOpenAI를 쓰려면 langchain-openai가 필요합니다.
의존성 충돌이 심하게 발생하면 과감하게 새 가상환경을 만드는 것이 좋습니다.
# macOS / Linux
rm -rf .venv
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txtWindows에서는 .venv 폴더를 삭제한 뒤 다시 생성하면 됩니다.
마지막으로, 패키지는 가능하면 새 가상환경에서 설치하세요. 예전에 만들었던 환경에 이것저것 계속 추가하다 보면, 어느 순간 어떤 패키지가 문제를 일으키는지 찾기 어려워집니다. 깨끗한 환경은 가장 단순한 디버깅 도구입니다.
이번 장에서 만든 가장 작은 LangChain 앱
이번 장에서 우리가 만든 앱은 매우 작습니다. 하지만 그 안에는 앞으로 계속 반복될 핵심 구조가 들어 있습니다.
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
prompt = ChatPromptTemplate.from_messages(
[
("system", "너는 초보 개발자에게 기술 개념을 쉽게 설명하는 친절한 튜터야."),
("user", "{topic}을 파이썬 초보자에게 3문장으로 설명해 줘."),
]
)
model = ChatOpenAI(model="gpt-4o-mini", temperature=0.2)
parser = StrOutputParser()
chain = prompt | model | parser
result = chain.invoke({"topic": "LangChain"})
print(result)이 코드를 이해했다면 LangChain의 출발선에 제대로 선 것입니다. 프롬프트가 입력을 정리하고, 모델이 답변을 생성하고, 파서가 결과를 쓰기 좋은 형태로 바꿉니다. 이 세 조각을 |로 연결하면 하나의 실행 가능한 체인이 됩니다.
앞으로 우리는 이 단순한 구조에 더 많은 부품을 붙일 것입니다. 메시지 인터페이스를 더 깊게 다루고, 프롬프트를 정교하게 설계하고, 출력 파서를 통해 JSON 같은 구조화된 결과를 받을 것입니다. 그다음 문서를 불러오고, 텍스트를 나누고, 임베딩하고, 검색기를 붙이면 RAG가 됩니다. 도구를 붙이면 모델이 행동하기 시작하고, 상태와 그래프를 붙이면 복잡한 워크플로가 됩니다.
하지만 출발점은 늘 같습니다.
입력 → 프롬프트 → 모델 → 출력이 흐름을 손에 익히면 LangChain은 더 이상 낯선 프레임워크가 아니라, 생각을 실행 가능한 AI 애플리케이션으로 바꾸는 조립 도구가 됩니다.
참고
1Install LangChain - Docs by LangChain
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.