AI 에이전트를 프로덕션에서 진짜로 동작하게 만드는 기술
AI 에이전트가 무엇을 보고, 무엇을 할 수 있고, 언제 멈추고, 실패하면 어떻게 되는지를 설계하는 엔지니어링 규율
LLM은 강력하지만 방향 감각이 없는 말 🐴
하네스는 그 힘을 통제하는 고삐, 안장, 재갈 역할
| 개념 | 초점 |
|---|---|
| 프롬프트 엔지니어링 | 단일 모델 호출의 품질 개선 |
| 컨텍스트 엔지니어링 | 컨텍스트 윈도우에 무엇을 넣을지 |
| 하네스 엔지니어링 | 윈도우 바깥의 모든 것 — 도구, 상태, 검증, 생명주기 |
프롬프트 = “한 번의 대화를 잘하는 법”
하네스 = “100번의 세션을 걸쳐 일관되게 잘하는 법”
Claude, GPT, Gemini, 오픈소스 모델 성능은 수렴 중
동일 모델에서 하네스 유무에 따라 작업 완료율 40%p 차이
모델은 교체 가능한 부품이고, 하네스가 곧 제품이다
에이전트가 무엇을 볼 수 있는지 결정
에이전트가 제대로 했는지 확인
{
"description": "사용자가 새 대화를 생성할 수 있다",
"passes": false
}
에이전트가 어디까지 했는지 기억
claude-progress.txt 같은 진행 로그에이전트가 무엇을 할 수 있는지 제어
에이전트가 언제 사람에게 물어봐야 하는지
에이전트의 시작과 끝, 세션 간 전환
| 도구 | 역할 |
|---|---|
| Pre-commit hooks | 커밋 전 코드 품질 자동 검증 |
| Custom linters | 조직 고유 규칙 강제 |
| ArchUnit / 구조 테스트 | 아키텍처 제약을 테스트로 검증 |
| CI/CD 파이프라인 | 자동 빌드/테스트/배포 |
| 도구 | 역할 |
|---|---|
| AGENTS.md / CLAUDE.md | 에이전트 지시사항 문서 |
| 벡터 스토어 | 장기 메모리 시맨틱 검색 |
| 진행 로그 (JSON) | 세션 간 상태 유지 |
| Git | 진행 문서화 & 롤백 |
| 도구 | 역할 |
|---|---|
| MCP 서버 | 표준화된 도구 인터페이스 |
| Puppeteer / Playwright | 브라우저 자동화 E2E 검증 |
| 컨테이너/샌드박스 | 에이전트 실행 환경 격리 |
| 레드팀 도구 | 에이전트 취약점 사전 탐지 |
하네스가 이미 내장된 에이전트 환경
| 제품 | 제공사 | 핵심 하네스 기능 |
|---|---|---|
| Claude Code | Anthropic | 5계층 권한, 18+ 훅, CLAUDE.md, 자동 롤백 |
| Codex CLI | OpenAI | 샌드박스, AGENTS.md, 파일 접근 제어 |
| Cursor | Cursor Inc. | .cursor/rules, 루프 탐지, IDE 통합 |
| Windsurf | Codeium | Cascade 에이전트, 멀티파일 편집 |
@tool 데코레이터| 프레임워크 | 핵심 특징 | 하네스 기능 |
|---|---|---|
| LangGraph | 그래프 기반 상태 관리 | 체크포인트 복구, HITL, LangSmith |
| CrewAI | 역할 기반 멀티 에이전트 | Flows 이벤트 파이프라인 |
| MS AutoGen | 대화 기반 멀티 에이전트 | 그룹 채팅, 코드 실행 샌드박스 |
| Bedrock Agents | 완전 관리형 서비스 | 가드레일 내장, IAM, KB RAG |
Model Context Protocol — 모든 SDK를 관통하는 표준
| 시나리오 | 추천 | 이유 |
|---|---|---|
| 즉시 코딩 에이전트 | Claude Code / Codex | 하네스 내장 |
| 커스텀 에이전트 (Anthropic) | Claude Agent SDK | 단순 + 강력한 훅 |
| 커스텀 에이전트 (OpenAI) | OpenAI Agents SDK | 최소 학습 곡선 |
| GCP 생태계 | Google ADK | Vertex AI 네이티브 |
| AWS 생태계 | Strands Agents | Bedrock 네이티브 |
| 복잡한 멀티 에이전트 | LangGraph | 벤더 중립 그래프 |
| 대화 기반 에이전트 팀 | MS AutoGen | 그룹 채팅 패턴 |
| 관리형 서비스 | Bedrock Agents | 코드 최소 |
하나의 모델이 도구·메모리·검증과 함께 루프
→ 고객 지원, 단순 자동화에 적합
초기화 에이전트가 환경 세팅 → 코딩 에이전트가 증분 진행
→ 장기 실행 코딩 작업에 적합
연구자·작가·검토자 등 전문가 에이전트 간 작업 위임
→ 복잡한 프로젝트, 다단계 파이프라인에 적합
[
{
"category": "functional",
"description": "사용자가 새 대화를 생성할 수 있다",
"passes": false
},
{
"category": "functional",
"description": "메시지 전송 시 실시간 응답 표시",
"passes": false
}
]
모든 기능을 false로 시작 → 완료 기준을 명확히
#!/bin/bash
# init.sh — 에이전트가 매 세션 시작 시 실행
npm install
npm run dev &
echo "Development server started"
# AGENTS.md
## 작업 규칙
- 한 번에 하나의 기능만 작업할 것
- 기능 완료 전 반드시 E2E 테스트 실행
- 테스트를 삭제하거나 수정하는 것은 금지
- 작업 완료 후 git commit으로 진행 기록
# .github/workflows/agent-verify.yml
on: [push]
jobs:
verify:
steps:
- run: npm run lint # 커스텀 린터
- run: npm run test:arch # 구조 테스트
- run: npm run test:e2e # E2E 테스트
주기적으로 별도 에이전트가 코드베이스 스캔:
에이전트가 어려움을 겪을 때, 그것을 신호로 해석하라.
부족한 도구, 가드레일, 문서를 식별하고 저장소에 피드백하는 것이 하네스 엔지니어링의 핵심 루프다. — OpenAI Codex 팀
“제약이 클수록 신뢰성이 높다”
Session 0 (초기화): init.sh 작성 → features.json → 초기 커밋
Session 1..N (실행): 진행 로그 읽기 → 다음 기능 선택 → 구현 & 테스트 → 커밋
| 문제 | 해결책 |
|---|---|
| 조기 완료 선언 | 기능 목록 + E2E 테스트 강제 |
| 세션 간 정보 손실 | Git 커밋 + 진행 로그 의무화 |
| 매번 환경 셋업 | init.sh로 표준화 |
| 기존 코드 파괴 | 이전 커밋 로그 참조 의무화 |
모델 성능 수렴 → 하네스 품질 = 제품 품질
동일 모델에서 하네스 유무에 따라 2~5배 신뢰성 차이
“Harness Engineer” — 에이전트 기반 제품 회사에서 독립 역할로 등장
소프트웨어 엔지니어링 + AI 시스템 설계 + 안전성 엔지니어링의 교차점
하네스 코드 자체를 AI가 최적화하는 개념
소스 코드, 점수, 실행 트레이스 분석 → 더 나은 하네스를 자동 제안
개발자 취향보다 AI 친화적 구조가 우선
하네스가 유지보수하기 좋은 코드 구조가 사실상의 표준
하네스가 100번째 스텝 이후 모델이 지시를 따르지 않는 시점을 정확히 감지하는 도구로 진화
| 원칙 | 설명 |
|---|---|
| 모델은 부품, 하네스가 제품 | 모델은 교체 가능, 하네스는 경쟁 우위 |
| 제약이 신뢰를 만든다 | 해결 공간을 좁힐수록 결과 안정 |
| 실패를 신호로 | 에이전트 실패 = 하네스 개선 기회 |
| 검증은 자동으로 | E2E 테스트와 구조 테스트 |
| 점진적 진행 | 한 번에 하나, 매번 커밋 |