프로필

데브고래밥

@devgoraebap

스택오버플로우의 단골손님이였던 Claude를 채찍질하는 개발자

Album Art

0:00 0:00
방문자 정보

요즘 관심있는

AI도 건망증이 있다 - Claude-Mem 리뷰 thumbnail image
43
0

AI도 건망증이 있다 - Claude-Mem 리뷰

Claude Code를 사용한 지 일 년쯤 되어간다. 정말 잘 쓰고 있지만 한 가지 아쉬운 점이 있었다. 같은 프로젝트에서 오래 작업할수록 이전에 질문했던 내용을 점점 까먹는다는 것이다. 특히 compact라는 작업을 거치고 나면 망각이 더 심해지는 느낌이었다.

AI를 대하는 태도의 변화

LLM을 오랫동안 사용해오면서 주로 코드 리뷰나 아키텍처 질문, 현재 진행하는 프로젝트에 대해 물어보기만 급급했다. AI가 어떻게 돌아가는지 굳이 알 필요 없다고 생각했다. 천재 개발자들이 만들어준 거 잘 쓰면 된다는 느낌이었다.

그런데 요즘 일하는 환경이 처음 GPT가 나왔을 때와는 너무 달라졌다는 걸 자각하기 시작했다. AI 에이전트를 얼마나 효율적으로 쓸 수 있을지가 점점 하나의 관심사로 자리 잡게 되었다.

Claude Code의 기본 라이프사이클

Claude Code가 대화를 어떻게 관리하는지 먼저 이해할 필요가 있다.

세션 시작 → 대화 진행 → 컨텍스트 누적 → 한계 도달 → compact(요약) → 계속 진행
                                                       ↓
                                                 정보 손실 발생

Claude Code는 대화가 길어지면 컨텍스트 윈도우 한계에 도달한다. 이때 자동으로 이전 대화를 요약해서 압축하는데, 이 과정에서 세부 정보가 손실된다. 요약은 결국 정보의 손실이다.

저장 위치

Claude Code는 프로젝트 경로를 폴더명으로 인코딩해서 ~/.claude/projects/에 저장한다.

~/.claude/projects/
├── C--Users-devgo-Projects-my-app/
│   ├── abc123.jsonl  ← 세션 1
│   ├── def456.jsonl  ← 세션 2
│   └── ...

예를 들어 C:\Users\devgo\Projects\my-app 경로는 C--Users-devgo-Projects-my-app이라는 폴더가 된다. 각 세션은 UUID.jsonl 파일로 기록된다.

문제점

  • 세션 내에서 compact가 발생하면 이전 맥락이 요약되면서 세부 정보 손실
  • 세션을 새로 시작하면 이전 세션의 내용을 전혀 모름
  • 저장은 되지만 검색이 안 됨 — 그냥 로그 파일일 뿐

세션을 바꾸지 않고 계속 작업하면 괜찮을 줄 알았는데, 오히려 컨텍스트가 커질수록 응답이 느려지고 망각도 발생했다.

첫 번째 시도: mcp-knowledge-graph

이 문제를 해결하려고 처음 사용한 MCP가 mcp-knowledge-graph다.

이 도구는 AIM(AI Memory)이라는 저장 방식을 사용한다. 프로젝트 루트에 .aim 폴더를 만들고, 엔티티(entity)와 관계(relation)를 JSON 형태로 저장한다. 지식 그래프 구조로 정보를 연결하는 방식이다.

장점

  • 이전보다는 필요한 내용을 더 잘 기억함
  • 엔티티 단위로 정보를 구조화

단점

  • 자동이 아님 — Claude에게 "이거 기억해"라고 명시적으로 말해야 저장됨
  • CLAUDE.md에 프롬프트를 넣어서 자동화를 시도했지만, 일관성이 떨어졌음
  • 프로젝트마다 .aim 폴더를 만들어야 하는 번거로움
  • 검색이 직관적이지 않음

아쉬운 대로 사용했지만, 내가 원하는 "알아서 기억하고 알아서 꺼내주는" 느낌은 아니었다.

Claude-Mem의 등장

그리고 결국 Claude-Mem이 등장했다.. 주말동안 사용하면서 느낀건데, 바로 체감이 될정도로 편하다는 것이다. 일부러 세션을 새로 시작하면서 의미없는 프로젝트를 몇번 갈아치웠는데, 너무 마음에 든다.

아키텍처

