Search
Duplicate

[Claude]번외_하네스 엔지니어링+심판자 Gemini,Gpt

목차(클릭하세요)
LLM실수를 줄이기 위한 단 하나의 CLAUDE.md 파일 1. 코딩전에 먼저 생각하라 2. 단순하게 만들어라 3. 필요한 부분만 수술하듯 고쳐라 4. 목표 중심으로 실행하라
[안드레 카파시의 깃허브]
andrej-karpathy-skills
forrestchang
[관련 영상]

1. 하네스 엔지니어링이란?

1-1. 개념 정의

말이 빠르다고 좋은 게 아니다! 올바른 방향으로 달리게 만드는 것이 진짜 기술이다!
AI 코딩 에이전트는 코드를 못 짜는 게 아님.
오히려 너무 잘 짜고, 너무 빠르고, 너무 자신 있게 짬. 문제는 잘못된 방향으로 전속력으로 달려버린다는 것.
하네스(Harness) 란 말 그대로 마구(馬具) — 말에게 채우는 고삐와 안장. AI에게 더 많은 자유를 주는 게 아니라, 올바른 작업 습관을 강제하는 구조적 제약을 의미함.
“카파시의 경험: AI는 코딩하다가 막히는 문제가 생기더라도 질문하지 않고, 그냥 코딩을 진행하는 경향이 있음 물론 사용자역시 “~해줘,~ 고쳐줘”를 남발하고 있다고 봄

1-2. 왜 필요한가?

AI 코딩 에이전트가 실제로 반복 유발하는 3가지 문제
문제
현상
침묵하는 잘못된 가정
모호한 요청을 받으면 물어보지 않고 임의로 해석해서 달려감
과설계 (Over-engineering)
간단한 함수로 끝날 일을 추상 클래스, 확장 구조로 만들어버림
무분별한 코드 수정
버그 하나 고치라고 했는데 주석, 포맷, 스타일까지 전부 바꿔버림

2. Andrej Karpathy의 GitHub

2-1. 전 세계 개발자들이 열광한 이유

[이벤트] 2026년 1월 26일, OpenAI 공동창업자이자 테슬라 AI 디렉터였던 Andrej Karpathy가 X(트위터)에 포스팅 하나를 올림.
2025년 11월 기준: 수동 코딩 80% + AI 보조 20%
2026년 1월 기준: AI 에이전트 코딩 80% + 수정 20% 로 개발 상황이 완전히 역전됨
이 전환 과정에서 반복적으로 겪은 LLM 코딩 실패 패턴을 구체적으로 정리해서 공개
이걸 읽은 개발자 Forrest Chang이 카파시의 관찰을 실제로 작동하는 CLAUDE.md 파일로 변환함 → 저장소 이름: forrestchang/andrej-karpathy-skills → 영상 촬영 시점 기준 GitHub 스타 9만 개 이상 돌파

2-2. andrej-karpathy-skills 저장소 구조

andrej-karpathy-skills/ ├── CLAUDE.md ← 핵심 파일 (65줄) ├── EXAMPLES.md ← Before/After 예시 ├── CURSOR.md ← Cursor 에디터 적용 가이드 ├── skills/ │ └── karpathy-guidelines/ │ └── SKILL.md ← Claude Code 플러그인용 └── .cursor/ └── rules/ └── karpathy-guidelines.mdc ← Cursor 룰 파일
Plain Text
복사
단순한 텍스트 파일이 아님. Claude Code 마켓플레이스 플러그인 구조로 설계되어 있어서 명령어 하나로 전체 프로젝트에 일괄 적용 가능함.

3. 하네스 엔지니어링의 실제 — CLAUDE.md 파헤치기

3-1. 원본 CLAUDE.md 전문 (65줄)

