[ AI & Robot ] 7-2. Context Caching

2026년 04월 16일
공개 Hanyang Univ 26-01

1. 컨텍스트 캐싱 (Context Caching) 요약

"AI에게 교과서를 미리 읽혀두고, 시험 때는 질문만 던지는 기술"

✅ 작동의 핵심 조건: "앞부분이 똑같아야 한다" (Prefix Matching)

  1. 대원칙: 프롬프트의 **앞부분(접두어)**이 이전 호출과 완전히 일치할 때만 캐시가 작동합니다.
  2. 실무적 배치: 1. [고정] 시스템 프롬프트 (Role 부여)
  3. 2. [고정] 대용량 MD 파일 (매뉴얼, 코드 전체 구조)
  4. 3. [변동] 사용자의 현재 질문 ($Q$)
※ 주의: 질문을 문서 앞에 두면 캐싱은 매번 깨집니다.

✅ 왜 사용하는가? (3대 이점)

  1. 경제성: 100만 토큰 이상의 대규모 컨텍스트 사용 시 비용이 약 90% 절감됩니다.
  2. 속도: 문서 전체를 다시 해석하는 연산(Prefill)을 건너뛰므로 응답 속도가 즉각적입니다.
  3. 정확도: 정보를 조각내는 RAG와 달리, 문서 전체의 맥락을 유지하여 할루시네이션(환각)을 최소화합니다.

2. [상세 설명] 캐싱의 수학적 본체: Q, K, V

캐싱이 실제로 저장하는 것은 텍스트가 아니라, 모델이 연산을 마친 **'KV 상태(Key-Value State)'**입니다.

🔍 QKV 직관적 정의

  1. $Q$ (Query - 질문): 지금 막 들어온 질문의 '검색 의도'. (캐싱 불가, 매번 생성)
  2. $K$ (Key - 이름표): 보관된 정보들이 가진 '인덱스/특징'. (캐싱의 대상)
  3. $V$ (Value - 알맹이): 실제 답변에 쓰일 '의미적 정보'. (캐싱의 대상)

🏗️ 캐싱이 일어나는 공학적 과정

  1. 안경 ($W$) 적용: 모델의 고정된 가중치($W_K, W_V$)라는 안경으로 입력된 MD 파일($X$)을 봅니다.
  2. 결과물 생성: "이 내용은 로봇 팔 제어에 관한 것($K$)"이고 "구체적인 전압값은 220V($V$)"라는 벡터 결과물이 나옵니다.
  3. 메모리 고정:$K, V$ 벡터들을 GPU 메모리에 박아둡니다. 이것이 바로 KV Cache입니다.
  4. 즉시 매칭: 새로운 질문($Q$)이 들어오면, 메모리에 있는 $K$들과 대조하여 필요한 $V$를 광속으로 조합해 답변합니다.

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

교수님을 위한 한 줄 요약: "캐싱이란 위 수식에서 이미 계산이 끝난 고정값 $K$와 $V$를 메모리에 홀드(Hold)시켜서, 새로운 $Q$가 들어올 때마다 곱하기 연산만 빠르게 수행하는 최적화 기법입니다."

3. RAG vs Long-Context Caching (비교표)

구분RAG (기존 방식)Long-Context Caching (최신 방식)
비유도서관에서 책 찾아오기책 내용을 다 외우고 있기
데이터 양무제한 (테라바이트 단위)수백만 토큰 (수십 권의 책/코드)
준비 과정벡터 DB 구축, 청킹(Chunking)단순히 MD 파일 업로드 후 캐싱
장점유지비가 저렴함맥락 이해가 완벽하고 구현이 매우 쉬움
적정 사례고객센터 FAQ, 사내 위키 전체특정 프로젝트 코드 리뷰, 전용 제품 매뉴얼



< Context Caching 방식 비교 >

1. 명시적 방식 vs 자동 방식 비교

구분자동 캐싱 (Implicit)명시적 캐싱 (Explicit)
제어권구글 인프라가 판단 (알아서 함)개발자가 직접 생성 및 삭제
작동 조건32k 토큰 이상 + 접두어 완전 일치토큰 양에 상관없이 개발자가 지정
비용 할인불확실함 (기회주의적)확정적 (약 90% 인풋 토큰 할인)
보관 비용없음있음 (시간당 보관료 발생)

2. 명시적 캐싱의 3단계 워크플로우

명시적 캐싱을 구현할 때는 단순히 텍스트를 보내는 게 아니라, **'데이터를 서버에 박아두고 주소표를 받는 과정'**이 추가됩니다.

[Step 1] 캐시 생성 및 업로드 (Create)

변하지 않는 대용량 MD 파일이나 소스 코드를 서버로 보냅니다. 이때 모델은 이 데이터를 읽고 **$K$와 $V$ 벡터(KV Cache)**를 미리 계산해둡니다.

  1. 이때 **TTL(Time To Live)**을 설정하여, 이 지식을 언제까지 기억할지 명시합니다.

[Step 2] 캐시 참조 ID 획득 (Reference)

서버는 계산된 KV 상태를 저장하고, 이를 가리키는 고유한 **cache_name (또는 ID)**을 개발자에게 돌려줍니다.

[Step 3] 질문 및 답변 (Inference)

이제 질문을 던질 때 대용량 텍스트를 다시 보낼 필요가 없습니다. **"아까 그 ID(cache_name)를 기반으로 대답해줘"**라고 질문($Q$)만 보냅니다.