2026 AI Agent Engineer 학습 커리큘럼 (3) 12주 — Week 7–12
12주 실무 트랙 Week 7–12. MCP·Harness·Loop·Graph·Eval·배포 통합.
이 글은 5편짜리 시리즈의 3편입니다.
시리즈 목차
- 1. 2026 AI Agent Engineer 학습 커리큘럼 (1) 기술 지도와 역량
- 2. 2026 AI Agent Engineer 학습 커리큘럼 (2) 8·12주 — Week 0–6
- 3. 2026 AI Agent Engineer 학습 커리큘럼 (3) 12주 — Week 7–12 ← 현재
- 4. 2026 AI Agent Engineer 학습 커리큘럼 (4) 프로젝트와 아키텍처
- 5. 2026 AI Agent Engineer 학습 커리큘럼 (5) 프로덕션·포트폴리오·체크리스트
아래부터 본편입니다.
2026 AI Agent Engineer 학습 커리큘럼 (3) 12주 — Week 7–12
Week 7 — MCP Engineering: 서버·클라이언트 직접 구현
목표: Python으로 MCP 서버와 클라이언트를 직접 구현하고, Agent에 통합해 도구를 동적으로 발견한다.
개념: MCP host / client / server, tools / resources / prompts, transport(stdio, HTTP), capability negotiation, tool discovery.
반드시 이해할 내용
- MCP는 "Agent ↔ 도구/데이터 소스"를 잇는 표준이다. 자작 통합을 매번 다시 만들지 않아도 된다.
- stdio transport(로컬 프로세스)와 HTTP transport(원격 서비스)는 배포·보안에서 차이가 난다.
- resources(읽기 전용 데이터)와 tools(부수효과 있는 행동)를 구분한다.
구현 — mcp/
mcp/
server_fs.py # filesystem MCP 서버: read_file, list_dir, search (resources + tools)
server_db.py # database MCP 서버: query(readonly), schema(resource)
client.py # MCP 클라이언트: 연결, capability negotiation, 도구 목록 -> registry 주입- Agent의 tools/registry.py가 MCP 클라이언트에서 발견한 도구를 자동 등록한다.
실습
- 외부 MCP 서버 1개와 자작 서버 1개를 동시에 연결한다.
- DB MCP 서버에 쓰기 쿼리를 시도해 readonly 권한 경계를 확인한다.
프로젝트: P5 — MCP Server(업무 자동화) — 예: 이슈 트래커·캘린더·사내 위키를 도구로 노출하는 MCP 서버 + 이를 쓰는 Agent.
테스트
[ ]transport 계약: stdio·HTTP 양쪽에서 도구 호출 성공[ ]도구 스키마가 정확히 전달되고 registry에 등록[ ]서버 측 에러가 클라이언트로 구조화되어 전파[ ]권한 경계(readonly)가 강제됨
완료 기준
[ ] MCP 서버·클라이언트를 양쪽 다 직접 구현
[ ] 도구 동적 발견 -> registry 자동 통합
[ ] 권한 경계·에러 전파 테스트 통과Week 8 — Harness Engineering: Mini Coding Agent (핵심)
목표: 모델 밖의 모든 것 — runtime, registry, permission, sandbox, trace, budget, verification —을 갖춘 coding agent harness를 만든다.
개념: Agent Harness = model + prompt + context + tool + sandbox + permission + state + logging + verification + budget. execution trace. token/time/iteration budget.
반드시 이해할 내용
- "좋은 모델보다 좋은 harness". Coding agent 성능 차이는 대개 sandbox·검증 루프·컨텍스트 관리에서 나온다.
- Coding agent 파이프라인:
repo → agent → code → test → lint → type check → security check → git diff. - sandbox 옵션: subprocess(빠름, 약한 격리) vs 컨테이너(느림, 강한 격리). 권한 모델과 묶인다.
구현 — harness/
harness/
runtime.py # 도구 실행을 permission -> sandbox -> trace -> budget 으로 감쌈
permission.py # 도구별 정책(allow/ask/deny), 경로 화이트리스트
sandbox.py # subprocess/container 실행, 리소스 제한, 네트워크 차단 옵션
trace.py # 구조적 이벤트: tool_call, tool_result, llm_call, budget_tick
budget.py # token/time/iteration 상한, 초과 시 중단 신호
verify.py # run_tests, run_lint, run_typecheck, run_security -> VerifyResult실습
- shell 도구로 sandbox 밖 파일 접근·네트워크 요청을 시도해 차단을 확인한다.
- 무거운 작업으로 time budget을 초과시켜 우아한 중단을 확인한다.
프로젝트: P6 — Mini Claude Code / Mini Codex (이번 주는 harness 계층만; 반복 루프는 Week 9에서 얹는다)
- repo를 받아 파일을 읽고 편집하며 verify.run_tests()를 호출하는 harness.
테스트
- [ ] 권한 거부: deny 도구 호출 시 실행되지 않고 trace에 기록
[ ]sandbox 격리: 화이트리스트 밖 경로 접근 실패[ ]budget 컷: token/time/iteration 각각 초과 시 중단[ ]trace 완전성: 한 실행의 모든 이벤트가 순서대로 재구성됨
완료 기준
[ ] 모든 도구 실행이 permission+sandbox+trace+budget을 통과
[ ] verify(test/lint/type/security)를 harness가 호출 가능
[ ] 위험 도구 격리를 침투 시도로 검증
[ ] execution trace로 실행을 완전 재구성Week 9 — Loop Engineering: Autonomous Coding Agent (핵심)
목표: harness 위에서 도는 자율 반복 루프를 구현한다. 무한 루프·비용 폭발·진행 정체를 막는다.
개념: agent loop(goal→think→act→observe→evaluate→done?), control loop, feedback loop, retry loop, reflection, self-correction, verifier, stop condition.
반드시 이해할 내용
- 정지 조건은 하나가 아니다:
max_iterations,timeout,token_limit,cost_limit,progress_check,duplicate_action_detection,human_escalation. - progress check: N회 반복 동안 verify 결과·상태가 개선되지 않으면 정체로 보고 escalation으로 넘긴다.
- duplicate action detection: 같은 도구·같은 인자를 반복하면 루프에 빠진 상태다.
- reflection은 공짜가 아니다 — 매 반복 self-critique는 토큰·지연을 두 배로 늘린다. 실패할 때만 트리거하는 편이 낫다.
구현 — loop/
loop/
controller.py # 상태 머신. 매 반복: build context -> LLM -> tool calls -> observe -> evaluate -> stop?
stop.py # 정지 조건 평가기(위 7종)
progress.py # verify 점수/상태 이력 -> 정체 감지
dedup.py # (tool, args) 해시 이력 -> 반복 감지
escalate.py # 정체/한계 -> 상세 실패 리포트 + human 요청실습
- 실패하는 테스트를 주입하고 analyze → fix → re-test 수렴을 관찰한다.
- 고칠 수 없는 버그를 주입해 정체 감지와 escalation 리포트 생성을 확인한다.
- cost_limit을 낮게 설정해 중간 중단과 부분 결과 보존을 확인한다.
프로젝트: P7 — Autonomous Coding Agent
Issue -> Agent -> Code -> Test -> (Fail) -> Analyze -> Fix -> Test -> (Pass) -> Diff- 입력: 자연어 이슈 + repo. 출력: green test를 만드는 git diff 또는 escalation 리포트.
테스트
[ ]정지 조건 7종 각각 단위 테스트[ ]진행 정체 감지: 개선 없는 3회 반복 → escalation[ ]중복 행동 감지: 동일 (tool,args) 반복 → 차단[ ]비용 상한: 초과 시 부분 결과 + 리포트
완료 기준
[ ] plan-act-observe-evaluate 루프가 harness 위에서 동작
[ ] 7종 정지 조건을 모두 구현·테스트
[ ] 수렴 실패 시 escalation 경로 동작
[ ] 실제 이슈 5개 중 N개를 green test로 해결(성공률 기록)Week 10 — Graph Engineering: Vanilla Engine → 멀티에이전트
목표: Vanilla Python으로 graph runtime을 만든 뒤 LangGraph와 비교한다. 멀티에이전트 소프트웨어 개발 시스템을 구성한다.
개념: node, edge, state, branch, router, dependency, parallel execution, join, checkpoint, human gate. 패턴: supervisor-worker, evaluator-optimizer, reflection, planner-executor.
반드시 이해할 내용
- state reducer: 노드가 부분 상태를 반환하면 엔진이 병합한다. 병렬 노드의 상태 충돌도 여기서 처리한다.
- 조건부 엣지: 라우터 노드가 다음 노드를 동적으로 고른다.
- checkpoint: 각 노드 후 상태를 저장해 실패 지점부터 재개한다.
- 언제 멀티에이전트를 쓰지 말아야 하는가: 단일 Agent Loop으로 되는 일에 그래프를 얹으면 지연·비용·디버깅 난이도만 커진다.
구현 — graph/
graph/
engine.py # 노드 등록, 엣지(정적/조건부), run(state) -> 종료까지 실행
state.py # State + reducer(merge 규칙), 병렬 결과 병합
parallel.py # fan-out -> asyncio.gather -> join
checkpoint.py # 노드별 상태 저장/로드(Postgres)
gate.py # human gate 노드: 승인 대기이어서 같은 워크플로우를 LangGraph로 재구현하고 코드량·가독성·디버깅을 비교한다. Temporal/Prefect/Airflow는 개념만 비교한다(장기 실행·재시도·스케줄 관점).
실습
planner ──▶ ┌── backend_agent ──┐
│ ├──▶ test_agent ──▶ review_agent ──▶ (gate) ──▶ done
└── frontend_agent ─┘- 실패 노드 재시도, 조건부 라우팅(테스트 실패 시 backend로 되돌림), 체크포인트에서 재개.
프로젝트: P8 — Multi-Agent Workflow — Planner / Backend / Frontend / Test / Security / Review Agent. 각 Agent는 Week 9의 Loop 인스턴스.
테스트
[ ]라우팅 분기: 조건에 따라 올바른 노드로[ ]병렬 join: 동시 노드 결과가 정합하게 병합[ ]체크포인트 재개: 중간 실패 후 그 지점부터[ ]human gate: 승인 전까지 진행 차단
완료 기준
[ ] vanilla graph engine(조건부 엣지·병렬·체크포인트·gate) 동작
[ ] 동일 그래프를 LangGraph로 재구현하고 트레이드오프 문서화
[ ] 멀티에이전트 워크플로우가 안정적으로 종료 또는 escalate
[ ] "멀티에이전트를 쓰지 말아야 할 경우" 판단 기준 정리Week 11 — Evaluation Engineering: Agent Eval Harness (핵심)
목표: deterministic + LLM-judge + trajectory + regression을 한곳에 묶는 Eval Harness를 만들고 CI에 넣는다.
개념: deterministic eval, unit/integration test, LLM-as-a-judge(pairwise/pointwise), trajectory eval, tool-use eval, regression eval, human eval.
반드시 이해할 내용
- Agent 지표: task success rate, tool success rate, retry rate, hallucination rate, latency, token usage, cost per successful task, human escalation rate.
- LLM-judge 편향: 위치 편향(먼저 나온 답 선호), 장황함 편향, 자기 선호. → 순서 랜덤화, 기준 명시, 앵커 예시.
- trajectory eval: 최종 답만이 아니라 "어떤 도구를 어떤 순서로 썼는가"를 채점한다.
- regression: 프롬프트·모델·컨텍스트 변경이 baseline 대비 지표를 떨어뜨리면 CI가 실패한다.
구현 — evals/
evals/
dataset.py # Case(input, expected, rubric, tags)
runner.py # 데이터셋 -> agent 실행 -> trace 수집
judges.py # pointwise/pairwise judge, 순서 랜덤화, rubric 주입
trajectory.py # trace -> tool-use 정확도, 불필요 스텝 수, 루프 발생
metrics.py # 위 지표 계산
regression.py # 현재 결과 vs baseline -> diff, 하락 시 exit 1
report.py # HTML/MD 리포트(케이스별 통과/실패, 지표 표)실습
- P7·P8에 각 20+ 케이스 골든셋을 작성한다.
- judge 편향 측정: 같은 두 답을 순서만 바꿔 100회 → 위치 편향률.
- 프롬프트를 일부러 개악해 regression 게이트가 잡는지 확인한다.
프로젝트: P9 — Agent Evaluation Platform — 데이터셋 관리, 실행, 리포트, 회귀 추적을 갖춘 독립 서비스(FastAPI + Postgres + 간단 UI).
테스트
[ ]judge 재현성: 동일 입력 3회 → 점수 편차 ≤ 임계[ ]회귀 게이트: baseline 대비 하락 시 CI 실패[ ]지표 계산: 알려진 trace → 기대 지표값[ ]trajectory eval: 불필요 스텝·루프 탐지
완료 기준
[ ] deterministic + judge + trajectory eval을 한 러너에서 실행
[ ] 8개 agent 지표를 계산하고 baseline 저장
[ ] 회귀를 CI에서 자동 차단
[ ] judge 편향을 측정하고 완화 적용Week 12 — Reliability + Security + HITL + 배포: Final 통합
목표: OTel trace·replay·cost governance·injection 방어·human gate를 넣고, 전체를 Docker·CI로 배포해 Production AI Agent Platform을 완성한다.
개념: observability, tracing, metrics, logging, replay, failure analysis, regression detection, alert, fallback, circuit breaker, retry, graceful degradation. security: direct/indirect injection, tool injection, data exfiltration, privilege escalation, malicious MCP server, tool/memory/RAG poisoning. HITL: action proposal → risk detection → approve/reject/modify.
반드시 이해할 내용
- OpenTelemetry span 구조: 한 요청 = 루트 span, 각 LLM 호출·도구 호출·그래프 노드 = 자식 span. 속성에 token·cost·model.
- replay: 저장된 trace의 입력을 다시 넣어 비결정적 환경에서 디버깅한다.
- circuit breaker: provider 오류율이 임계를 넘으면 fallback 모델로 자동 전환한다.
- human gate 필수 작업: payment, delete, production deploy, DB migration, email send, git merge, external API mutation.
- 다층 방어: allowlist(도구·경로) + input validation + output validation + sandbox + audit log. 한 겹만으로는 부족하다.
구현
obs/
otel.py # tracer 설정, span 헬퍼, harness/loop/graph 계측
replay.py # trace id -> 입력 재주입 러너
ops/
fallback.py # 모델 라우팅 + circuit breaker
cost_guard.py # 일/세션 비용 상한, 초과 시 차단 + 알림
hitl/
queue.py # 승인 큐(approve/reject/modify), Graph gate 노드와 연결
risk.py # 액션 -> 위험 점수 -> gate 필요 여부
security/
injection_suite.py # 확장된 인젝션·exfiltration 케이스
output_validator.py # 최종 답변·도구 인자 정책 검증
deploy/
Dockerfile # 멀티스테이지
docker-compose.yml # api + worker + postgres + redis + otel collector
.github/workflows/ci.yml # lint -> type -> test -> eval(regression) -> build실습
- 간접 인젝션 e2e: 악성 웹페이지 →
http_get→ Agent 탈취 시도 → allowlist + output validation로 차단, audit log 확인. - secret 유출 시도: Agent가 환경 변수·.env를 도구로 읽어 외부로 보내려는 시나리오를 차단한다.
- provider 장애를 시뮬레이션해 circuit breaker → fallback 모델로 무중단 전환을 확인한다.
프로젝트: Final — Production AI Agent Platform (아키텍처는 8장 참조)
테스트
[ ]injection 스위트(확장) 통과율 ≥ 목표[ ]secret exfiltration 차단[ ]HITL: 위험 액션이 gate에서 멈추고 approve/reject/modify 반영[ ]OTel: 한 요청이 완전한 span 트리로 기록[ ]replay: 저장된 trace 재현- [ ] circuit breaker → fallback으로 무중단
[ ]e2e smoke: Next.js UI → FastAPI → worker → graph → 결과[ ]CI 게이트: eval regression 시 배포 차단
완료 기준
[ ] 전체 시스템이 OTel로 관측되고 replay 가능
[ ] 다층 방어로 injection·exfiltration 차단(수치 제시)
[ ] 되돌릴 수 없는 작업은 전부 human gate 통과
[ ] cost governance(상한+알림) 동작
[ ] Docker Compose로 원커맨드 기동, CI가 lint/type/test/eval 게이트