20개 스텝으로 LangChain v1을 처음부터 끝까지 익힙니다. 목표는 문법 암기가 아니라 에이전트를 만들고 운영할 수 있게 되는 것입니다.
이 코스를 마치면 이렇게 말할 수 있어야 합니다 — "이 에이전트가 왜 저렇게 행동했는지 설명할 수 있고, 고칠 수 있다."
API 키는 console.anthropic.com 에서 발급합니다. OpenAI 로 하고 싶다면
OPENAI_API_KEY를 채우고 모델 문자열만 바꾸면 됩니다 — 각 스텝에 안내가 있습니다.
자세한 셋업은 실습 프로젝트 셋업 을 보세요.
LangChain을 한 줄도 안 써봤어도 됩니다. 여기서 시작합니다.
| Step | 주제 | 핵심 내용 |
|---|---|---|
| 01 | 환경 구축과 첫 모델 호출 | 패키지 지형도, .env, "provider:model", AIMessage 해부 |
| 02 | 챗 모델과 파라미터 | temperature/maxTokens, invoke/batch/stream, 토큰과 비용 |
| 03 | 메시지와 콘텐츠 블록 | System/Human/AI/Tool, 콘텐츠 블록, tool_call_id 계약 |
| 04 | 프롬프트 설계와 템플릿 | 템플릿, few-shot, 시스템 프롬프트 원칙, 인젝션 |
| 05 | 구조화된 출력 | zod, withStructuredOutput, responseFormat, .describe()가 곧 프롬프트 |
이 코스의 심장부입니다. 프레임워크를 블랙박스로 두지 않습니다.
| Step | 주제 | 핵심 내용 |
|---|---|---|
| 06 | 도구(Tool) 정의 | tool(), 모델은 도구를 실행하지 않는다, 설명이 곧 프롬프트 |
| 07 | 도구 호출 루프 직접 구현 | 에이전트는 while 루프다 — 손으로 만들어 보기 |
| 08 | createAgent, 첫 에이전트 | 옵션 전부, 실행 흐름 추적, 에이전트 vs 워크플로 |
| Step | 주제 | 핵심 내용 |
|---|---|---|
| 09 | 스트리밍 | streamMode 전부, tool_call_chunks는 조각나서 온다 |
| 10 | 단기 메모리와 스레드 | checkpointer, thread_id, 타임트래블 |
| 11 | 내장 미들웨어 | 요약/재시도/가드레일/HITL — v1의 핵심 신기능 |
| 12 | 커스텀 미들웨어 | 훅 전체, wrapModelCall/wrapToolCall, 비용 추적 |
| 13 | Human-in-the-Loop | interrupt(), 승인/거부/수정, 재개 시 재실행 함정 |
| 14 | 컨텍스트와 런타임 | 지시/상태/컨텍스트/메모리 4구분, 동적 프롬프트·모델 |
| 15 | 장기 메모리와 Store | Store, 시맨틱 검색, 메모리 유형 3종 |
| Step | 주제 | 핵심 내용 |
|---|---|---|
| 16 | 검색과 RAG | 청킹/임베딩/벡터스토어, 에이전틱 RAG vs 고전 RAG |
| 17 | LangGraph 그래프 API | State/Node/Edge, 리듀서, createAgent의 정체 |
| 18 | 멀티 에이전트 | 서브에이전트/핸드오프/라우터, 나누면 생기는 비용 |
| Step | 주제 | 핵심 내용 |
|---|---|---|
| 19 | 관측·테스트·평가 | LangSmith 트레이싱, 모델 페이크, 궤적 평가 |
| 20 | 프로덕션과 종합 프로젝트 | 신뢰성/비용/보안/배포 + 종합 문제와 해설 |
권장 학습 방법
index.md 를 읽으며 직접 타이핑해서 실행합니다. 복붙하지 마세요.exercise.ts 를 풀고 solution.ts 로 채점합니다.MySQL 코스는 "교재의 결과와 여러분 화면의 결과가 정확히 일치합니다" 라고 약속할 수 있었습니다. 여기서는 그럴 수 없습니다.
LLM 은 확률적입니다. 같은 프롬프트에 같은 모델이라도 매번 다른 문장을 냅니다. temperature: 0 도 이걸 완전히 없애지 못합니다(Step 02에서 이유를 다룹니다).
그래서 이 코스의 출력 예시는 이렇게 표기합니다:
출력 예시 (모델 응답이므로 매번 다릅니다)
하지만 구조는 결정적입니다. 그리고 이 코스가 진짜로 가르치는 건 구조입니다.
| 매번 다른 것 (참고만) | 항상 같은 것 (여기에 집중) |
|---|---|
| 모델이 쓴 문장 | 응답 객체의 shape (content, tool_calls, usage_metadata) |
| 에이전트가 도구를 부른 순서 | 도구 호출 → ToolMessage → 재호출 이라는 프로토콜 |
| 토큰 수 | usage_metadata 의 필드 이름 |
| 요약문의 내용 | 스트림 이벤트 타입과 발생 순서 |
결과 문장이 교재와 다르다고 당황하지 마세요. 객체 구조나 이벤트 순서가 다르면 그때 멈추고 원인을 찾으세요.
에러 없이 조용히 잘못 동작하는 것을 잡는 데 집중했습니다. 타입 에러는 컴파일러가 잡아줍니다. 진짜 위험한 건 아무 에러 없이 그럴듯하게 틀리는 에이전트입니다. 예를 들면:
checkpointer 를 안 주고 thread_id 만 주면 메모리가 조용히 사라집니다 (Step 10)description 이 부실하면 모델이 그 도구를 아예 안 부릅니다 (Step 06)tool_call_chunks 는 부분 JSON 이라 그대로 파싱하면 터집니다 (Step 09)interrupt() 로 멈춘 뒤 재개하면 그 이전 코드가 다시 실행됩니다 — 결제가 두 번 됩니다 (Step 13)user_id 를 안 넣으면 사용자끼리 메모리가 섞입니다 (Step 15)각 스텝의 ⚠️ 함정 블록을 특히 눈여겨 보세요.
| 항목 | 값 |
|---|---|
| Node.js | 22+ |
| 언어 | TypeScript (ESM) |
| 실행기 | tsx |
| 기본 모델 | Anthropic (OpenAI 대안 병기) |
| 검증 버전 | langchain@1.5.3, @langchain/core@1.2.3, @langchain/langgraph@1.4.8 |
v0 코드를 보신 적 있다면 주의하세요. LangChain v1 은 v0 과 API 가 크게 다릅니다. 인터넷의
LLMChain,initializeAgentExecutorWithOptions,RunnableSequence중심 예제는 대부분 v0 입니다. 이 코스는 전부 v1 기준이며, 모든 API 는 공식 문서로 대조했습니다.
이 코스를 마쳤다면 → Deep Agents (TypeScript) 코스
LangChain 으로 만든 에이전트에게 "리서치 보고서를 써줘" 같은 긴 작업을 시키면 왜 실패하는지, 그리고 계획·파일시스템·서브에이전트로 어떻게 해결하는지를 다룹니다.