LLM 시스템 설계 패턴: 메모리 및 상태 관리 원칙
LLM이 대화나 복잡한 작업을 수행할 때 필요한 외부 메모리 활용 방법과 상태 관리 원칙을 배웁니다. 일관된 맥락을 유지하는 시스템 설계 방법을 이해할 수 있습니다.

이 글의 목차
LLM을 활용하여 복잡한 업무나 대화를 진행할 때, 시스템이 일관된 상태를 유지하는 것이 핵심 과제입니다. 사용자와의 대화가 길어지거나, 특정 도메인의 지식을 기반으로 작업을 수행할 경우, 단순한 프롬프트 입력만으로는 이전 맥락을 기억하기 어렵습니다. 모델이 과거의 대화 흐름이나 외부 정보를 잊어버리면, 응답의 품질이 떨어지고 작업의 연속성이 깨집니다.
따라서 LLM을 실제 시스템에 통합할 때는 단순히 질문을 던지는 것을 넘어, 시스템 레벨에서 메모리 관리와 상태 추적 메커니즘을 구축해야 합니다. 시스템이 현재 어떤 정보를 가지고 있고, 어떤 단계에 머물러 있는지 명확하게 정의하는 과정이 필요합니다. 이러한 설계가 없다면, 모델은 일시적인 정보만을 처리하고 장기적인 목표를 달성하는 데 어려움을 겪게 됩니다.
이 글은 LLM이 대화나 작업을 수행하는 과정에서 발생하는 상태 관리의 원칙을 다룹니다. 외부 지식을 활용하는 방법, 장기적인 맥락을 유지하는 기술, 그리고 추론 과정을 명시적으로 설계하는 시스템 패턴들을 설명합니다. 이를 통해 실제 업무 환경에 적용할 수 있는 견고한 LLM 시스템 설계 방식을 이해하는 데 도움을 드립니다.
시스템 상태 관리의 필요성
대규모 언어 모델(LLM)은 기본적으로 요청을 독립적인 단위로 처리하는 특성을 가집니다. 즉, 시스템에 전달되는 각 입력은 이전의 상호작용과 분리되어 처리됩니다. 이러한 특성은 모델이 일관된 기억이나 지속적인 상태를 자체적으로 유지하기 어렵다는 것을 의미합니다.
따라서 사용자가 모델과 대화하는 과정은 연속적인 맥락(context)을 필요로 합니다. 만약 이전 대화 내용을 시스템이 기억하지 못한다면, 모델은 사용자의 질문 의도를 오해하거나, 앞서 합의된 전제 조건을 무시한 답변을 생성할 수 있습니다. 시스템 상태 관리(System State Management)는 이러한 연속적인 상호작용에서 일관된 맥락을 유지하도록 돕는 핵심 원리입니다.
상태 관리의 목적은 단순히 이전 대화 내용을 재전달하는 것을 넘어섭니다. 이는 시스템이 특정 목표나 역할을 수행하는 동안, 그 목표와 역할에 맞는 일관된 '기억'을 유지하게 하는 것입니다. 개발자는 대화 기록(Chat History)을 프롬프트의 일부로 재구성하여 모델에 입력합니다. 이 과정을 통해 모델은 마치 대화의 흐름을 따라가며 추론하는 것처럼 동작합니다.
이러한 상태 유지 메커니즘이 부족하면, 사용자가 복잡한 작업을 요청하거나 여러 단계에 걸친 워크플로우를 진행할 때, 시스템은 마치 매번 처음 만난 것처럼 작동하게 됩니다. 따라서 시스템 설계 단계에서 상태를 어떻게 정의하고, 어떤 정보를, 어느 시점에, 어느 방식으로 모델에 주입할지 설계하는 것이 필수적입니다.
상태 관리는 단순한 메모리 기능을 넘어, 시스템의 신뢰성과 사용성을 결정합니다. 이를 통해 모델은 단순한 질의응답을 넘어, 복잡한 추론이나 다단계의 계획 수립을 수행하는 에이전트의 역할을 수행할 수 있습니다. 이러한 시스템 설계 패턴을 이해하는 것은 LLM 기반 애플리케이션을 구축하는 데 있어 가장 기본적인 전제 조건이 됩니다. 더 자세한 시스템 설계 원칙은 LLM 시스템 설계 패턴을 참고할 수 있습니다.
외부 지식 활용 원리 (RAG)
LLM은 방대한 양의 지식을 파라미터에 담고 있지만, 모든 최신 정보나 특정 도메인의 깊은 지식을 담아내기는 어렵습니다. 따라서 모델의 지식 범위를 확장하고 답변의 신뢰도를 높이는 외부 지식 활용 방식이 필요합니다. 이 원리를 검색 증강 생성(Retrieval-Augmented Generation, RAG)이라고 부릅니다.
RAG는 외부 지식 저장소(Knowledge Base)와 검색 기능을 결합하여 모델의 답변을 보강합니다. 사용자의 질문이 들어오면, 시스템은 먼저 질문과 가장 관련성이 높은 정보를 외부 데이터베이스에서 검색합니다. 이 검색 과정은 질문의 의도와 지식의 내용을 매칭하는 것이 핵심입니다.
검색된 지식 조각(Chunk)은 단순히 모델에게 전달되는 것이 아닙니다. 답변의 근거가 되는 '맥락'으로 프롬프트에 함께 주입됩니다. 모델은 이 제공된 외부 지식을 바탕으로 추론하고 답변을 생성하게 됩니다. 이 과정을 통해 모델은 지식의 출처를 명확히 하고, 학습 시점 이후의 최신 정보에 대해서도 답변할 수 있게 됩니다.
기존 RAG 방식에서는 문서를 작은 조각으로 나누는 과정에서 문맥적 정보가 손실되는 문제가 발생했습니다. 이를 보완하기 위해, 검색된 지식 조각에 해당 조각을 설명하는 문맥적 정보를 미리 붙여 임베딩(embedding)하는 Contextual Embeddings와 같은 고급 기법이 적용됩니다. 이러한 방법들은 검색의 정확도를 높여 답변의 신뢰성을 더욱 강화합니다.
RAG 시스템을 구축할 때는 검색의 정확도, 지식의 구조화 방식, 그리고 검색된 정보를 프롬프트에 얼마나 효과적으로 주입할지 설계하는 것이 중요합니다. 이러한 설계 단계는 RAG 파이프라인 설계와 같은 전문 지식을 필요로 합니다. RAG는 모델이 가진 파라미터 메모리 외에 비파라미터 메모리(Non-parametric memory)를 결합하여 지식을 생성하는 일반적인 방법을 제시합니다.
고도화된 검색 기법
기존의 검색 증강 생성(RAG) 방식에서 문서를 단순히 작은 조각(chunk)으로 분할하여 임베딩하는 방식은 한계가 있습니다. 이 방식은 분할된 조각 자체의 내용만으로 검색을 수행하기 때문에, 해당 조각이 어떤 전반적인 맥락에서 나왔는지에 대한 정보가 누락됩니다. 따라서 검색된 정보의 관련성이 떨어지거나, 사용자가 원하는 깊이의 지식을 얻지 못하는 경우가 발생합니다.
이러한 문제를 해결하기 위해 검색 과정에 설명적 맥락을 추가하는 고도화된 검색 기법이 사용됩니다. 핵심 원리는 문서의 작은 조각을 임베딩하기 전에, 해당 조각이 속한 주변의 설명적 맥락(explanatory context)을 미리 붙여주는 것입니다. 이를 통해 임베딩 모델은 조각 자체의 의미뿐만 아니라, 그 조각이 어떤 주제와 흐름 속에서 사용되는지를 함께 학습합니다.
이러한 접근법을 활용한 검색은 단순히 관련 단어를 찾는 것을 넘어, 지식의 전체적인 흐름을 파악하여 정보의 관련성을 높입니다. 검색 과정은 일반적으로 두 가지 방식으로 강화됩니다. 첫째, Contextual Embeddings를 사용하여 조각별 설명적 맥락을 포함한 임베딩을 생성합니다. 둘째, Contextual BM25와 같은 검색 알고리즘을 적용하여, 검색된 정보가 맥락적으로 가장 적합한지 판단합니다.
이러한 방식으로 지식을 활용하면, 검색된 정보는 맥락적 배경을 갖추게 되어 모델이 답변을 생성할 때 더욱 정확하고 깊이 있는 근거를 확보합니다. 결과적으로, LLM은 파라미터에만 의존하지 않고, 검색된 맥락과 외부 지식을 결합하여 답변의 신뢰도를 높입니다.
이러한 고도화된 검색 기법은 RAG 파이프라인 설계의 핵심 요소로 작용합니다. 검색된 지식이 답변의 근거가 될 때, 맥락을 보강하는 과정이 시스템의 성능을 결정합니다. 따라서 지식 베이스를 구축하고 검색 기능을 구현할 때는 단순히 텍스트를 자르는 것 이상의, 맥락을 고려한 설계가 필요합니다. RAG 파이프라인 설계 가이드라인을 참고하여 시스템을 구축하는 것이 효과적입니다.
장기 컨텍스트 활용의 이해
모델은 긴 입력 컨텍스트(Long Context)를 받았을 때 모든 정보를 균등하게 활용하지 않습니다. 모델의 성능은 입력된 정보의 위치에 따라 달라지는 경향을 보입니다. 관련 정보가 입력의 시작 부분이나 끝 부분에 위치할 때 가장 높은 성능을 나타냅니다.
반면, 중요한 정보가 컨텍스트의 중간 지점에 위치하면 모델이 해당 정보를 놓치거나 활용하는 능력이 떨어질 수 있습니다. 이는 모델이 긴 컨텍스트 내의 모든 부분을 동일하게 처리하지 못하는 현상과 관련이 있습니다. 따라서 시스템 설계 시 컨텍스트의 위치를 고려하는 것이 중요합니다.
이러한 컨텍스트 활용의 비균일성을 이해하는 것이 시스템의 안정성을 높이는 핵심입니다. 개발자는 검색된 지식(Retrieved Knowledge)을 프롬프트에 삽입할 때, 중요한 정보를 시작이나 끝에 배치하도록 구조화해야 합니다. 정보의 위치를 최적화하는 것이 모델의 추론 정확도를 높이는 방법입니다.
이러한 패턴을 이해하면 검색 증강 생성(RAG) 파이프라인을 설계할 때 지식의 배치 전략을 세울 수 있습니다. 검색된 정보의 맥락적 중요도를 파악하여 프롬프트의 시작이나 끝에 배치하는 것이 효과적입니다. [RAG 파이프라인 설계] 가이드를 참고하여 컨텍스트 활용의 패턴을 개선할 수 있습니다.
추론 과정의 명시화 (CoT)
복잡한 추론 작업은 한 번에 완성되지 않습니다. 모델이 최종 답변에 도달하기까지 여러 중간 사고 단계를 거치는 과정이 필요합니다. 추론 과정의 명시화(Chain-of-Thought, CoT)는 모델이 이 중간 단계를 순차적으로 생성하도록 유도하는 기법입니다. 이 기법은 모델에게 단순히 답을 요구하는 것이 아니라, 문제를 해결하는 논리적 사고 과정을 보여주도록 지시하는 방식입니다.
CoT는 모델의 성능을 향상시키는 효과적인 방법입니다. 특히 산술적 계산, 상식적 추론, 기호적 추론 등 복잡한 사고가 필요한 영역에서 그 효과가 두드러집니다. 프롬프트 내에 추론 과정의 예시(exemplars)를 제공하여 모델이 단계별로 생각하는 방식을 학습하게 합니다. 이러한 단계별 사고 과정을 명시적으로 보여주는 것이 모델의 논리적 추론 능력을 끌어올리는 핵심 원리입니다.
이러한 구조화된 추론 과정은 모델이 스스로 사고의 흐름을 점검하게 만듭니다. 답변을 도출하기 전에 중간 단계를 거치면서 오류를 발견하거나 논리적 비약을 줄이는 효과를 얻을 수 있습니다. 따라서 시스템 설계 시, 모델에게 최종 결과물만 요청하기보다는 사고의 경로를 따라가도록 유도하는 것이 중요합니다.
CoT를 활용하여 모델의 추론 능력을 개선할 수 있습니다.
| 단계 | 목표 | 설명 |
|---|---|---|
| 문제 제시 | 최종 결과물 요구 | 모델에게 최종 답변만 요청합니다. |
| CoT 적용 | 사고 과정 명시 요구 | 모델에게 답변에 도달하는 논리적 단계를 보여주도록 요구합니다. |
이러한 방식은 모델이 스스로 답변을 검증하고, 더 깊이 있는 설명을 제공하도록 만듭니다. CoT는 모델의 추론 능력을 극대화하는 중요한 설계 패턴 중 하나입니다. 더 자세한 시스템 구성 요소에 대해서는 LLM 시스템 설계 패턴을 참고하실 수 있습니다.
시스템 설계 패턴 적용
시스템 설계 패턴을 적용하는 과정은 메모리 저장소와 지식 검색 과정을 시스템의 핵심 구성 요소로 통합하는 작업입니다. LLM을 단순한 응답기가 아닌, 지식에 접근하고 추론하는 에이전트 구조로 설계해야 합니다. 이 구조에서는 시스템의 상태(State) 변화가 지식 검색을 트리거하는 핵심 기준이 됩니다.
시스템은 현재의 대화 맥락이나 사용자가 요청한 목표에 따라 필요한 지식의 종류와 검색 방식을 결정해야 합니다. 예를 들어, 사용자가 제품 사양을 문의하는 상태에서는 제품 카탈로그를 검색하고, 결제 방법을 문의하는 상태에서는 결제 정책 문서를 검색하는 방식으로 메모리 접근 방식을 분리합니다. 이러한 상태 기반의 지식 검색은 시스템이 목적에 맞는 정확한 정보를 가져오도록 보장합니다.
단순히 검색된 정보를 프롬프트에 붙여 넣는 것을 넘어, 검색된 지식이 추론 과정의 어느 단계에 활용되어야 하는지 설계해야 합니다. 이는 검색된 지식을 단순히 배경 정보로 제공하는 것이 아니라, 모델이 다음 추론 단계를 도출하는 데 필요한 구체적인 근거로 활용하는 방식입니다. 지식 검색(Retrieval)과 추론(Reasoning)의 경계가 명확하게 분리되고 상호작용하는 것이 핵심입니다.
이러한 패턴을 구현할 때는 메모리 저장소의 종류(단기 메모리, 장기 메모리)와 검색 모듈의 역할을 명확히 분리하여 설계합니다. 메모리 접근 방식을 시스템의 목적에 맞게 설계하는 것이 중요합니다. 만약 시스템의 목적이 사실 확인이라면, 높은 신뢰도의 출처를 가진 지식 검색을 우선해야 합니다. 반면, 창의적인 콘텐츠 생성이 목적이라면, 광범위한 배경 지식을 통합적으로 제공하는 방식이 적절할 수 있습니다.
이러한 복합적인 흐름을 구현하는 것이 바로 AI 에이전트 개발의 핵심입니다. 시스템이 스스로 상태를 파악하고, 적절한 도구(Tool)를 선택하며, 그 도구에 필요한 지식을 검색하여 최종 결과물을 생성하는 순환 구조를 만듭니다. 이 과정에서 검색된 지식을 활용하는 방법론에 대한 이해가 필수적이며, 관련 내용은 RAG 파이프라인 설계 가이드를 참고할 수 있습니다.
흔한 오해
"LLM은 입력된 모든 컨텍스트를 완벽하게 기억하고 활용합니다." 모델은 입력 컨텍스트의 모든 정보를 균등하게 사용하지 않습니다. 특히 긴 컨텍스트의 경우, 관련 정보가 입력의 시작이나 끝에 있을 때 성능이 더 높게 나타납니다. 컨텍스트의 위치가 정보 활용에 영향을 미칩니다.
"LLM은 대화의 모든 내용을 완벽하게 기억하고 처리합니다." LLM은 기본적으로 독립적인 요청에 응답하는 구조입니다. 대화의 연속성을 유지하려면 이전 대화 내용을 별도의 메모리 관리 과정을 거쳐 모델에 제공해야 합니다. 대화의 흐름을 지속적으로 처리하기 위해서는 외부적인 상태 관리가 필요합니다.
"LLM이 답변하는 모든 지식은 모델 자체의 파라미터에 담겨 있습니다." 모델의 파라미터만으로는 모든 지식을 담을 수 없습니다. 모델이 답변하는 지식의 정확도를 높이려면 외부 지식 저장소와 검색 기능을 결합하는 것이 일반적입니다. 이러한 검색 증강 생성(RAG) 방식은 지식 기반을 보강하는 역할을 합니다.
정리
- 시스템 설계는 LLM이 대화의 연속성을 유지하도록 돕는 것이 목표입니다.
- 외부 메모리 저장소와 검색 기능을 결합하여 지식을 보강하는 것이 일반적입니다.
- 검색된 지식은 모델의 답변을 뒷받침하는 근거로 활용됩니다.
- 복잡한 추론을 위해서는 중간 추론 단계를 명시적으로 생성하도록 유도해야 합니다.
참고 자료
- Anthropic — Contextual Retrieval — 청크에 문맥을 붙이는 검색 기법
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks — RAG 원 논문
- Lost in the Middle: How Language Models Use Long Contexts — 입력 위치에 따른 정보 활용도 연구
- Chain-of-Thought Prompting — 중간 추론이 성능에 미치는 영향