GitHub ↗
CHAPTER 08 OF 10
🧠

Memory Systems: Persistent Context Across Sessions

Memory 시스템 — 세션을 넘나드는 영속적 컨텍스트

Claude는 기본적으로 세션이 끝나면 모든 것을 잊는다 — Memory 시스템은 그 망각을 극복하고 Claude가 당신의 프로젝트와 작업 방식을 장기적으로 학습하게 만든다.

Memory Systems: Persistent Context Across Sessions cheatsheet
🍌 NANO BANANA CHEATSHEET · CH 08

Overview

개관

Claude Code 세션은 기본적으로 상태가 없다. 오늘 알려준 팀의 코딩 규칙, 내일은 다시 알려줘야 한다. 지난주에 한 실수에서 배운 교훈, 새 세션에서 Claude는 모른다. 이것은 AI 어시스턴트 사용의 가장 큰 마찰 중 하나다.

Auto-memory 시스템은 이 문제를 해결한다. Claude가 대화에서 중요한 정보를 발견하면 자동으로 파일로 저장하고, 다음 세션에서 그 파일들을 불러와 컨텍스트에 포함한다. 프로젝트별로 독립된 메모리 디렉토리에 마크다운 파일로 저장되어, 사람이 읽고 수정할 수 있다.

🎯 Learning Goals
  • Claude Code의 Auto-memory 시스템이 어떻게 작동하는지 이해한다
  • user, feedback, project, reference 4가지 메모리 타입의 차이를 설명한다
  • 효과적인 메모리 파일 구조를 설계한다
  • 언제 메모리를 저장하고 언제 저장하지 말아야 하는지 판단한다
  • 메모리와 CLAUDE.md의 역할을 구분한다

Sections

본문

Auto-memory 시스템 — 어디에 어떻게 저장되는가

Auto-memory 파일들은 다음 위치에 저장된다:

~/.claude/projects/<sanitized-cwd>/memory/
├── MEMORY.md           ← 인덱스 파일 (항상 컨텍스트에 로드됨)
├── user_role.md        ← 사용자 역할/선호도
├── feedback_testing.md ← 테스트 전략 피드백
├── project_auth.md     ← 인증 관련 프로젝트 결정
└── reference_linear.md ← Linear 티켓 추적 참조

MEMORY.md는 특별하다 — 항상 컨텍스트 윈도우에 로드된다. 이 파일은 인덱스로만 사용되며, 각 메모리의 한 줄 요약과 파일 링크를 담는다. 200줄 이후는 잘리므로 간결하게 유지해야 한다.

개별 메모리 파일은 관련성이 있을 때만 로드된다 — 컨텍스트를 아낀다.

설정으로 메모리 위치를 커스터마이즈할 수 있다:

{
  "autoMemoryDirectory": "~/my-custom-memory/"
}

4가지 메모리 타입

메모리 파일에는 4가지 타입이 있으며, 각각 다른 목적을 가진다:

1. user — 사용자의 역할, 선호도, 지식 수준

---
name: user-role
description: 사용자가 Go 전문가이며 React는 처음임을 기록
metadata:
  type: user
---
10년 경력 Go 엔지니어. 이 프로젝트의 React 프론트엔드는 처음이다.
프론트엔드 설명 시 Go 개념과 비교해서 설명하면 효과적이다.

2. feedback — 접근 방식에 대한 사용자 교정/확인

---
metadata:
  type: feedback
---
테스트에서 DB를 mock하지 말 것.
**Why:** 지난 분기에 mock 테스트 통과 후 프로덕션 마이그레이션이 실패한 사건이 있었음.
**How to apply:** 통합 테스트는 항상 실제 DB 사용.

3. project — 진행 중인 작업, 목표, 결정 사항

---
metadata:
  type: project
---
2026-07-01까지 인증 미들웨어 재작성 완료 목표.
**Why:** Legal이 세션 토큰 저장 방식이 새 컴플라이언스 요구사항 미충족을 지적함.
**How to apply:** 인증 관련 스코프 결정은 컴플라이언스 우선.

