본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 23. 16:39

Claude는 세션 간 모든 것을 잊어버린다. 내가 고친 방법

요약

Claude의 무상태성(stateless) 문제를 해결하기 위해 로컬 Obsidian 마크다운 파일을 메모리로 사용하는 오픈소스 MCP 서버 'Bastra Recall'을 소개합니다. 데이터 통제권을 유지하면서 Claude Code, Desktop, Cursor 등 다양한 도구에서 일관된 컨텍스트를 공유할 수 있습니다.

핵심 포인트

  • LLM의 무상태성 문제를 로컬 마크다운 기반 메모리로 해결
  • MCP(Model Context Protocol)를 활용한 외부 도구와의 통신
  • 데이터를 사용자가 직접 소유하고 관리하는 로컬 저장 방식
  • Claude Code, Desktop, Cursor 등 여러 AI 도구와 동기화 가능
  • Redis나 클라우드 서비스 없이 단일 명령어로 설치 및 실행

모든 Claude 세션은 제로(zero)에서 시작합니다.
당신은 아키텍처, 명명 규칙, 그리고 재논의하고 싶지 않은 이미 내린 세 가지 결정을 설명하는 데 한 시간을 보냅니다. 탭을 닫습니다. 다음 날 아침에 새 채팅을 열면 Claude는 당신을 낯선 사람처럼 맞이합니다. 모든 것을 다시 설명해야 합니다.
40번째 이후, 저는 재설명하는 것을 멈추고 해결책을 만들었습니다. 이것은 오픈 소스이며 MIT 라이선스를 따르고 한 개의 명령어로 설치됩니다. 이 게시물은 작동 방식과 직접 실행하는 방법을 알려주는 5분 버전입니다.
실제 문제점
LLM(대규모 언어 모델)은 무상태적(stateless)입니다. 각 대화는 설계상 깨끗한 백지 상태입니다. 존재하는 '메모리' 기능들은 보통 다음 두 가지 중 하나를 의미합니다:

  1. 직접 구축하고 계속 실행해야 하는 Redis/Valkey 서버,
  2. 가입하고 API 키를 받아 컨텍스트가 다른 사람의 인프라에 존재하는 관리형 클라우드 서비스.
    둘 다 작동합니다. 하지만 둘 다 당신의 프로젝트 결정, 코드 스니펫, 그리고 디버깅 중에 붙여넣은 간헐적인 자격 증명이 당신이 통제하지 않는 서버에 놓인다는 것을 의미합니다. AI에게 알려주는 모든 것을 기억하는 것이 전적으로 임무인 도구에게는 그 트레이드오프가 불편했습니다.
    저는 내 디스크에 남아있는 메모리를 원했습니다.
    접근 방식: 당신의 노트가 데이터베이스
    Bastra Recall은 MCP 서버(Model Context Protocol — Claude가 외부 도구와 통신하는 오픈 표준)입니다. 데이터베이스 대신, 로컬 Obsidian 볼트에 평문 Markdown으로 메모를 작성합니다. 이는 당신의 컴퓨터에 있는 .md 파일 폴더입니다.
    이러한 설계 선택은 여러 가지 일을 동시에 수행합니다:
  • 데이터는 당신의 것이며 읽을 수 있습니다. 텍스트 편집기에서 어떤 메모든 열어볼 수 있습니다. 내보내기 도구도, 종속성(lock-in)도 없습니다. 볼트 폴더를 삭제하면 메모가 사라지므로 완전히 통제할 수 있습니다.
  • 하나의 데몬으로 모든 도구를 구동합니다. 동일한 데몬이 Claude Code, Claude Desktop, 그리고 Cursor에 데이터를 공급합니다. 한 곳에 저장된 결정은 다른 곳에도 나타납니다.
  • 돌봐야 할 서버가 없습니다. Redis도 없고, 클라우드 계정도 없고, API 키도 없습니다.

당신이 Claude에게 "이 프로젝트에서는 Prisma가 아니라 Drizzle을 사용한다는 것을 기억해 둬"라고 말하면, 그 사실은 Markdown 노트로 저장됩니다. 다음 세션(새 탭을 열거나 며칠이 지난 후)에서 Claude는 답변하기 전에 이를 자동으로 검색하여 가져옵니다.

설치하기 (전체 설치)

다음 명령 하나로 탐지된 모든 AI 도구의 MCP 설정을 멱등성(idempotently)을 유지하며 백업과 함께 패치합니다:

bash
npx bastra-recall install all --vault /absolute/path/to/your/vault

그 다음 등록 상태를 확인합니다:

bash
npx bastra-recall doctor

Claude Code, Desktop, 또는 Cursor를 재시작하면 메모리가 활성화됩니다. 끝입니다.

미리 밝히는 솔직한 제약 사항:

  • 현재는 macOS, Apple Silicon, Node 22+ 환경만 지원합니다. Linux/Windows는 로드맵에 있습니다.
  • 초기 단계입니다 — 현재 버전은 0.7.0-beta.1입니다. 제가 매일 사용하며 작동을 확인하고 있지만, 베타 버전입니다.
  • 설치 과정 등을 포함하여 다소 거친 부분이 있을 수 있습니다. 이것은 진정한 초기 소프트웨어이며, 제 환경에서는 문제가 없었더라도 사용자의 환경에서는 무언가 깨질 수 있습니다. 만약 문제가 발생한다면 저에게 큰 도움이 됩니다 — 이 포스트의 댓글이나 GitHub issue를 통해 무엇이 잘못되었는지 정확히 알려주세요. 더 구체적일수록(OS 버전, Node 버전, 실행한 명령, 발생한 에러) 제가 더 빠르게 수정할 수 있습니다.

검색 (Retrieval) 작동 방식 (30초 요약 버전)
저장하는 것은 쉽습니다. 무엇이든 파일이면 됩니다. 어려운 부분은 Claude의 컨텍스트 (Context)를 쓰레기 데이터로 가득 채우지 않으면서 적절한 기억을 다시 불러오는 것입니다. 검색 (Recall)은 현재 대화와의 관련성에 따라 저장된 기억의 순위를 매기고 가장 일치하는 상위 항목만 주입합니다. 따라서 지금까지 말한 모든 내용으로 컨텍스트 윈도우 (Context window)를 낭비하지 않고도 필요한 결정을 내릴 수 있습니다.

검색 (Retrieval)과 벤치마킹 (Benchmarking)에 대해 더 깊이 알고 싶다면 다음 포스트를 참고하세요. 이번 포스트는 단지 이렇습니다: 여기 문제가 있고, 이를 해결하는 도구가 있으며, 이를 실행하는 방법입니다.

사용해 보기 / 분석해 보기
리포지토리 (Repo, MIT): github.com/n0mad-ai/bastra-recall

만약 다른 방식으로 AI 메모리 (AI memory) 문제를 해결하셨다면, 꼭 듣고 싶습니다. 특히 로컬 마크다운 (Local-Markdown) 방식이 틀렸다고 생각하신다면 더욱 그렇습니다. 그리고 이 도구가 여러분의 기술 스택을 마흔한 번째로 설명해야 하는 상황에서 벗어나게 해준다면, 스타 (Star)를 눌러 다른 사람들이 이 프로젝트를 찾을 수 있도록 도와주세요.

이 방식은 Claude뿐만 아니라 Cursor 및 다른 모든 MCP 클라이언트에서도 동일하게 작동합니다. 하지만 제가 이 문제를 처음 느낀 곳은 Claude였습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0