보물창고로 돌아가기
기타 유용한 팁2026-03-015분 읽기

컨텍스트 엔지니어링: 프롬프트를 넘어 시스템을 설계하는 법

컨텍스트 엔지니어링: 프롬프트를 넘어 시스템을 설계하는 법

이번 글에서는 컨텍스트 엔지니어링을 "좋은 프롬프트 문장 작성" 수준이 아니라, LLM이 작업을 안정적으로 달성하도록 만드는 동적 시스템 설계 관점에서 정리합니다.


1) 컨텍스트 엔지니어링 한 줄 정의

컨텍스트 엔지니어링은,

LLM이 작업을 합리적으로 달성할 수 있도록, 올바른 형식으로 올바른 정보와 도구를 제공하는 동적 시스템을 구축하는 것

입니다.

핵심은 “문장을 예쁘게 쓰는 기술”이 아니라,

  • 어떤 정보를,
  • 어떤 타이밍에,
  • 어떤 형식으로,
  • 어떤 도구/메모리와 함께 LLM 컨텍스트 윈도우에 넣을지를 설계하는 일입니다.

2) 왜 프롬프트 엔지니어링만으로는 부족한가

기존에는 주로 다음 방식이 중심이었습니다.

  • 프롬프트 엔지니어링(지시문 최적화, Few-shot, CoT)
  • RAG(질문 관련 정보 검색 후 첨부)
  • 메모리/히스토리 관리(상태 유지)
  • Structured Output(JSON 등)

지금은 이들을 개별 기법으로 따로 쓰는 게 아니라, 실서비스 관점에서 한 시스템으로 조합해야 합니다.

즉, 컨텍스트 엔지니어링은 “프롬프트 vs RAG” 같은 선택 문제가 아니라, 프롬프트 + 검색 + 메모리 + 도구 + 출력 스키마를 함께 다루는 오케스트레이션 문제입니다.


3) 안드레이 카파티 관점 요약

카파티가 강조한 포인트는 명확합니다.

  • 산업급 LLM 애플리케이션의 성패는 컨텍스트 윈도우를 적절한 정보로 채우는 능력에 달려 있다.
  • 정보가 부족하면 성능이 안 나오고,
  • 정보가 과다/무관하면 비용은 늘고 성능은 오히려 하락한다.
  • 따라서 컨텍스트 엔지니어링은 단순 프롬프트 작성이 아니라 소프트웨어 엔지니어링의 두꺼운 계층(제어흐름, 패킹, 호출 전략, 검증, 가드레일, 평가, 병렬화 등)의 일부다.

정리하면, LLM 성능이 상향 평준화된 지금은 모델 자체보다 컨텍스트 설계 역량이 더 큰 차이를 만듭니다.


4) 대표 구현 패턴 4가지 (Write / Select / Compress / Isolate)

아래 4가지는 실무에서 가장 자주 쓰는 패턴입니다.

4-1. Write Context

작업에 필요한 상태를 컨텍스트 윈도우 밖(메모리, DB, 파일, 스크래치패드)에 저장합니다.

예시:

  • 이전 대화 히스토리 저장
  • 에이전트 작업 중간결과 저장
  • 사용자 선호/프로필 메모리 저장

4-2. Select Context

저장된 정보 중 지금 질문에 필요한 것만 골라 컨텍스트 윈도우 안으로 가져옵니다.

예시:

  • 고객 문의 유형에 맞는 매뉴얼만 RAG로 검색
  • 사용자 계정 API 데이터 중 필요한 필드만 조회
  • 메모리 중 현재 주제와 관련된 항목만 주입

4-3. Compress Context

정보가 너무 많을 때 요약/압축/절단으로 토큰을 최적화합니다.

예시:

  • 웹 문서 100개를 요약 LLM으로 압축 후 본 모델에 전달
  • 긴 로그를 핵심 이벤트 중심으로 축약
  • 중요도 기반 top-k만 선택

4-4. Isolate Context

복합 작업을 분해해 컨텍스트를 분리합니다.

예시:

  • “최저가 항공권 + 도쿄 맛집 추천” 요청을 2개 태스크로 분리
  • 코드 실행은 샌드박스 컨텍스트에서 격리
  • 멀티에이전트로 역할별 컨텍스트를 분할 후 최종 합성

5) 실전 체크리스트

컨텍스트 엔지니어링 품질은 아래 5가지만 보면 빠르게 점검됩니다.

  1. 관련성: 지금 작업에 필요한 정보만 들어갔는가?
  2. 충분성: 판단에 필요한 근거가 빠지지 않았는가?
  3. 형식성: 모델이 읽기 쉬운 구조(스키마/구분자/요약)인가?
  4. 경제성: 토큰 비용 대비 성능이 합리적인가?
  5. 격리성: 서로 다른 과업의 컨텍스트가 오염되지 않는가?

6) 결론

컨텍스트 엔지니어링은 “프롬프트 잘 쓰는 요령”이 아니라,

LLM의 성능을 실제 제품 수준으로 끌어내기 위한 시스템 엔지니어링

입니다.

프롬프트, RAG, 메모리, 툴 호출, 출력 스키마를 하나의 제어흐름으로 설계할 때, 비로소 LLM은 일관되고 재현 가능한 성능을 냅니다.

이제 질문은 단순합니다. “어떤 모델을 쓸까?”가 아니라, “이 작업에 맞는 컨텍스트를 어떻게 설계할까?” 입니다.