하네스 엔지니어링 — 팀을 위한 AI 개발 환경을 설계하는 방법
왜 같은 도구인데 결과가 다를까
같은 AI 도구를 쓰는데 어떤 팀은 "그냥 쓸 만하다"고 하고, 어떤 팀은 "첫 시도에 원하는 코드가 나온다"고 한다. 차이는 프롬프트 실력이 아니다. AI가 일하는 환경이 다른 것이다.
우아한형제들이 공개한 사례는 이 차이를 잘 보여준다. 팀은 Claude Code를 쓰면서 "React Query 훅 만들어줘"라고 요청하면 프로젝트 컨벤션을 무시한 코드가 나오는 문제를 겪었다. 해결책은 더 자세한 프롬프트가 아니었다. Rules와 Skills로 AI의 작업 환경을 설계하는 것이었다.
이를 **하네스 엔지니어링(Harness Engineering)**이라고 부른다. AI가 길을 잃지 않도록 외부 통제 환경을 구축하는 것이다. 비유하면 신입 개발자에게 "알아서 해"라고 하는 게 아니라, 코딩 가이드, 팀 컨벤션 문서, 코드 리뷰 체크리스트를 미리 쥐여주는 것과 같다.
Rules — AI에게 프로젝트 컨벤션 전달하기
Rules는 AI가 코드를 작성할 때 항상 참조하는 규칙 파일이다. 핵심은 "AI가 이미 아는 것"은 쓰지 않는 것이다.
일반적인 React 컴포넌트 패턴, TypeScript 기본 문법 — 이건 AI가 이미 안다. Rules에 쓰면 컨텍스트 낭비다. Rules에는 프로젝트 특화 규칙만 넣는다.
## React Query 훅 작성 규칙
- 모든 쿼리 키는 `src/lib/queryKeys.ts`에서 중앙 관리한다
- API 호출은 반드시 `UserAPI`, `OrderAPI` 등 API Class를 통해 한다
- `fetch` 직접 사용 금지
- 훅 파일명: `use{Entity}{Action}.ts` (예: `useUserProfile.ts`)이 Rules가 활성화된 상태에서 "user 조회 React Query 훅 만들어줘"라고 하면, AI는 자동으로 queryKeys.ts를 참조하고 UserAPI 클래스를 쓴다. 추가 설명 없이도.
[💡 잠깐! 이 용어는?]
글로브(globs) 옵션: Rules를 특정 파일 경로에서만 활성화하는 설정. src/components/**/*.tsx 파일을 편집할 때만 특정 규칙을 적용하고, 다른 경로에서는 비활성화할 수 있다. 불필요한 컨텍스트 소비를 막는다.
Before / After
Rules 없을 때:
요청: "user 조회 React Query 훅 만들어줘"
결과:
const { data } = useQuery({
queryKey: ['user', userId],
queryFn: () => fetch(`/api/user/${userId}`).then(r => r.json())
})
// fetch 직접 사용, 쿼리 키 분산 관리 — 컨벤션 위반
Rules 적용 후:
import { useQuery } from '@tanstack/react-query'
import { UserAPI } from '@/lib/api/UserAPI'
import { queryKeys } from '@/lib/queryKeys'
export function useUserProfile(userId: string) {
return useQuery({
queryKey: queryKeys.user.profile(userId),
queryFn: () => UserAPI.getProfile(userId),
})
}
// queryKeys 중앙 관리, UserAPI 사용 — 컨벤션 준수Skills — 반복 작업을 워크플로로 자동화하기
Rules가 "어떻게 쓸 것인가"라면, Skills는 "무엇을 할 것인가"다. 스크립트와 CLI 도구를 실행해서 반복 작업 흐름을 자동화한다.
| 활용 사례 | Skills가 하는 일 |
|---|---|
| Swagger 파싱 + API 훅 생성 | OpenAPI 스펙 파일을 읽어 React Query 훅 자동 생성 |
| 테스트 생성 | 작성한 함수를 분석해 단위 테스트 파일 자동 생성 |
| PR 작성 | 커밋 히스토리와 diff를 분석해 PR 설명 초안 작성 |
| 리팩토링 | 중복 코드 탐지 후 공통 유틸 추출 제안 |
Skills는 "명령어 실행 + 결과 해석 + 코드 작성"을 하나의 흐름으로 연결한다. 개발자가 매번 수동으로 하던 일을 한 번의 요청으로 처리한다.
컨텍스트 최적화 — 데이터를 95% 줄인 전처리
AI를 쓸 때 비용을 가장 잡아먹는 것 중 하나가 불필요한 컨텍스트다. 관련 파일을 찾느라 여러 번 도구를 호출하고, 불필요한 코드까지 전부 읽는다.
팀은 Node.js 전처리 스크립트를 만들어 AI에게 필요한 메타데이터만 전달했다.
const fs = require('fs')
const path = require('path')
// API 클래스에서 클래스명과 메서드 시그니처만 추출
function extractApiMeta(filePath) {
const content = fs.readFileSync(filePath, 'utf-8')
const classMatch = content.match(/export class (\w+)/)
const methods = [...content.matchAll(/async (\w+)\(([^)]*)\): Promise<([^>]+)>/g)]
return {
className: classMatch?.[1],
methods: methods.map(([, name, params, returnType]) => ({
name,
params,
returnType,
})),
}
}결과:
| 도메인 규모 | 원본 크기 | 메타데이터 크기 | 감소율 |
|---|---|---|---|
| API 11개 | 41,944 bytes | 1,763 bytes | 95.8% |
Tool Call 횟수도 4회에서 1회로 줄었다. AI가 파일을 직접 뒤지는 대신 이미 정제된 정보를 받아서 바로 코드를 작성한다.
Rules와 Skills 역할 분리
두 개념을 혼동하기 쉽다. 기준은 단순하다.
| 구분 | Rules | Skills |
|---|---|---|
| 역할 | 코드 작성 방식 정의 | 워크플로 자동화 |
| 언제 참조 | 코드 작성 시 항상 | 특정 작업 요청 시 |
| 내용 | 컨벤션, 패턴, 제약 | 스크립트 실행, CLI 연동 |
| 예시 | "쿼리 키는 중앙 관리" | "Swagger 읽고 훅 생성" |
Rules는 배경 지식, Skills는 도구 사용법이다.
도입 효과
팀이 겪은 변화는 수치보다 개발자 경험 측면에서 더 크다.
- 인지적 피로도 감소: 매번 컨벤션을 설명하는 대신 Rules가 대신 전달한다
- 일관성: 개발자마다 다른 방식으로 요청해도 결과 코드가 동일한 패턴을 따른다
- PR 리뷰 변화: "이렇게 쓰세요" 식의 스타일 지적이 줄고, 로직 리뷰에 집중할 수 있게 됐다
마무리
하네스 엔지니어링은 AI를 "더 잘 쓰는 법"이 아니라 "팀이 AI와 함께 일하는 환경을 설계하는 법"에 관한 이야기다. 프롬프트 엔지니어링이 개인 스킬이라면, 하네스 엔지니어링은 팀 인프라다.
Rules에 들어갈 내용을 정의하려면 팀 컨벤션을 명문화해야 하고, Skills를 만들려면 반복 작업을 파악해야 한다. 그 과정 자체가 팀의 개발 방식을 정리하는 계기가 된다.
AI 도구를 팀에 도입했는데 효과가 기대에 못 미친다면, 도구가 아니라 환경을 먼저 들여다볼 만하다.
참고:
관심 있을 만한 포스트
Claude Code 원격 제어 — 커피 마시면서 코딩시키는 시대가 열렸다
Claude Code의 Remote Control 기능으로 스마트폰에서 로컬 코딩 세션을 제어할 수 있게 되었다.
Claude Code 에이전트 팀 — 여러 AI가 협업하는 새로운 방식
Claude Code의 에이전트 팀을 정리했다. 설정법, 사용 사례, 10만 줄 C 컴파일러 구축 실전 사례, 훅을 활용한 품질 관리, 토큰 비용 분석까지 다룬다.
AI 코딩의 맹점 — Artifacts 없이 에이전트는 기억을 잃는다
PRD, ADR, TDD가 AI 코딩 워크플로우에서 왜 선택이 아닌 필수인지, 실전 구조와 함께 살펴본다.
VS Code 팀의 AI 에이전트 병렬화 — 월간 릴리스를 주간으로 만든 워크플로우
VS Code 팀이 월간 릴리스에서 주간 릴리스로 전환한 비결. 에이전트 세션 병렬화, 자동화 파이프라인, 품질 게이트 설계 전반을 공개했다.
코드를 치는 손에서 지시를 내리는 입으로 — Spotify가 AI 개발을 증명한 방법
Spotify가 내부 AI 시스템 Honk과 Claude Code를 활용해 개발 워크플로우를 근본적으로 바꾼 사례를 분석한다.
회의론자의 전향 — Steve Yegge가 그리는 AI 에이전트 시대의 생존 지도
실리콘밸리 베테랑 Steve Yegge가 말하는 AI 에이전트 시대의 핵심 주장과 엔지니어에게 주는 시사점을 정리한다.
Long-Distance NES — VS Code Copilot이 커서 너머까지 코드를 고치는 방법
VS Code Copilot의 Next Edit Suggestions가 파일 전체로 확장되면서, 멀리 떨어진 코드도 자동으로 제안하는 기술적 배경을 분석한다.
Cursor Cloud Agents — 퇴근해도 코드를 짜는 AI 개발자가 등장했다
Cursor가 발표한 Cloud Agents는 독립 VM에서 코드 작성, 브라우저 테스트, PR 제출까지 자율적으로 수행하는 AI 에이전트다.