Claude-Mem은 6개 컴포넌트로 구성된다.

  • Lifecycle Hooks: 5개의 훅(SessionStart, UserPromptSubmit, PostToolUse, Stop, SessionEnd)으로 세션 생명주기 감지
  • Smart Install: 의존성 캐시 검증
  • Worker Service: localhost:37777에서 HTTP API + 웹 UI 제공
  • SQLite DB: 세션, 관찰(observation), 요약 저장
  • Chroma Vector DB: 의미 기반 검색 지원
  • mem-search Skill: 자연어로 메모리 검색

이 중에서 자동 캡처의 핵심은 PostToolUse 훅이다. Claude가 도구(파일 읽기, 검색, 코드 실행 등)를 사용할 때마다 이 훅이 트리거되어 결과를 자동으로 저장한다. 내가 "기억해"라고 말할 필요가 없다.

3-Layer 검색

검색할 때 모든 내용을 한 번에 가져오지 않는다. Progressive Disclosure 전략을 사용한다. 번역이 점진적인 폭로..? 라길래 찾아보니 점진적인 노출로 이해하면 될 것 같다.

[claude]
UI/UX 디자인 원칙 중 하나로, 사용자에게 필요한 정보나 기능을 한꺼번에 다 보여주지 않고, 단계적으로 드러내는 방식을 말해요.

핵심 아이디어는:

  1. 처음엔 가장 중요하고 자주 쓰는 것만 보여줌
  2. 사용자가 더 깊이 탐색하거나 특정 액션을 할 때 추가 옵션/정보를 노출
  3. 인터페이스의 복잡도를 줄여서 인지 부하를 낮춤

대략적인 알고리즘은 다음과 같다.

1. search(query)        → 인덱스만 반환 (~50-100 토큰)
2. timeline(anchor=ID)  → 시간순 맥락 확인
3. get_observations()   → 필요한 것만 상세 조회 (~500-1000 토큰)

전체를 다 가져오는 것 대비 약 10배 토큰 절약 효과가 있다고 한다.

비교 정리

구분 Claude Code 기본 mcp-knowledge-graph Claude-Mem
저장 jsonl 로그 .aim 폴더 (JSON) SQLite + Vector DB
자동화 X △ (프롬프트 의존) O (훅 기반)
검색 X O (시맨틱 검색)
세션 간 공유 X O O

Hook과 Skill이란

Hook은 웹 개발에서 webhook을 다뤄봤다면 비슷한 개념이다. 특정 이벤트가 발생하면 자동으로 뭔가를 실행시키는 것. Skill은 플러그인이 제공하는 슬래시 명령어다. Claude Code의 기본 명령어(/clear, /resume 등)와 비슷하지만, 플러그인을 통해 추가되는 확장 명령어라고 보면 된다.

Hook (훅)

특정 이벤트가 발생할 때 자동으로 실행되는 코드다. 갈고리처럼 이벤트에 걸어두면, 그 이벤트가 발생할 때마다 실행된다.

  • SessionStart: 세션이 시작될 때
  • UserPromptSubmit: 사용자가 메시지를 보낼 때
  • PostToolUse: Claude가 도구를 사용한 후
  • Stop: 작업이 중단될 때
  • SessionEnd: 세션이 종료될 때

Claude-Mem은 이 훅들을 활용해서 사용자가 별도로 명령하지 않아도 자동으로 컨텍스트를 캡처한다.

Skill (스킬)

Claude Code에서 특정 기능을 수행하는 명령어 모음이다. /mem-search처럼 슬래시 명령어로 실행할 수 있다. Claude-Mem의 mem-search Skill은 저장된 메모리를 자연어로 검색하는 기능을 제공한다.

웹 UI로 메모리 확인

Claude-Mem은 localhost:37777에서 웹 UI를 제공한다. 프로젝트별로 저장된 관찰(observation) 목록을 확인할 수 있고, Claude가 도구를 사용할 때마다 실시간으로 새로운 항목이 추가되는 걸 볼 수 있다.

핵심은 이 데이터가 SQLite 데이터베이스에 영구 저장된다는 점이다. Claude Code의 기본 세션 로그(jsonl)는 세션이 끝나면 그냥 파일로 남을 뿐이지만, Claude-Mem은 별도 DB에 구조화해서 저장하기 때문에 세션이 바뀌어도, 심지어 Claude Code를 재시작해도 이전 맥락을 검색해서 꺼내올 수 있다.

마치며

아직 Claude-Mem을 설치한 지 얼마 안 돼서 장기적인 평가는 어렵다. 하지만 "자동으로 캡처하고, 필요할 때 검색해서 꺼내준다"는 컨셉은 내가 원하던 방향과 맞다.

세션이 바뀌어도, compact가 되어도, 중요한 맥락은 별도로 저장되어 있으니까. 앞으로 좀 더 써보면서 실제로 얼마나 효과가 있는지 확인해볼 생각이다.