# CLAUDE.md Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed. **Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment. ## 1. Think Before Coding **Don't assume. Don't hide confusion. Surface tradeoffs.** Before implementing: -State your assumptions explicitly. If uncertain, ask. -If multiple interpretations exist, present them - don't pick silently. -If a simpler approach exists, say so. Push back when warranted. -If something is unclear, stop. Name what's confusing. Ask. ## 2. Simplicity First **Minimum code that solves the problem. Nothing speculative.** -No features beyond what was asked. -No abstractions for single-use code. -No "flexibility" or "configurability" that wasn't requested. -No error handling for impossible scenarios. -If you write 200 lines and it could be 50, rewrite it. Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify. ## 3. Surgical Changes **Touch only what you must. Clean up only your own mess.** When editing existing code: -Don't "improve" adjacent code, comments, or formatting. -Don't refactor things that aren't broken. -Match existing style, even if you'd do it differently. -If you notice unrelated dead code, mention it - don't delete it. When your changes create orphans: -Remove imports/variables/functions that YOUR changes made unused. -Don't remove pre-existing dead code unless asked. The test: Every changed line should trace directly to the user's request. ## 4. Goal-Driven Execution **Define success criteria. Loop until verified.** Transform tasks into verifiable goals: -"Add validation" → "Write tests for invalid inputs, then make them pass" -"Fix the bug" → "Write a test that reproduces it, then make it pass" -"Refactor X" → "Ensure tests pass before and after" For multi-step tasks, state a brief plan: 1.[Step] → verify: [check] 2.[Step] → verify: [check] 3.[Step] → verify: [check] Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
Markdown
복사
# CLAUDE.md LLM 코딩에서 흔히 발생하는 오류를 줄이기 위한 행동 지침입니다. 필요에 따라 프로젝트별 지침과 병합하세요. **절충점:** 이 지침은 속도보다는 신중함을 강조합니다. 사소한 작업의 경우 판단력을 발휘하세요. ## 1. 코딩 전 생각하기 **추측하지 마세요. 모호한 부분을 숨기지 마세요. 절충점을 명확히 드러내세요.** 구현 전: -가정을 명확하게 명시하세요. 불확실하면 질문하세요. -여러 해석이 가능한 경우, 모두 제시하세요. 묵묵히 선택하지 마세요. -더 간단한 접근 방식이 있다면, 그렇게 말하세요. 필요하다면 반대 의견을 제시하세요. -불분명한 부분이 있으면 멈추세요. 무엇이 모호한지 파악하고 질문하세요. ## 2. 단순성 우선 **문제를 해결하는 최소한의 코드만 작성하세요. 추측성 코드는 포함하지 마세요.** -요청된 기능 이상의 기능은 추가하지 마세요. -일회용 코드를 위한 추상화는 사용하지 마세요. -요청되지 않은 "유연성"이나 "구성 가능성"은 추가하지 마세요. - 불가능한 시나리오에 대한 오류 처리는 하지 마세요. - 200줄을 작성했는데 50줄로 줄일 수 있다면 다시 작성하세요. 스스로에게 물어보세요. "선임 엔지니어가 이 코드가 너무 복잡하다고 말할까?" 만약 그렇다면, 간소화하세요. ## 3. 외과적 수정 **꼭 필요한 부분만 수정하세요. 자신이 만든 코드만 정리하세요.** 기존 코드를 편집할 때: - 인접한 코드, 주석 또는 서식을 "개선"하지 마세요. - 문제가 없는 부분을 리팩토링하지 마세요. - 기존 스타일을 따르세요. 비록 다른 방식으로 작성하더라도. - 관련 없는 사용되지 않는 코드를 발견하면 언급하세요. 삭제하지 마세요. 변경 사항으로 인해 사용되지 않는 요소가 생긴 경우: - 변경으로 인해 사용되지 않게 된 import 문/변수/함수를 제거하세요. - 요청받지 않은 한 기존의 사용되지 않는 코드를 제거하지 마세요. 테스트: 변경된 모든 코드는 사용자의 요청과 직접적으로 연결되어야 합니다. ## 4. 목표 중심 실행 **성공 기준을 정의하고 검증될 때까지 반복합니다.** 작업을 검증 가능한 목표로 변환합니다. - "유효성 검사 추가" → "유효하지 않은 입력에 대한 테스트를 작성하고 통과하도록 합니다." - "버그 수정" → "버그를 재현하는 테스트를 작성하고 통과하도록 합니다." - "X 리팩토링" → "리팩토링 전후에 테스트가 통과하는지 확인합니다." 여러 단계로 이루어진 작업의 경우, 간략한 계획을 명시합니다. 1. [단계] → 검증: [확인] 2. [단계] → 검증: [확인] 3. [단계] → 검증: [확인] 명확한 성공 기준은 독립적인 반복 작업을 가능하게 합니다. 모호한 기준("작동하게 만들기")은 지속적인 명확화를 요구합니다.
Markdown
복사

