"모델이 문제가 아니었다. 모델을 둘러싼 시스템이 문제였다."
2026년 AI 에이전트 개발에서 가장 뜨거운 키워드 중 하나가 **하네스 엔지니어링(Harness Engineering)**이다. GPT-4o냐 Claude냐 Gemini냐를 고민하는 시대는 끝나가고 있다. 같은 모델이라도 주변 시스템을 어떻게 설계하느냐에 따라 데모 수준의 장난감이 되기도, 프로덕션 레벨의 도구가 되기도 한다. 이 글에서는 하네스 엔지니어링이 무엇인지, 왜 중요한지, 그리고 실무에서 어떻게 적용할 수 있는지 정리한다.
1. 하네스(Harness)란 무엇인가
핵심 공식은 단순하다.
Agent = Model + Harness
하네스는 AI 에이전트에서 모델 자체를 제외한 모든 것을 의미한다. 도구 연결, 메모리, 플래닝 루프, 컨텍스트 관리, 가드레일, 샌드박스, 재시도 로직, 사람의 승인 플로우 등이 모두 하네스에 해당한다.
비유하자면 이렇다.
| CPU | LLM (모델) |
| RAM | 컨텍스트 윈도우 |
| OS (운영체제) | 하네스 |
| 애플리케이션 | 에이전트 |
모델은 원시 처리 능력이고, 컨텍스트 윈도우는 작업 메모리이며, 하네스는 운영체제다. 에이전트는 그 위에서 돌아가는 애플리케이션이다.
2. 왜 지금 하네스 엔지니어링인가
한 핀테크 스타트업의 사례가 이를 잘 보여준다. LlamaIndex를 도입하고, MCP를 추가하고, 복잡한 RAG 파이프라인을 구축했지만 오히려 비즈니스 가치 없이 복잡성만 늘었다. 이 모든 것을 걷어내고 순수 Python + 단순 API 호출 + 커스텀 ReAct 엔진으로 돌아갔을 때 비로소 제대로 동작했다. 그들이 "우연히 만든 것"이 바로 하네스였다 — 금융 특화 도구, 도메인 가드레일, 목적에 맞는 컨텍스트 엔지니어링으로 구성된.
코딩 에이전트 영역에서도 마찬가지다. 한 연구자가 15개 LLM의 코딩 성능을 하룻밤 만에 개선했는데, 모델은 하나도 바꾸지 않았다. 편집 포맷(edit format)이라는 하네스 요소 하나만 최적화했을 뿐인데 5~14점의 벤치마크 점수 향상과 약 20% 토큰 절감이 동시에 일어났다. 모델 교체보다 하네스 최적화가 더 큰 레버리지를 가진다는 증거다.
3. 하네스의 구성 요소: 가이드와 센서
Thoughtworks의 Birgitta Böckeler는 하네스를 **가이드(Guides)**와 **센서(Sensors)**로 체계화했다. 이것이 현재 가장 잘 정리된 프레임워크다.
가이드 (Feedforward Controls)
에이전트가 행동하기 전에 올바른 방향으로 유도하는 것이다. 첫 시도에서 좋은 결과를 낼 확률을 높인다.
- AGENTS.md, CLAUDE.md 같은 프로젝트 규칙 파일
- 아키텍처 원칙 문서, 코딩 컨벤션
- 스킬(Skills) / 커맨드 파일
- MCP 서버를 통한 외부 지식 연결
- 부트스트랩 스크립트, 코드모드(codemods)
센서 (Feedback Controls)
에이전트가 행동한 후에 결과를 관찰하고 자기 교정(self-correction)을 돕는다.
- 린터(ESLint, Semgrep), 타입 체커, 테스트 스위트
- 코드 커버리지 측정
- AI 코드 리뷰 에이전트 ("LLM as Judge")
- 구조 테스트 (ArchUnit 등)
핵심 인사이트는 이렇다: 가이드만 있으면 규칙은 알지만 실제로 잘 됐는지 모르는 에이전트가 되고, 센서만 있으면 같은 실수를 반복하는 에이전트가 된다. 양쪽 다 있어야 한다.
Computational vs. Inferential
각 가이드와 센서는 다시 두 가지 실행 유형으로 나뉜다.
| 실행 주체 | CPU — 빠르고 결정적 | GPU/NPU — 느리고 비결정적 |
| 예시 | 린터, 테스트, 타입 체커 | AI 코드 리뷰, "LLM as Judge" |
| 특징 | 매 커밋마다 실행 가능 | 의미론적 판단 가능 |
계산적 센서는 빠르고 저렴하니까 모든 변경에 실행하고, 추론적 센서는 비용이 크니까 통합 후 파이프라인에서 선택적으로 실행하는 식으로 배치한다. CI/CD의 "shift left" 원칙을 하네스에도 동일하게 적용하는 것이다.
4. 하네스의 세 가지 규제 범주
하네스가 무엇을 규제하느냐에 따라 세 범주로 나눌 수 있다.
유지보수성 하네스 (Maintainability Harness)
코드 품질과 내부 유지보수성을 규제한다. 기존 도구(린터, 정적 분석, 커버리지 등)가 풍부하기 때문에 가장 구현하기 쉬운 영역이다. 중복 코드, 순환 복잡도, 아키텍처 드리프트, 스타일 위반 등을 잡아낸다.
아키텍처 적합성 하네스 (Architecture Fitness Harness)
성능, 관측 가능성, 보안 같은 아키텍처 특성을 정의하고 검증한다. 성능 요구사항을 가이드로 제공하고 성능 테스트를 센서로 두어, 에이전트가 성능을 개선했는지 저하시켰는지를 피드백하는 식이다.
행동 하네스 (Behaviour Harness)
기능적으로 올바르게 동작하는지를 규제한다. 가장 어려운 영역이다. 명세를 가이드로 주고 테스트를 센서로 두지만, 애초에 사람이 원하는 것을 명확히 정의하지 않으면 어떤 센서도 정확성을 보장할 수 없다.
5. 스티어링 루프: 사람의 역할
하네스 엔지니어링에서 사람의 역할은 **조향(steering)**이다. 에이전트가 같은 문제를 반복하면, 가이드와 센서를 개선해서 그 문제가 다시 발생할 확률을 낮추는 것이다. 이것이 스티어링 루프다.
문제 발생 → 원인 파악 → 가이드 또는 센서 추가/개선 → 재발 확률 감소
흥미로운 점은 이 과정 자체에도 AI를 활용할 수 있다는 것이다. 코딩 에이전트에게 구조 테스트를 작성시키거나, 관찰된 패턴에서 규칙 초안을 생성하거나, 코드베이스 분석으로 하우투 가이드를 만들게 할 수 있다.
6. 실무 적용: 코딩 에이전트 사용자를 위한 체크리스트
지금 당장 시작할 수 있는 것들을 정리하면:
가이드 (Feedforward)
- CLAUDE.md 또는 AGENTS.md에 프로젝트 규칙, 아키텍처 원칙, 코딩 컨벤션 정리
- .claude/commands/에 반복 작업용 스킬 파일 작성
- 참조 문서(API 스펙, 도메인 용어집) 연결
- 부트스트랩 스크립트로 프로젝트 초기화 자동화
센서 (Feedback)
- pre-commit 또는 에이전트 훅에 린터/타입 체커 연결
- 테스트 스위트를 에이전트가 실행하도록 설정
- 코드 리뷰 스킬 작성 (AI 기반 코드 리뷰)
- CI 파이프라인에 아키텍처 적합성 테스트 추가
스티어링
- 에이전트가 반복하는 실수 패턴을 기록
- 각 패턴에 대해 가이드 또는 센서를 추가해서 재발 방지
- 주기적으로 하네스 자체를 리뷰하고 개선
7. 하네스 엔지니어링과 컨텍스트 엔지니어링의 관계
종종 혼동되는데, 관계는 명확하다. 컨텍스트 엔지니어링은 가이드와 센서를 에이전트에게 전달하는 수단이고, 하네스 엔지니어링은 코딩 에이전트를 위한 컨텍스트 엔지니어링의 구체적인 형태다. 컨텍스트 엔지니어링이 "무엇을 어떻게 전달하느냐"라면, 하네스 엔지니어링은 "어떤 규제 체계를 설계하느냐"에 더 가깝다.
마무리
하네스 엔지니어링은 새로운 기술이 아니라 기존 소프트웨어 엔지니어링의 원칙들 — 모듈 설계, 상태 관리, 테스트, CI/CD — 을 비결정적인 AI 코어 주위에 재배치하는 것이다. 차이점은 비결정적 모델이 예상치 못한 행동을 할 수 있다는 것을 전제하고 설계한다는 점이다.
두 팀이 같은 모델을 사용하더라도, 더 나은 하네스를 가진 팀이 더 나은 결과를 낸다. 모델은 계속 발전하겠지만, 하네스를 잘 설계하는 능력은 모델이 바뀌어도 그대로 가져갈 수 있는 엔지니어의 자산이다.
참고 자료
- Birgitta Böckeler, Harness engineering for coding agent users, Martin Fowler's blog, 2026.04.02
- Agentic Harness Engineering: LLMs as the New OS, Decoding AI, 2026.03.31
- The Harness Problem, Can.ac, 2026.02.12
- AutoHarness: Automated Harness Engineering for AI Agents, GitHub
- The Rise of AI Harness Engineering, Cobus Greyling, 2026.03
'Software > Maker(Spring & Python & node)' 카테고리의 다른 글
| 남의 기록 시스템을 보며, 나도 내 삶을 기록할 구조를 고민하게 되었다 (0) | 2026.04.07 |
|---|---|
| 비개발자가 Claude Code로 구축한 AI 생산성 환경을 보고 느낀 엔지니어의 반성 (0) | 2026.04.07 |
| 캐싱에서 놓치기 쉬운 동시성 문제 5가지 — 장애는 항상 캐시에서 시작된다 (0) | 2026.04.07 |
| Java LTS vs Kotlin 롤링 릴리스: 오라클과 젯브레인의 언어 지원 정책, 뭐가 다른가 (0) | 2026.04.06 |
| Reverse Proxy vs API Gateway vs Load Balancer 비교 분석 (0) | 2026.04.06 |
