컨텍스트 엔지니어링
컨텍스트 엔지니어링(Context Engineering)은 언어 모델이 한 번에 살펴볼 수 있는 제한된 입력 공간(context window)에서 최선의 답변을 생성하도록 입력 데이터를 체계적으로 기획, 선별, 구조화, 압축 및 제어하는 종합적인 기술이자 방법론입니다.
1모델 컨텍스트¶
언어 모델은 맥락(context)에 따라 다음 토큰을 생성합니다. 사용자의 입력이 동일하더라도, 제공된 맥락이 다르면 다른 응답을 생성합니다.
예를 들어, "오늘 분위기?"라고만 입력했을 때, 맥락이 다음과 같이 두 가지 중 무엇인지에 따라 전혀 다른 응답이 나옵니다.
주식 투자
사내 회의
각각의 경우 맥락을 제공하기 위해서는 여러 가지 정보의 출처가 종합되어야 할 필요가 있습니다. 주식 시장과 관련한 정보는 현재 시세나 뉴스 같은 것을 참조해야 하고, 사내 회의는 내부 메신저, 대화 기록, 이메일, 작성된 문서 등을 참고해야 합니다.
Table 1:컨텍스트 윈도우 구성
| 구성 요소 | 내용 |
|---|---|
| 시스템 지시 | 행동 가이드라인 |
| 도구 정의 | 사용 가능한 도구 목록과 설명 |
| 프로젝트 지시 | 프로젝트별 문서 (예: instruction.md) |
| 대화 기록 | 현재 세션의 메시지 |
| 환경 컨텍스트 | 열린 파일, 선택 영역, 오류, git 상태 등 |
| 명시적 참조 | 사용자 특정 파일, 폴더, URL, 첨부 파일 등 |
| 도구 호출 결과 | 터미널 출력, 파일 읽기, 검색 결과 등 |
언어 모델에 맥락을 제공하기 위해 초기에는 사용자가 직접 프롬프트 엔지니어링을 수행했습니다. 하지만 맥락을 사용자가 제공하는 방식은 비효율적이고 확장이나 자동화가 어렵습니다. 그래서 맥락을 제공하기 위한 방법론이 이후 빠르게 발전했습니다.
물론 모델 컨텍스트 크기는 유한합니다. 컨텍스트의 크기는 256, 512, 1024와 같이 2배수 단위로 하는데, 1024는 줄여서 K로 표현합니다. 예를 들어, 2K 컨텍스트 크기는 한번에 토큰을 입력으로 받을 수 있음을 의미합니다. 유한한 크기의 컨텍스트에 모델이 사용자가 원하는 출력을 생성하는 데 필요한 것을 적절하게 제시하는 것이 컨텍스트 엔지니어링입니다.
2컨텍스트 제공¶
모델의 컨텍스트를 제공하는 방법은 트랜스포머 언어 모델이 제시된 이후 필요에 따라 다양하게 발전하고 있습니다.
주요하게 다음과 같은 방법론이 활용되고 있습니다.
프롬프트: 사용자가 필요한 맥락을 입력 프롬프트로 제시
검색 증강: 사용자 질의와 관련 문서가 검색되어 맥락으로 첨부
단계적 추론(Chain of Thought): 모델이 일련의 사고 과정을 생성하여 스스로 맥락을 보강
도구 활용: 언어 모델이 API를 직접 활용
스킬 활용: 특정한 작업에 필요한 문서와 도구를 맥락으로 제시
메모리: 대화 이력과 장기 기억을 축적하여 대화 사이에 걸쳐 맥락을 유지
3컨텍스트 학습¶
컨텍스트 학습(ICL, In-Context Learning)은 모델의 가중치를 변경하지 않고 프롬프트로 제시된 설명과 몇 가지 예시(few-shot)만으로 새로운 작업을 학습한 것 같이 수행하는 것을 뜻합니다. Brown et al. (2020)
학습은 주어진 증거를 근거로 출력 목표를 달성하는 것을 의미합니다. 신경망의 학습 알고리즘은 입력-출력 쌍의 집합 에 대해 매개변수 를 손실 을 최소화하도록 최적화합니다.
대부분의 모델은 입력의 형태가 학습 시점에서 결정되어 학습 이후에는 입력의 형태를 바꿀 수 없습니다. 그런데 언어 모델은 가변 길이의 텍스트 시퀀스를 받는다는 점이 중요한 차이점입니다. 학습 시점에 결정된 매개변수를 변화시키지 않고도 적절한 출력을 유도하는 데 필요한 입력을 제시할 수 있습니다.
즉, 입력 가 "오늘 분위기?"라는 프롬프트라면, 모델은 학습된 매개변수에 따라 일반적인 답변 을 내놓을 것입니다. 하지만 기존의 대화 내용 등과 같은 맥락(context)을 주식 시장과 관련 있는 내용이었다면 좀 더 구체적인 응답 를 기대할 것입니다.
프롬프트를 통해 제공된 정보를 고려하여 모델이 기존에 학습된 지식을 넘어선 범위에서 사용자의 요청을 적절하게 처리할 수 있다면, 학습을 통해 얻고자 하는 효과를 얻었다고 할 수 있습니다. 컨텍스트 학습의 한 예로, 2024년까지 데이터로 학습된 모델에게 학습 시점 이후의 뉴스를 제공하여 모델의 답변을 조정한다면, 새로운 데이터로 학습된 모델과 유사하게 동작한다고 볼 수 있습니다.
컨텍스트 학습의 특징이자 한계점은 새로운 정보가 모델의 내부 상태에 영구적으로 변화를 주지는 못한다는 것입니다. 그런데 정보와 지식은 구분될 필요가 있습니다. 정보는 필요한 시점에 활용하면 되지만, 지식은 정보를 이해하고 활용하는 방법에 관한 것입니다. 모든 정보가 항상 중요하지는 않습니다. 활용한 정보는 기억해 둘 필요가 없는 경우도 많습니다. 예를 들어, 일회용 인증번호를 입력해야 하는 경우, 인증번호 자체는 정보이고, 그것을 활용하는 방법에 대한 이해는 지식입니다. 정보가 주어져도 활용하는 방법을 모른다면 지식이 없는 것입니다. 인증번호를 활용해야 할 때, 그것을 어디에 어떻게 입력하는지는 경우에 따라 다릅니다. 주어진 정보를 어떻게 활용해야 하는지 몇 가지 예시(few-shot)를 제시하고, 모델이 그 예시를 이해하여 정보를 올바르게 활용하도록 유도하는 것이 컨텍스트 학습입니다.
텍스트 생성 언어 모델을 가정하고 있지만, 이미지나 음성을 생성하는 모델도 같은 방식으로 이해할 수 있습니다. 음성 생성 모델로 음성 복제를 수행할 때, 학습된 매개변수를 조정하지 않고도 모델이 참조할 음성 샘플을 제공하면 그것이 맥락으로 활용되어 참조되는 목소리 음색과 유사한 출력을 발생합니다.
4대규모 컨텍스트¶
2023년 ChatGPT가 전세계적 돌풍을 일으키면서 언어 모델을 다양한 작업에서 사용하고자 하는 요구와 필요가 크게 증가했습니다. 언어 모델은 컨텍스트에 따라서 출력이 바뀌기 때문에 적절한 컨텍스트를 제공하는 것이 중요한 일이 되었고, 초창기에는 프롬프트 엔지니어링이 주목받았습니다. 프롬프트 엔지니어링을 실행해 가면서 필요한 컨텍스트를 제공할 때 종종 컨텍스트 크기에 따른 한계점에 봉착했습니다. 2023년 이전까지의 언어 모델들은 대체로 컨텍스트 크기가 4K 이하였습니다. 2K는 대략적으로 A4 크기 종이 한 장에 작성되는 글자수에 대응합니다. 직접 입력하는 프롬프트 엔지니어링에서는 단편 논문 분량의 글자수도 종종 충분한 경우가 있었지만, 참조문서를 첨부하기에는 부족했습니다. 언어 모델의 컨텍스트 크기를 늘려야 하는 필요는 자명했습니다.
Table 2:GPT 시리즈 컨텍스트 크기
| 모델 | 컨텍스트 크기[1] | 출시일 |
|---|---|---|
| GPT-1 | 512 | 2018년 6월 |
| GPT-2 | 1K | 2019년 2월 |
| GPT-3 | 2K | 2020년 6월 |
| GPT-3.5 | 4K | 2022년 11월 |
| GPT-4 | 8K | 2023년 3월 |
| GPT-4 Turbo | 128K | 2023년 11월 |
| GPT-4o | 128K | 2024년 5월 |
| GPT-5 | 400K | 2025년 8월 |
그런데 컨텍스트 크기를 늘려서 사전 훈련을 하는 것은 연산 비용이 폭발적으로 증가합니다. 트랜스포머 어텐션 연산 양과 메모리 소모량은 입력 길이 의 제곱에 비례합니다. 컴퓨터 과학에서는 이것을 으로 표현합니다. 2023년 메타의 LLaMA 사전 훈련 모델 훈련에 2K 컨텍스트로도 이천 여개의 GPU로 수십 일간 훈련이 필요했습니다. Touvron et al. (2023) 컨텍스트 크기를 늘려서 사전 훈련을 하면 같은 하드웨어 구성으로는 몇 년이 걸릴 수도 있었습니다.
2024년부터는 이러한 연산 비용의 한계를 극복하기 위해 컨텍스트 크기를 증가시키는 효율적인 방법론들이 제시되었습니다. Dubey et al. (2024) 처음부터 길게 사전 훈련을 하는 대신, 초기에는 짧은 컨텍스트로 언어의 지식을 학습시킨 뒤, 이후 훈련 단계에서 컨텍스트 크기를 점진적으로 증가시켜 손실을 안정적으로 감소시키는 다단계 확장(Multi-stage Extension) 방법들이 활용되기 시작했습니다. Yiran Ding (2024) 나아가, 상대적 위치 임베딩의 주파수를 비균등하게 스케일링하여 효율적인 사후 훈련(Post-training)만으로 컨텍스트 창을 수십 배 넓히는 방식도 제안되었습니다. Zhang et al. (2024) 2025년 이후로는 이러한 인프라 및 학습 프로토콜의 최적화를 바탕으로 백만(1M) 토큰 이상 컨텍스트 크기의 모델들이 본격적으로 등장했습니다. Chaochen Gao (2025)Stefano Rando (2025)
컨텍스트의 증가는 언어 모델이 단순한 챗봇에서 API 형태의 도구를 활용할 수 있는 에이전트가 되는데 중요한 기술적 계기를 제공했습니다. 소프트웨어 개발 등의 작업에서는 필요한 컨텍스트가 증가하는 편입니다. 소프트웨어 코드 자체도 토큰 규모가 크고, 소프트웨어 개발에 필요한 도구들도 여러 가지 필요하고, 작성된 소프트웨어를 이해하고 목표 달성을 위해 필요한 계획과 참조해야 하는 문서들도 컨텍스트에 포함되어야 하기 때문입니다.
컨텍스트 크기가 증가함에 따라 새로운 문제들도 생겨났습니다.
4.1KV 캐시¶
트랜스포머 디코더는 매번 다음 토큰 예측 시, 전체 토큰 시퀀스에 대해 어텐션 연산을 수행합니다. 인과적 어텐션(causal attention)의 특성상, 이미 계산된 토큰의 키-값은 그 뒤에 어떤 토큰이 이어지든 변하지 않습니다. 따라서 동일한 값을 매번 재계산하지 않고, 이미 계산한 키-값을 보존(Cache)해 두는 기법을 KV 캐시(KV Cache)라고 합니다.
입력 컨텍스트의 길이()가 길어질수록 KV 캐시가 점유하는 메모리 크기가 선형적으로 늘어납니다.
예를 들어, 32개 레이어·KV 헤드 8개·헤드 차원 128인 모델에서는 토큰당 KV 상태가 에 이릅니다. 따라서 컨텍스트 길이가 32K 토큰이면, 매 요청에 KV 캐시가 약 4GB의 메모리를 차지합니다.
대규모 컨텍스트에서는 요청이 발생할 때마다 KV 캐시를 다시 생성해야 하므로, 연산과 메모리 비용이 크게 증가합니다.
4.1.1프롬프트 캐싱¶
프롬프트 캐싱(prompt caching)은 대규모 컨텍스트의 KV 캐시 생성이 초래하는 연산·메모리 비용 문제를 완화하는 방법입니다. 시스템 지시문(system prompt)이나 지속적으로 참조해야 하는 문서 등 자주 바뀌지 않는 부분을 컨텍스트 앞부분(Prefix)에 배치하면, 해당 구간의 KV를 보존해 재사용할 수 있습니다.
모델이 컨텍스트를 처음부터 다시 연산(Prefill 단계)하면 매 요청마다 응답 시작 시간(Time-to-First-Token, TTFT)이 오래 걸립니다. 프롬프트 캐싱 방식은 두 번째 질문부터는 이전에 연산이 끝난 KV 캐시 블록을 재사용하여 TTFT를 단축시킬 수 있습니다.
4.1.2PagedAttention¶
PagedAttention은 KV 캐시를 연속된 메모리에 일괄 할당하는 방식 대신, 일정한 크기의 페이지 단위로 나누어 저장하는 기법입니다. vLLM에서 자세히 다루고 있습니다.
4.2맥락 유실¶
컨텍스트에 포함되는 문서의 양이 커지면, 모델은 종종 핵심 내용을 제대로 반영하지 못합니다. 트랜스포머의 어텐션 메커니즘은 구조적 한계로 인해, 입력 프롬프트의 시작과 끝 부분의 정보에 과도하게 주의를 기울이고, 중간에 배치된 세부 정보를 유실하거나 찾아내지 못하는 경향이 있습니다. 이를 맥락 유실(Lost in the Middle) 현상이라고 합니다. Liu et al. (2024)
4.2.1컨텍스트 압축/재배치¶
경량 소형 언어 모델이나 통계 필터를 활용하여, 원문에서 핵심 정보에 미치는 어텐션 강도(정보량)를 측정하고 중요도가 낮은 불필요한 단어를 의미 유실 없이 지워내는 기법입니다. 예를 들어, ‘그리고’, ‘또한’ 같은 접속 표현은 문장을 잇는 역할만 해서 핵심 사실에 거의 영향을 주지 않습니다.
또한, 트랜스포머 알고리즘의 특성을 고려하여 중요 정보를 컨텍스트 시작과 끝으로 재배치하면 어텐션이 중요한 정보에 집중되도록 유도합니다.
K = 1024
- Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D. M., Wu, J., Winter, C., … Amodei, D. (2020). Language Models are Few-Shot Learners. https://arxiv.org/abs/2005.14165
- Touvron, H., Lavril, T., Izacard, G., Martinet, X., Lachaux, M.-A., Lacroix, T., Rozière, B., Goyal, N., Hambro, E., Azhar, F., & others. (2023). Llama: Open and efficient foundation language models. arXiv Preprint arXiv:2302.13971. https://arxiv.org/abs/2302.13971
- Dubey, A., Jauhri, A., Pandey, A., Kadian, A., Al-Dahle, A., Letman, A., Akhoundi, A., Alisdair, C., Alemu, A., Almeida, A., & others. (2024). The Llama 3 Herd of Models. arXiv Preprint arXiv:2407.21783. https://arxiv.org/abs/2407.21783
- Yiran Ding. (2024). LongRoPE: Extending LLM Context Window Beyond 2 Million Tokens. https://arxiv.org/abs/2402.13753
- Zhang, P., Shao, N., Liu, Z., Xiao, S., Qian, H., Ye, Q., & Dou, Z. (2024). Extending Llama-3’s Context Ten-Fold Overnight. https://arxiv.org/abs/2404.19553
- Chaochen Gao. (2025). NExtLong: Toward Effective Long-Context Training without Long Documents. https://arxiv.org/abs/2501.12766
- Stefano Rando. (2025). LongCodeBench: Evaluating Coding LLMs at 1M Context Windows. https://arxiv.org/abs/2505.07897
- Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2024). Lost in the Middle: How Language Models Use Long Contexts. https://arxiv.org/abs/2307.03172