3-2. 4가지 원칙 핵심 설명

[원칙 1] Think Before Coding (코딩 전에 생각하라)
AI는 모호한 요청을 받으면 물어보지 않고 임의로 해석해서 진행하는 경향이 있음. 예: “로그인 기능 추가해줘” → JWT, OAuth, 세션 기반 중 사용자에게 묻지 않고 혼자 결정해버림.
구분
세션 기반 인증 (Session)
JWT 기반 인증 (Token)
OAuth 2.0 (Social)
저장 위치
서버 메모리 또는 DB
클라이언트 (로컬 스토리지/쿠키)
외부 서비스 제공자 (Google 등)
상태 유지
Stateful (서버가 상태를 가짐)
Stateless (서버가 상태를 안 가짐)
Delegation (권한 위임 방식)
확장성
서버 부하 발생 가능, 분산 환경 복잡함
서버 부하 적음, 마이크로서비스에 유리함
타 서비스 연동 및 관리 편의성 높음
보안성
세션 ID 탈취 시 위험, 세션 하이재킹 주의
토큰 탈취 시 만료 전까지 통제 어려움
외부 인증 서버를 통한 높은 보안 수준
주요 특징
전통적인 방식, 구현이 상대적으로 단순함
별도의 저장소 없이 데이터 검증 가능함
사용자 정보 직접 관리 부담이 적음
이 원칙은 불확실할 때 멈추고 질문하도록 강제함.
[원칙 2] Simplicity First (단순하게 먼저)
간단한 함수 하나로 끝날 일을 추상 클래스, 확장 가능한 구조, 미래 기능까지 구현해버리는 과설계를 막음.
“200줄로 썼는데 50줄로 될 것 같으면, 다시 써라.”
요청하지 않은 유연성, 설정 가능성, 추상화 일절 금지.
똑똑해보이는 코드가 아닌 필요한 만큼의 코드를 작성하도록 강제
[원칙 3]Surgical Changes (수술처럼 필요한 부분만 수정)
버그 하나 고치라고 했는데 옆 코드까지 리팩토링, 주석 변경, 포맷 수정까지 해버리는 문제를 막음.
변경된 모든 줄은 사용자 요청으로 직접 추적 가능해야 함.
내가 만들어낸 고아 코드(사용 안하는 import 등)는 정리.
기존 dead code는 언급만 하고 건드리지 말 것.
[원칙 4] Goal-Driven Execution (목표 중심으로 실행하라)
사용자가 모호한 지침을 주더라도, AI가 바로 코딩하는 것이 아니라 스스로 검증가능한 목표중심으로 변환한 뒤 코드작성이 들어감
(기존 LLM)“버그 고쳐줘” → AI가 대충 고치고 “완료했습니다” 하는 문제 발생
(하네스 엔지니어링) 모호한 요청을 검증 가능한 목표로 변환
버그 재현하는 테스트 작성 → 테스트 실패 확인 → 코드 수정 → 테스트 통과 확인

4. 전역 vs 프로젝트 — 어디에 두느냐의 차이

CLAUDE.md는 “어디에 놓느냐”에 따라 적용 범위가 완전히 달라짐.

4-1. 전역 설정 (~/.claude/CLAUDE.md)

