한 줄 요약: 컨텍스트 윈도우(Context Window)란, LLM이 단일 추론 요청에서 동시에 처리할 수 있는 텍스트(토큰)의 최대 크기로, AI의 기억 용량에 해당한다.


1. 컨텍스트 윈도우란 무엇인가?

사람이 짧은 단기 기억을 가진 것처럼, LLM도 한 번에 “볼 수 있는” 정보의 양에 한계가 있습니다. 이 한계를 컨텍스트 윈도우라고 합니다.

책상 위에 올려놓을 수 있는 서류의 양이라고 생각하면 됩니다. 책상이 크면 더 많은 서류를 펼쳐놓고 동시에 참고할 수 있지만, 책상 크기를 넘어서는 서류는 올려놓을 수 없습니다. 컨텍스트 윈도우가 크면 긴 문서, 긴 대화, 복잡한 코드베이스를 통째로 처리할 수 있습니다.

토큰(Token)은 LLM이 텍스트를 처리하는 단위입니다:

  • 영어: 평균 1단어 ≈ 1.3토큰
  • 한국어: 평균 1음절 ≈ 1~2토큰
  • 1,000토큰 ≈ 약 750단어(영어) ≈ 약 500~600자(한국어)

2. 핵심 개념 이해하기

주요 모델별 컨텍스트 윈도우 크기 (2025년 기준)

모델 컨텍스트 윈도우 약 A4 페이지 수
Claude 3.5 Sonnet 200,000 토큰 ~약 650페이지
Claude 3 Opus 200,000 토큰 ~약 650페이지
GPT-4o 128,000 토큰 ~약 400페이지
Gemini 1.5 Pro 1,000,000 토큰 ~약 3,300페이지
GPT-3.5 Turbo 16,385 토큰 ~약 53페이지

컨텍스트 윈도우의 구성

┌─────────────────────────────────────────┐
│           컨텍스트 윈도우 (200K 토큰)     │
│                                          │
│  [시스템 프롬프트]  [대화 히스토리]  [문서] │
│      2K 토큰           50K 토큰     148K  │
└─────────────────────────────────────────┘

입력(Input)과 출력(Output) 모두 컨텍스트 윈도우에 포함됩니다. 대화가 길어질수록 이전 대화가 윈도우를 채우고, 결국 오래된 내용이 “밀려납니다”.

Lost-in-the-Middle 문제

컨텍스트 윈도우가 크더라도, LLM은 앞부분과 뒷부분에 더 집중하는 경향이 있습니다. 긴 문서의 중간 부분 정보는 상대적으로 덜 반영될 수 있습니다.

3. 실무 적용 예시

컨텍스트 윈도우를 효율적으로 관리하는 코드입니다.

import tiktoken
from openai import OpenAI

def count_tokens(text: str, model: str = "gpt-4o") -> int:
    """텍스트의 토큰 수를 계산합니다."""
    encoding = tiktoken.encoding_for_model(model)
    return len(encoding.encode(text))

def truncate_to_limit(
    messages: list[dict],
    max_tokens: int = 120_000,  # GPT-4o 한도의 93%
    model: str = "gpt-4o"
) -> list[dict]:
    """컨텍스트 한도 초과 시 오래된 메시지를 제거합니다."""
    total = sum(count_tokens(m["content"], model) for m in messages)

    # 시스템 프롬프트는 항상 유지
    system_msgs = [m for m in messages if m["role"] == "system"]
    user_msgs = [m for m in messages if m["role"] != "system"]

    while total > max_tokens and user_msgs:
        removed = user_msgs.pop(0)  # 가장 오래된 메시지 제거
        total -= count_tokens(removed["content"], model)

    return system_msgs + user_msgs

# 사용 예시
client = OpenAI()
messages = [
    {"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."},
    {"role": "user", "content": "매우 긴 문서 내용..."},
    # ... 수백 개의 메시지
]

trimmed = truncate_to_limit(messages)
response = client.chat.completions.create(
    model="gpt-4o",
    messages=trimmed
)

4. 컨텍스트 윈도우 vs 유사 개념 비교

구분 컨텍스트 윈도우 벡터 DB(장기 메모리) 파인튜닝
위치 단기(추론 중) 외부(영구 저장) 모델 가중치
용량 제한적 (수백K 토큰) 거의 무제한 모델 크기에 의존
검색 방식 전체 포함 유사도 검색 내재화된 지식
비용 토큰당 과금 저장·검색 비용 학습 비용
최신성 실시간 인덱싱 시점 학습 시점

5. 마치며

컨텍스트 윈도우는 LLM의 “작업 기억” 역할을 합니다. 크기가 크면 더 복잡한 작업을 처리할 수 있지만, 비용도 함께 증가합니다. 프롬프트 캐싱(Prompt Caching)을 활용하면 반복되는 시스템 프롬프트 비용을 최대 90% 절감할 수 있고, RAG와 결합하면 컨텍스트 한계를 효과적으로 극복할 수 있습니다.

참고 자료

함께 읽으면 좋은 용어

이 개념과 함께 알아두면 이해가 깊어지는 관련 용어들입니다.

댓글 남기기