4. reference — 외부 시스템의 위치 정보

---
metadata:
  type: reference
---
파이프라인 버그는 Linear 프로젝트 'INGEST'에서 추적됨.

언제 저장하고 언제 저장하지 말아야 하는가

메모리에 저장해야 하는 것:

  • 사용자의 역할, 전문 분야, 새로운 기술 분야
  • 사용자가 접근 방식을 수정하거나 확인한 것 ('이렇게 하지 마세요', '네 정확해요')
  • 진행 중인 프로젝트의 결정과 맥락
  • 외부 시스템 참조 (어떤 버그 트래커, 어떤 채널)

메모리에 저장하지 말아야 하는 것 (이것들은 다른 방법으로 관리한다):

저장 안 할 것 이유
코드 패턴, 컨벤션, 파일 구조 코드 자체에서 읽을 수 있음
Git 히스토리, 최근 변경 git log/blame이 권위적 소스
디버깅 해결책, 수정 레시피 코드에 있음; 커밋 메시지에 맥락 있음
CLAUDE.md에 이미 있는 것 중복, 충돌 위험
현재 세션의 임시 상태 세션이 끝나면 의미 없음

기억해야 할 핵심 테스트: '이 정보를 미래의 Claude가 현재 파일을 보지 않고도 알아야 하는가?' 그렇다면 메모리에. 아니라면 코드나 git에.

MEMORY.md 인덱스 설계와 유지관리

MEMORY.md는 항상 컨텍스트에 로드되므로 가볍게 유지하는 것이 중요하다.

# Memory Index

## User
- [User Role](user_role.md) — Go 전문가, React 초보; 프론트엔드 설명 시 Go 비교법 효과적

## Feedback  
- [Testing Strategy](feedback_testing.md) — DB mock 금지; 작년 migration 실패 사건
- [Response Style](feedback_style.md) — 요약 금지, diff를 직접 읽을 수 있음

## Project
- [Auth Rewrite](project_auth.md) — 2026-07-01 데드라인; compliance 요구사항
- [Current Sprint](project_sprint.md) — JWT 미들웨어 구현 중

## Reference
- [Bug Tracker](reference_bugs.md) — Linear 'INGEST' 프로젝트
- [Monitoring](reference_monitoring.md) — grafana.internal/d/api-latency

각 항목은 한 줄, 150자 이내. 파일 링크와 핵심 내용을 담는다.

유지관리 전략: 메모리 파일이 오래되거나 틀려지면 즉시 업데이트하거나 삭제하라. stale한 메모리는 없는 것보다 나쁘다 — Claude가 잘못된 가정으로 작업할 수 있다. 메모리 파일을 읽기 전에 현재 코드 상태와 대조해 여전히 유효한지 확인하는 습관을 들여라.

💡 Analogy · 비유
새 팀원의 온보딩 노트

상상해보자. 당신이 매일 아침 기억을 잃고 출근한다. 어제 동료와 어떤 결정을 했는지, 어떤 코딩 컨벤션을 사용하기로 했는지, 어떤 버그를 추적 중인지 — 전혀 기억이 없다. 매일 아침 동료들이 다시 설명해줘야 한다.

이것이 기본 상태의 Claude다. 세션마다 새로 시작한다.

Auto-memory는 이 문제에 대한 해결책이다 — 마치 매일 아침 책상에 놓인 '어제의 나에게 남기는 노트'와 같다. 어제의 Claude가 오늘의 Claude에게 남기는 메시지. '이 프로젝트에서 DB mock은 금지입니다. 이유: 지난 분기 사건이 있었습니다.' '이 사용자는 Go 전문가라 Go 개념으로 설명하면 빠릅니다.'

가장 효과적인 노트는 WHY를 포함한다 — 규칙만 있고 이유가 없으면, 다음날의 나는 그 규칙이 아직도 유효한지 판단할 수 없다.