# 전역 설치 방법 (Claude Code 플러그인) /plugin marketplace add forrestchang/andrej-karpathy-skills /plugin install andrej-karpathy-skills@karpathy-skills
Bash
복사
또는 수동으로:
mkdir -p ~/.claude curl -o ~/.claude/CLAUDE.md \ https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md
Bash
복사
항목
내용
위치
~/.claude/CLAUDE.md
적용 범위
내 모든 프로젝트에 공통 적용
용도
내 코딩 스타일, 기본 작업 원칙, 개인 습관 설정
예시 내용
카파시 4원칙, 선호 언어/프레임워크, 커밋 메시지 스타일
주의
모든 프로젝트에 영향 → 너무 구체적인 설정은 충돌 유발 가능

4-2. 프로젝트 폴더 설정 (프로젝트폴더/CLAUDE.md)

# 프로젝트별 설치 (현재 폴더에만 적용) curl -o CLAUDE.md \ https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md
Bash
복사
기존 CLAUDE.md에 추가하는 경우:
echo "" >> CLAUDE.md && \ curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md
Bash
복사
항목
내용
위치
프로젝트폴더/CLAUDE.md
적용 범위
해당 프로젝트 폴더에서만 적용
용도
프로젝트별 기술 스택, DB 구조, 팀 컨벤션, 특수 제약
예시 내용
“이 프로젝트는 FastAPI + PostgreSQL 사용”, “테스트는 pytest로만”
우선순위
전역 설정보다 높음 (프로젝트 설정이 덮어씀)

4-3. 전역 vs 프로젝트 비교 요약

~/.claude/CLAUDE.md (전역)
프로젝트/CLAUDE.md (로컬)
적용 범위
모든 프로젝트
해당 폴더만
주요 용도
나의 코딩 철학, 공통 원칙
프로젝트 특수 맥락
변경 빈도
낮음 (거의 안 바꿈)
높음 (프로젝트마다 다름)
충돌 시 우선순위
낮음
높음 (로컬이 우선)
팀 공유 여부
개인용
git에 커밋해서 팀 공유 가능
두 파일은 병합(merge)되어 적용됨 : 전역이 기본값, 프로젝트가 덮어쓰거나 추가하는 구조.

5. 양파고의 하네스 엔지니어링 활용 팁

5-1. AI 교육 현장에서의 응용

하네스 엔지니어링의 4원칙은 AI 관련 수업의 철학에도 그대로 적용됨:
원칙
수업 설계 적용
Think Before Coding
학생에게 코딩 전 설계서(의사코드) 먼저 작성하게 하기
Simplicity First
“가장 짧은 코드로 구현하기” 과제 추가
Surgical Changes
기존 코드에서 딱 한 곳만 고치는 디버깅 실습
Goal-Driven Execution
성공 기준을 먼저 정의하는 TDD 입문 활동

5-2. 안드레 카파시 하네스 엔지니어링사용 전략

CLAUDE.md로 관리
나만의 CLAUDE.md에 해당 내용을 넣고 전역 설정(~/.claude/CLAUDE.md)에 포함시키는 방법
혹은 코드 작업 프로젝트에만 프로젝트별 설정(CLAUDE.md)으로 포함시키는 방법
CLAUDE.md가 아닌, skill로 추가하는 방법
web클로드에서도 사용할 수 있도록 skill방식을 사용하기로 함
더 좋은 하네스 엔지니어링이 나올 수 있으므로
karpathy-coding.zip
1.9 KiB
해당 깃허브 페이지
[스킬 적용 방법]

5-3. 안드레 카파시 하네스 엔지니어링 스킬 적용 전후 비교

