Context Engineering — 에이전트 품질을 결정하는 진짜 레버
"프롬프트를 잘 쓰면 된다"는 시대는 지났다. 이제 경쟁력은 컨텍스트를 잘 설계하느냐에서 갈린다.
Context Engineering은 LLM에게 전달되는 전체 정보 환경을 의도적으로 구성하는 실천이다. 시스템 프롬프트 한 줄이 아니라, 대화 이력·도구 응답·문서·메모리까지 모두 포함된다.
프롬프트 엔지니어링과 뭐가 다른가
| 항목 | 프롬프트 엔지니어링 | 컨텍스트 엔지니어링 |
|---|---|---|
| 단위 | 단일 입력 문자열 | 입력 전체 환경 |
| 범위 | 한 턴 | 세션 전체 |
| 변수 | 문구·예시 | 문구 + 메모리 + 검색 + 도구 |
| 평가 | 출력 품질 | 태스크 완결률 |
| 책임 | 프롬프트 작성자 | 시스템 아키텍트 |
비유하면 프롬프트 엔지니어링은 요리사에게 레시피를 주는 일이고, 컨텍스트 엔지니어링은 주방 전체를 설계하는 일이다. 재료 배치, 도구 접근성, 화구 순서까지 모두 해당한다.
컨텍스트의 4가지 구성요소
1. Instruction Context — 지시 정보
시스템 프롬프트, 역할, 출력 형식 규칙 등.
너는 고객 지원 에이전트다.
답변은 3문장 이내로, 존댓말로 작성한다.
고객 개인정보는 절대 반복해서 노출하지 않는다.2. State Context — 상태 정보
현재 대화 이력, 이전 도구 호출 결과, 사용자 선호 설정. 세션이 길어질수록 이 부분이 비대해진다.
3. Knowledge Context — 지식 정보
RAG로 검색된 문서, 코드베이스 발췌, 제품 매뉴얼. 에이전트가 "사실"을 근거로 말하게 만든다.
[💡 잠깐! 이 용어는?] RAG(Retrieval-Augmented Generation): 질의에 맞는 외부 지식을 검색해서 LLM 입력에 붙이는 패턴. 모델이 최신 정보나 사내 데이터를 참고할 수 있게 해준다.
4. Tool Context — 도구 정보
사용 가능한 도구 스키마, 이전 호출 결과, 에러 메시지. MCP 서버 연결이 여기 포함된다.
컨텍스트 윈도우 관리 전략
긴 세션에서 컨텍스트가 폭발하는 걸 막는 네 가지 전략이다.
function trimContext(messages, maxTokens) {
const system = messages.filter(m => m.role === 'system')
const recent = messages.slice(-10)
const summary = summarizeOld(messages.slice(0, -10))
return [...system, { role: 'system', content: summary }, ...recent]
}1. Sliding Window — 최근 N개만 유지. 간단하지만 앞부분 정보 유실 위험.
2. Summarization — 오래된 내용을 요약으로 대체. 토큰은 아끼지만 디테일 손실.
3. Semantic Compression — 중요도 점수로 필터링. 품질 좋지만 구현 복잡.
4. External Memory — 벡터 DB에 저장하고 필요할 때만 검색. 세션 간 영속성도 확보.
대부분의 프로덕션 에이전트는 이 네 가지를 조합해서 쓴다.
실전 패턴
계층적 컨텍스트
역할마다 다른 컨텍스트를 주는 구조다.
| 레이어 | 내용 | 빈도 |
|---|---|---|
| Global | 회사 톤, 금지 사항 | 항상 |
| Session | 사용자 프로필, 현재 작업 | 세션마다 |
| Turn | 직전 메시지, 도구 응답 | 매 턴 |
| Tool | 도구 스키마, 최근 에러 | 호출 시점 |
컨텍스트 오염 감지
에이전트가 엉뚱한 답을 내놓을 때, 프롬프트가 아니라 컨텍스트에 독이 들어간 경우가 많다. 이전 도구 응답의 에러, 무관한 검색 결과, 사용자의 오탈자가 누적된다.
포인트: 에이전트 품질이 떨어지면 모델을 바꾸기 전에 컨텍스트를 먼저 감사하라.
측정과 개선
컨텍스트 품질을 측정할 만한 지표는 이렇다.
- 토큰 효율성: 전체 대비 실제 사용된 정보 비율
- 관련성 점수: 포함된 문서 조각의 질의 관련도
- 오염 빈도: 무관한 정보가 응답에 섞이는 비율
- 재검색 비율: 같은 정보를 다시 찾는 빈도
정리
- 프롬프트 한 줄보다 컨텍스트 전체 환경이 품질을 결정한다
- 구성요소는 지시·상태·지식·도구 네 레이어로 나눌 수 있다
- 긴 세션에서는 윈도우·요약·압축·외부 메모리 조합이 필요하다
- 에이전트 품질 저하 시 모델보다 컨텍스트 감사가 먼저다
프롬프트 엔지니어는 개별 쿼리를 다루고, 컨텍스트 엔지니어는 에이전트의 정보 생태계를 다룬다. 앞으로 AI 제품 경쟁력은 이 생태계의 설계 깊이에서 갈린다.
참고:
관심 있을 만한 포스트
에이전틱 워크플로우의 멘탈 프레임워크 — AI에게 일을 맡기는 사고 체계
AI 에이전트에게 작업을 위임할 때 필요한 5단계 사고 모델을 정리한다.
뱅크샐러드의 LLM 코드 안전화 — DSL로 Vibe Coding을 프로덕션에 쓰는 법
LLM이 생성한 코드를 프로덕션에서 안전하게 실행하기 위해 뱅크샐러드가 선택한 DSL 기반 전략을 해부한다.
Cursor Rules 47종 모음 — 16개 프레임워크용 AI 코딩 규칙
React, Next.js, Django 등 주요 프레임워크에 맞춘 Cursor 룰 파일의 구조와 선택 기준을 정리한다.
Factory Model — 코딩 에이전트가 바꾼 소프트웨어 엔지니어링의 구조
Addy Osmani가 제안한 '공장 모델'로 AI 코딩 시대의 엔지니어 역할 변화를 짚는다.
GenUI vs. Vibe Coding — AI가 UI를 결정할 때와 내가 결정할 때
AI가 인터페이스를 생성하는 두 접근법의 핵심 차이와 각각이 적합한 맥락을 분석한다.
배민 다국어 서비스 — 5년 백로그를 LLM으로 19일에 끝낸 이야기
5년간 미루던 다국어 번역 파이프라인을 Claude Haiku에서 Amazon Nova로 전환하며 19일 만에 완성한 우아한형제들의 기술 스택과 구현 구조.
하네스 엔지니어링 — 팀을 위한 AI 개발 환경을 설계하는 방법
프롬프트를 잘 쓰는 게 아니라 AI가 일하는 환경을 설계하는 것. 우아한형제들이 Rules와 Skills로 팀 맞춤형 AI 워크플로를 구축한 사례.
VS Code 1.115 — 에이전트 앱 프리뷰와 터미널 도구 확장
병렬 에이전트 세션 관리를 위한 VS Code Agents App과 백그라운드 터미널 자동화 기능이 추가된 1.115 릴리즈를 살펴본다.