실제 프로젝트에서 사용하는 feedback 메모리 파일의 예제다. Why와 How to apply 구조가 어떻게 미래의 Claude를 안내하는지 주목하라.

markdown
---
name: db-testing-policy
description: DB를 테스트에서 mock하지 말 것 — production divergence 사건
metadata:
  type: feedback
---

통합 테스트에서 DB를 mock하지 마라. 항상 실제 DB 연결을 사용해야 한다.

**Why:** 2025년 4분기에 mock 테스트가 전부 통과했지만,
prod 마이그레이션이 실패한 사건이 있었다. Mock이 실제 Prisma 동작과
다르게 작동했기 때문이다. 이 사건으로 프로덕션이 2시간 다운됐다.

**How to apply:** 테스트 파일에서 `jest.mock('prisma')`나
`vi.mock('@/lib/db')` 패턴을 보면 제안하지 말 것.
통합 테스트는 `test-db`라는 별도 PostgreSQL 인스턴스를 사용한다
(`.env.test`의 `DATABASE_URL` 참조).

[[feedback-test-runner]]  ← 관련 메모리 링크

이 메모리 파일의 구조에서 Why와 How to apply 섹션이 핵심이다. Why가 없으면 미래의 Claude는 이 규칙이 여전히 유효한지 판단할 수 없다. How to apply는 규칙을 적용해야 하는 구체적인 코드 패턴을 알려준다. [[feedback-test-runner]] 링크는 관련 메모리 파일을 연결한다 — 나중에 그 파일이 만들어지면 연결이 완성된다.

🏭 현업에서의 평가
메모리 시스템을 적극적으로 관리하는 팀은 AI와 협업하는 속도가 시간이 지날수록 빨라진다. 초기 온보딩 투자가 복리로 돌아오는 것이다.

✅ 시니어가 보는 것

  • 메모리와 CLAUDE.md의 역할을 명확히 구분하는지
  • Why와 How to apply가 포함된 feedback 메모리 구조
  • stale 메모리를 주기적으로 정리하는 습관

⚠️ 레드 플래그

  • CLAUDE.md에 있어야 할 코딩 규칙을 메모리에 저장하는 경우
  • Why 없이 규칙만 있는 feedback 메모리
  • 오래된 프로젝트 상태가 그대로 메모리에 남아있는 경우

🎤 예상 인터뷰 질문

  1. 메모리와 CLAUDE.md를 어떻게 구분해서 사용하시나요?
  2. feedback 메모리에 Why를 포함하는 것이 왜 중요한가요?
  3. stale 메모리를 발견했을 때 어떻게 처리하시나요?
숙달 vs 익숙함: 단순히 아는 수준: Auto-memory 시스템이 존재한다. 마스터 수준: 세션마다 메모리 파일을 적극적으로 관리하고, feedback 메모리에 Why를 항상 포함하며, CLAUDE.md와 메모리의 역할을 명확히 분리해 중복과 충돌을 방지한다.

Key Takeaways

핵심 정리

MEMORY.md는 항상 로드된다

200줄 이후 잘리므로 가볍게 유지하라. 각 항목은 한 줄, 핵심 내용과 파일 링크만.

4타입: user/feedback/project/reference

각 타입은 다른 목적. feedback이 가장 중요 — 작업 방식을 교정하고 반복 실수를 막는다.

Why를 반드시 포함하라

규칙만 있고 이유가 없으면 미래의 Claude가 여전히 유효한지 판단할 수 없다.

코드에서 읽을 수 있는 것은 저장하지 마라

코딩 패턴, git 히스토리, CLAUDE.md에 있는 것 — 메모리에 중복 저장하면 충돌 위험만 높아진다.

stale 메모리는 없는 것보다 나쁘다

오래된 메모리를 믿고 Claude가 잘못된 가정으로 작업할 수 있다. 주기적으로 현재 상태와 대조하라.