테스트할 작업: 태양계를 시뮬레이션하는 단일 HTML 파일(index.html) 구축
코드에 대한 심판자는 제미나이에게 맡길예정
Create a single, complete HTML page that simulates the solar system. All eight planets orbit the sun at actual relative velocities (velocities based on scale, not actual velocities). Use inline SVGs for celestial bodies and CSS animations or `requestAnimationFrame` for movement. Clicking a planet opens a card displaying its actual information (distance, mass, day length, satellites). Include a time slider that allows the user to adjust the animation speed from 0.1x to 100x. Use a dark theme and beautiful constellation backgrounds, and do not use external libraries other than those included in the HTML file. Design it to look like a museum exhibit. Save it as an index.html file. Make all menus in Korean.
Plain Text
복사
[스킬 적용 전]
총 코드는 약 1274줄
체험 링크
해당 코드에 대한 Gemini의 평가 : 종합 점수: 96 / 100
평가 항목
주요 평가 요인
평가 결과
복잡도 및 간결성
데이터 중심 설계(Data-driven), 선언적 스타일, 로직 분리
매우 우수
오류 및 디버깅
예외 처리, 상태 관리의 명확성, 좌표 계산 정밀도
우수
실행 시간(성능)
GPU 가속(Canvas), 렌더링 최적화, 연산 효율성
최상
[스킬 적용 후]
총 코드는 약 191줄????
확실한건 작업 속도가 말도 안되게 빨라졌다..
그리고 작업 과정을 설명해줌
중간 응답
체험 링크
해당 코드에 대한 Gemini의 평가 : 종합 점수: 98 / 100
평가 항목
주요 평가 요인
평가 결과
복잡도 및 간결성
변수 단축화, 데이터 구조의 압축, 불필요한 로직 제거
최상
오류 및 디버깅
상태 관리 안정성, 델타 타임(dt) 적용, 이벤트 리스너 구조
우수
실행 시간(성능)
배경 캐싱(Canvas Caching), 렌더링 루프 최적화
독보적
[제미나이의 비교 심사평]
구분
1번째 코드 (1,000줄+)
2번째 코드 (100줄+)
설계 철학
가독성 및 유지보수(Readability) 중심
성능 및 밀도(Performance Density) 중심
상태 관리
명시적이고 서술적인 변수명 사용
최소한의 메모리 점유를 위한 단축 변수 사용
렌더링
매 프레임 모든 요소를 전수 계산
배경 캐싱을 통한 연산량 80% 절감
결과물
교육용 교재로 적합한 '친절한 코드'
실제 서비스 임베딩에 적합한 '최적화된 엔진'

6. GPT의 하네스 엔지니어링 비교심판

[스킬 적용 전]

점수

항목
점수
코드 복잡도
85
디버깅 용이성
78
실행 성능
90
평균
84.3 / 100

핵심 판단

1.
구조적 설계는 우수함
2.
그러나 "단일 파일 구조" 때문에 확장성은 제한적
3.
UI/CSS가 지나치게 커서 복잡도 상승
평가 항목
분석
구조
HTML / CSS / JS가 한 파일에 결합된 monolithic 구조
모듈화
기능 단위 함수 분리는 잘 되어 있음 (draw, event, data 등)
데이터 구조
PLANETS 객체 구조 매우 명확 (확장성 좋음)
중복 코드
drawPlanet 내부 분기문 증가 → 일부 중복 존재
가독성
주석 + 섹션 구분 매우 우수
스타일 분리
CSS 매우 방대 → 유지보수 난이도 상승
[스킬 적용 후]

점수

항목
점수
코드 복잡도
82
디버깅 용이성
72
실행 성능
93
평균
82.3 / 100

핵심 판단

1.
bgCache 사용이 핵심 개선 포인트
2.
렌더링 비용 크게 감소
3.
실제 체감 성능 매우 좋음
평가 항목
분석
구조
여전히 단일 파일(monolithic) 구조
코드 길이
1번 대비 약 20~30% 감소
변수 명명
축약형 (p, r, au, T 등) → 가독성 감소
데이터 구조
간결하지만 의미 전달력은 다소 약함
함수 구조
핵심 기능 중심으로 단순화됨
CSS
훨씬 간결해짐

최종 결론

1.
안드레 카파스 하네스 엔지니어링 스킬 사용 전
“교육용 + 전시용 + 가독성 중심 코드”
2.
안드레 카파스 하네스 엔지니어링 스킬 사용 후
“성능 최적화 + 실전 엔지니어링 코드”
점수: 82.3
“1번은 읽기 좋은 작품, 2번은 빠르게 동작하는 엔진”