2025년 6월, AI 연구자 안드레이 카르파시(Andrej Karpathy)는 '프롬프트 엔지니어링' 대신 '컨텍스트 엔지니어링(Context Engineering)'이라는 표현을 쓰기 시작했습니다. 그 뒤로 이 용어는 AI 개발 업계의 표준 언어가 되었습니다. 단순히 질문을 잘 쓰는 것을 넘어, 에이전트에게 어떤 정보를 어떤 순서로 제공하는지 설계하는 작업 전체를 가리킵니다.
왜 '컨텍스트 엔지니어링'인가
프롬프팅이 '무엇을 물을까'에 집중한다면, 컨텍스트 엔지니어링은 '에이전트가 일을 잘 하도록 어떤 환경을 제공할까'에 집중합니다. 2026년 현재 대부분의 에이전트 실패는 모델 능력의 한계가 아니라 컨텍스트 설계 실패에서 옵니다. 잘못된 정보, 너무 많은 정보, 또는 필요한 정보의 부재가 주된 원인입니다.
컨텍스트 창을 RAM처럼 다루기
컨텍스트 창을 컴퓨터의 RAM(작업 메모리)으로 생각해 보세요. 용량이 아무리 커도 한정되어 있습니다. 엔지니어의 역할은 OS가 프로세스 메모리를 관리하듯 — 필요한 것을 로드하고, 필요 없어진 것은 압축·언로드하고, 중요한 것은 디스크(외부 저장소)에 내리는 — 방식으로 컨텍스트를 관리하는 것입니다.
컨텍스트 엔지니어링의 4가지 전략
| 전략 | 설명 | 예시 |
|---|---|---|
| 쓰기(Write) | 대화 외부에 정보를 기록해 나중에 재활용 | 결정 로그, 상태 파일, 작업 목록 |
| 선택(Select) | 지금 당장 필요한 정보만 골라 넣기 | 관련 파일 상위 N개만 주입 |
| 압축(Compress) | 긴 내용을 요약·정제해서 공간 절약 | 이전 대화 요약, 로그 압축 |
| 격리(Isolate) | 서브에이전트에게 독립 창을 줘서 오염 방지 | 서브에이전트 별도 실행 |
온디맨드 지식 로딩(On-demand Knowledge Loading)
하네스의 중요한 패턴 중 하나는 '필요할 때 주입'입니다. 처음부터 모든 문서와 코드를 컨텍스트에 넣지 말고, 에이전트가 특정 파일을 요청하거나 특정 단계에 진입할 때 해당 정보를 로드합니다. Claude Code에서 CLAUDE.md, AGENTS.md 같은 파일이 이 패턴의 실제 예시입니다.
컨텍스트 오염(Context Poisoning) 주의
컨텍스트 오염이란 잘못된 정보, 낡은 데이터, 오해를 불러일으키는 예시가 컨텍스트에 섞여들어 에이전트의 판단을 망가뜨리는 현상입니다. 예를 들어, 오류가 나는 코드 예시를 참고용으로 넣었는데 에이전트가 그 패턴을 따라 하는 경우입니다.
컨텍스트 창의 마지막 20%는 위험 구간
실무 경험상 컨텍스트 창의 80%를 넘어서면 에이전트의 성능이 급격히 떨어지기 시작합니다. 초반 지시를 잊거나, 반복적인 실수를 하거나, 스스로 모순된 행동을 하는 경우가 늘어납니다. 장기 작업에서는 컨텍스트를 주기적으로 압축하거나 새 세션으로 넘겨야 합니다.
AGENTS.md 온디맨드 지식 파일 예시
# 이 파일은 에이전트가 src/payments/ 작업 시 자동 로드됩니다
## 주의사항
- 결제 관련 코드는 반드시 트랜잭션(transaction) 안에 넣을 것
- stripe.ts 직접 수정 금지 -- PaymentService 인터페이스만 사용
- 환불 로직은 refund-policy.md 참조
## 테스트 실행
npm run test:payments
## 승인 필요 행동
- 결제 스키마 변경
- 외부 Webhook URL 추가
컨텍스트 최적화 지시 프롬프트
작업을 시작하기 전에, 내가 제공한 파일들 중에서:
1. 이 작업에 직접 관련 있는 파일만 알려줘
2. 나머지 파일은 읽지 않아도 괜찮아
3. 작업 도중 필요한 추가 정보가 생기면 그때 알려줘 -- 내가 해당 파일을 제공할게
이렇게 온디맨드로 정보를 요청하면서 작업을 진행해 줘.
전체 컨텍스트에 모든 파일을 한 번에 로드하지 마.
장기 루프에서는 '컨텍스트 체크포인트'를 만드세요. 10번 반복마다 지금까지의 진행 상황을 한 문단으로 요약해 외부 파일에 저장하고, 다음 세션은 그 요약으로 시작합니다. 이렇게 하면 며칠에 걸친 작업도 이어갈 수 있습니다.
컨텍스트에 API 키, 비밀번호, 개인정보를 직접 넣지 마세요. 하네스 레벨에서 환경변수(environment variable)로 주입하거나, 시크릿 관리 도구를 사용하세요. 컨텍스트 창의 내용은 로그에 남을 수 있습니다.