AI는 어떻게 수백 턴을 기억하는가: 캐릭터 챗의 장기기억과 컨텍스트 엔지니어링
더 긴 컨텍스트 윈도우는 기억 문제를 풀지 못해요. 캐릭터가 수백 턴이 지나도 사용자를 기억하는 일은 모델 크기가 아니라 무엇을 떠올리고 무엇을 버릴지 고르는 시스템 설계의 결과예요.
AI는 어떻게 수백 턴을 기억하는가
스무 번째 메시지에서 캐릭터가 첫 약속을 잊어요. 사용자는 한 시간 전에 "고양이 나비를 키운다"고 말했지만, 캐릭터는 나비가 누구인지 되물어요. 화려한 첫인사로는 드러나지 않던 문제가, 대화가 길어지면 정확히 이 지점에서 터져요.
장기 대화에서 기억은 부가 기능이 아니에요. 제품의 신뢰성 그 자체죠. 그리고 이 문제는 흔한 오해처럼 "더 큰 모델"이나 "더 긴 컨텍스트 윈도우"로 풀리지 않아요. LongMemEval 벤치마크(Wu 외, ICLR 2025)는 멀티세션 대화 기록을 그대로 모델에 넣었을 때 정확도가 약 30% 하락하고, 어려운 설정에서는 그 하락 폭이 30~60%에 이른다고 보고해요. 길게 넣을수록 더 잘 기억하는 게 아니라, 오히려 더 못해요.
이 글은 그 간극을 메우는 방법을 다뤄요. 구체적인 내부 설정값보다, 설계가 풀어야 했던 제약과 그 제약을 푼 방식에 초점을 맞춰요.
우리가 Mellowz를 만들며 이 문제를 정면으로 마주한 데에는 이유가 있어요. Mellowz는 노벨 스타일의 AI 캐릭터 채팅 플랫폼이에요. 사용자는 한 캐릭터와 1:1로, 또는 여러 캐릭터와 한 방에서 수백 턴에 걸쳐 이야기를 쌓아가요. 각 캐릭터에는 성격과 말투, 세계관을 담은 로어북과 시나리오가 있고, 이 설정은 대화가 아무리 길어져도 흔들려서는 안 돼요. 노벨 스타일 경험에서 기억은 곧 이야기가 끊기지 않는다는 감각이고, 그게 제품 가치의 핵심이에요. 아래에서 다루는 기법들은 학계와 업계가 공개적으로 정립해 온 것이고, 그 위에서 Mellowz가 이 문제를 어떤 관점으로 바라보는지를 함께 짚어볼게요.
가장 단순한 답: 매 턴 전체 기록을 넣기
기억을 구현하는 가장 직관적인 방법은 지금까지의 모든 대화를 매 턴 프롬프트에 그대로 넣는 거예요. 짧은 대화에서는 잘 작동해요. 그래서 많은 서비스가 여기서 시작해요.
문제는 광고에 적힌 100만 토큰 윈도우가 "아키텍처상의 천장"이지 "신뢰할 수 있는 작업 길이"가 아니라는 데 있어요. 윈도우에 들어간다는 것과 모델이 그것을 잘 쓴다는 것은 다른 이야기예요. 무차별로 집어넣는 방식은 곧 세 개의 벽에 부딪혀요.
무차별 주입이 부딪히는 세 개의 벽
첫째, 비용은 대략 제곱으로 자라요. 상용 챗 API는 상태를 저장하지 않으므로, 매 턴 전체 대화 기록을 다시 보내요. 기록의 길이는 선형으로 늘지만, 매 턴 그 전체를 다시 보내므로 누적 청구 입력 토큰은 대략 제곱으로 증가해요. 100턴 대화의 누적 청구는 1턴의 수천 배에 이르러요.
둘째, 첫 토큰까지의 시간이 늘어나요. 트랜스포머의 자기어텐션은 시퀀스 길이 n에 대해 레이어당 O(n²)의 시간과 메모리를 써요(Vaswani 외, 2017). 입력이 길수록 프리필이 응답의 첫 토큰까지 걸리는 시간(TTFT)을 지배해요. 관계형 대화에서 응답 지연은 치명적이에요.
셋째, 윈도우 안에서도 품질이 무너져요. Liu 외의 「Lost in the Middle」(TACL 2024)은 모델이 컨텍스트의 처음과 끝은 잘 활용하지만 중간에 놓인 정보는 놓치는 U자형 곡선을 보였어요. 후속 연구는 이를 더 정밀하게 측정해요. NoLiMa(Modarressi 외, ICML 2025)에서 GPT-4o의 유효 정확도는 32K 토큰에서 99.3%에서 69.7%로 떨어졌고, 시험한 12개 모델 중 10개가 32K에서 짧은 컨텍스트 기준선의 절반 아래로 내려갔어요. Chroma의 "Context Rot" 보고서(2025)는 GPT-4.1, Claude 4, Gemini 2.5를 포함한 18개 모델에서, 윈도우 한계에 닿기 한참 전부터 입력이 길어질수록 성능이 저하된다는 점을 보였어요.
이 셋은 서로 다른 문제지만, 별개로 작동하지 않고 복리로 누적돼요.
그래서 기억은 '더 큰 메모리'가 아니라 '검색'이에요
여기서 관점을 한 번 뒤집어야 해요. 기억을 끝없이 늘어나는 채팅 로그가 아니라, 질의할 수 있는 저장소로 다시 정의하는 거예요.
도서관 사서를 떠올리면 직관이 서요. 캐릭터의 모든 과거 대화는 도서관의 장서 전체와 같아서, 한 번에 책상 위에 다 올릴 수 없어요. 좋은 사서는 질문을 듣고 색인을 통해 가장 관련 있는 몇 권만 가져와요. 그리고 "방금 반납된 책"만 집어 오는 사서는 형편없는 사서죠. 오래된 책이라도 지금 질문에 가장 적확한 것을 골라야 해요. 기억도 마찬가지예요. 최근이라는 이유가 아니라 관련이 있다는 이유로 떠올라야 해요.
이 전환을 받아들이면, 설계 문제는 둘로 갈려요. 무엇을 어떻게 저장할 것인가, 그리고 매 턴 무엇을 불러올 것인가.
컴퓨터처럼 기억하기: 계층형 메모리와 페이징
이 구조를 가장 또렷하게 보여준 작업이 MemGPT(Packer 외, 2023, 이후 2024년 9월 Letta로 개명)예요. MemGPT는 운영체제의 메모리 관리에서 설계를 빌려와요.
[ 메인 컨텍스트 = RAM ] 빠르지만 작음
- 시스템 지시
- 최근 메시지 (FIFO 큐)
- 쓰기 가능한 작업 기억
▲ ▼ 함수 호출로 page-in / page-out
[ 외부 컨텍스트 = 디스크 ] 크지만 느림
- 아카이브 저장소 (벡터 검색)
- 검색 가능한 전체 대화 기록
고정된 컨텍스트 윈도우는 물리 메모리(RAM)에, 외부 저장소는 디스크에 해당해요. 운영체제가 RAM보다 큰 메모리를 "있는 것처럼" 보이게 하듯, 에이전트는 윈도우보다 큰 기억을 가진 것처럼 동작해요. 결정적인 도약은 에이전트가 스스로 자신의 메모리 관리자가 된다는 점이에요. 무엇을 안에 두고 무엇을 밖으로 내보낼지 모델이 직접 결정해요. 비유는 여기까지예요. 이제부터는 정확한 용어로 — 메인 컨텍스트, 아카이브, 페이징 — 이야기할게요.
무엇을 떠올릴까: 검색의 점수 매기기
불러오기는 단순한 의미 유사도 검색이 아니에요. 이 부분을 가장 인지적으로 설계한 사례가 스탠퍼드의 Generative Agents(Park 외, UIST 2023)예요. 이 연구는 각 기억에 세 가지 점수의 가중합을 매겨요.
- 최신성: 시간이 지날수록 지수적으로 감쇠해요(감쇠 계수 0.995, 시뮬레이션 내부 시간 기준).
- 중요도: 기억을 기록하는 순간 모델이 1에서 10까지 부여해요. 양치질은 1, 이별이나 합격은 10에 가까워요.
- 관련성: 지금 질의와 기억의 임베딩 코사인 유사도예요.
세 가중치는 모두 1로 두고, 각 점수는 0과 1 사이로 정규화한 뒤 합산해요. 핵심은 최신성 하나로 줄 세우지 않는다는 데 있어요. 오래됐지만 중요하고 관련 있는 기억이, 방금 오갔지만 무관한 잡담을 이겨요. (덧붙이면, Generative Agents는 2023년 당시 GPT-3.5급 모델에서 동작했어요. 기여는 베이스 모델이 아니라 이 아키텍처에 있어요.)
실무의 검색은 보통 한 종류가 아니라 둘을 섞어요. 어휘를 정밀하게 잡는 키워드 검색(BM25)과 의미를 폭넓게 잡는 밀집 임베딩 검색(DPR, Karpukhin 외, EMNLP 2020 — 상위 20개 검색 정확도에서 BM25를 9~19%포인트 앞서요)을 함께 돌리고, 두 순위를 RRF(Cormack 외, SIGIR 2009)로 융합해요. 흔히 쓰는 상수 k는 60 근처지만, 이는 원논문이 내세운 값이 아니라 구현 관행으로 굳어진 기본값이에요. 하이브리드가 기본이 된 이유는 두 방식이 서로의 실패 사례를 메우기 때문이에요. 키워드는 동의어에 약하고, 임베딩은 정확한 고유명사에 약해요.
무엇을 버릴까: 요약 압축과 기억의 종류
검색의 짝은 쓰기예요. 대화를 통째로 쌓을 수 없으니, 흘러가는 대화를 의미 단위로 갈무리해 압축해요. 롤링 요약이라 부르는 이 작업은 본질적으로 정보 손실과 비용·규모 사이의 트레이드오프예요. 압축할수록 저렴하고 확장 가능하지만, 잃는 디테일이 생겨요.
그런데 더 중요한 결정은 기억을 종류로 나누는 일이에요. 인지과학은 오래전부터 사건 기억(episodic)과 의미 기억(semantic)을 구분했고(Tulving, 1972), 에이전트 설계도 같은 분할을 차용해요(CoALA, Sumers 외, TMLR 2024). 두 종류는 다루는 방식이 정반대여야 해요.
- 사건은 불변이며 추가 전용이에요. "지난주에 이직했다"는 일어난 일이고, 나중에 덮어쓰지 않아요.
- 사실과 선호는 갱신과 버전 관리의 대상이에요. "커피를 좋아한다"는 신념이고, 다음 달에 바뀔 수 있어요.
이 둘을 섞으면 모순이 쌓여요. "간결하게 답해"라는 옛 지시와 "자세히 설명해줘"라는 새 지시가 같은 무게로 남으면, 모델은 둘 사이에서 흔들리거나 둘 다 무시해요. 이것이 장기 대화에서 환각과 일관성 붕괴를 만드는 핵심 실패 모드예요.
Mellowz에서도 이 구분이 캐릭터 일관성을 좌우해요. 캐릭터에게 일어난 사건과 사용자에 대해 갱신되는 선호는 성격이 다른 기억이고, 다르게 다뤄야 해요. 무엇을 변하지 않는 사실로 보존하고 무엇을 갱신 가능한 신념으로 둘지가, 수백 턴이 지난 뒤에도 캐릭터가 같은 인물로 남는지를 결정해요.
기억과 별개로 무너지는 '성격': 페르소나 드리프트
흔히 한 덩어리로 뭉뚱그리는 두 실패를 분리해야 해요. 사용자가 한 말을 잊는 것은 회상(recall)의 실패예요. 캐릭터가 점점 자기 자신과 달라지는 것은 행동(persona)의 드리프트예요. 둘은 다른 문제이고, 다른 해법을 요구해요.
Li 외의 「Measuring and Controlling Persona Drift」(COLM 2024)는 LLaMA2-chat-70B의 페르소나 안정성이 대략 8번째 대화 라운드에서 급락하고, 모델이 점점 사용자의 말투를 닮아간다는 점을 측정했어요. 역설적으로 더 큰 모델이 더 많이 드리프트한다는 보고도 있어요(Choi 외, 2024, 9개 LLM 대상). 여기서 중요한 함의가 나와요. 아무리 검색을 잘해도 회상은 고쳐지지만 드리프트는 고쳐지지 않아요. 드리프트에는 캐릭터 정의의 주기적 재주입, 어텐션 재가중, 일관성 학습 같은 별도의 처방이 필요해요. 그리고 어떤 단일 기법도 이 문제를 완전히 없애지는 못해요. 줄일 뿐이에요.
컨텍스트 엔지니어링: 유한한 '어텐션 예산'의 배분
지금까지의 모든 기법 — 계층형 메모리, 점수 기반 검색, 요약 압축, 타입 구분 — 은 하나의 규율로 묶여요. 2025년 들어 이 규율에는 컨텍스트 엔지니어링이라는 이름이 붙었어요.
이 분야를 정의한 두 문장이 있어요. Tobi Lütke는 이를 "작업이 LLM에게 풀릴 만하도록 모든 맥락을 제공하는 기술"이라 했고(2025년 6월), Andrej Karpathy는 "다음 스텝에 꼭 맞는 정보로 컨텍스트 윈도우를 채우는 섬세한 기예이자 과학"이라 정리했어요. Anthropic의 엔지니어링 글(2025)은 컨텍스트를 "수익이 체감하는 유한 자원", 곧 어텐션 예산으로 보고, 매 스텝 "가능한 한 작은 고신호 토큰 집합"을 고르는 것을 핵심 원칙으로 제시해요.
여행 가방을 떠올리면 돼요. 더 큰 가방을 사도 모든 것을 욱여넣으면 정작 필요한 물건을 찾지 못해요. 더 긴 컨텍스트 윈도우도 마찬가지로 큐레이션의 대체재가 아니에요.
"컨텍스트 엔지니어링은 결국 RAG와 메모리, 에이전트 오케스트레이션을 새 이름으로 묶은 것 아니냐"는 비판도 가능해요. 타당한 지적이에요. 다만 흩어져 있던 기법들을 "유한한 어텐션 예산의 배분"이라는 하나의 설계 규율로 통합한 데 실질적인 가치가 있어요.
캐릭터가 '기억'하는 것처럼 보이는 이유
캐싱은 이 그림의 마지막 조각이에요. 같은 프리픽스를 반복해서 처리하지 않도록, 상용 API는 프롬프트 캐싱을 제공해요(OpenAI는 1024 토큰 이상 프리픽스에 캐시 입력 50% 할인, Anthropic은 캐시 읽기를 기본 입력의 0.1배로). 단, 프리픽스의 한 바이트만 바뀌어도 그 뒤가 전부 무효화돼요. 타임스탬프나 UUID, 도구 순서의 미세한 변화가 조용히 캐시를 깨뜨려요. 무엇을 컨텍스트에 넣을지 고르는 일은 품질만이 아니라 단가에도 직접 영향을 줘요.
이 모든 레이어는 사용자에게 보이지 않아요. 보여서도 안 돼요. 잘 만든 기억 시스템은 자신의 존재를 드러내지 않고, 그저 "이 캐릭터가 나를 기억한다"는 감각만 남겨요.
Mellowz가 지향하는 것이 정확히 이 감각이에요. 며칠 만에 돌아와도 캐릭터가 지난 이야기를 알고 있고, 설정이 쌓여도 캐릭터가 자기 세계를 지키며, 대화가 수백 턴을 넘겨도 응답이 감당 가능한 속도와 비용 안에 머무는 것. 그 결과로 사용자가 "이 캐릭터는 나를 안다"고 느끼게 만드는 일이에요.
결론은 단순해요. AI는 모든 것을 떠올리지 않아요. 매 턴 올바른 것을 선택하기 때문에 기억하는 것처럼 보여요. 기억은 모델의 크기가 아니라 시스템의 설계가 만들어내는 결과예요.
참고 문헌
- Liu et al. (2024), "Lost in the Middle," TACL 12 — aclanthology.org
- Modarressi et al. (2025), "NoLiMa," ICML — arXiv:2502.05167
- Wu et al. (2025), "LongMemEval," ICLR — arXiv:2410.10813
- Packer et al. (2023), "MemGPT" (→ Letta) — arXiv:2310.08560
- Park et al. (2023), "Generative Agents," UIST — arXiv:2304.03442
- Li et al. (2024), "Measuring and Controlling Persona Drift," COLM — arXiv:2402.10962
- Karpukhin et al. (2020), "Dense Passage Retrieval," EMNLP — aclanthology.org
- Anthropic (2025), "Effective context engineering for AI agents" — anthropic.com
Mellowz는 mellowz.ai에서 만나볼 수 있어요. 기술과 제품에 대한 문의는 ceo@vibecompany.work으로 보내주세요.