Memory Systems: Persistent Context Across Sessions
Memory 시스템 — 세션을 넘나드는 영속적 컨텍스트
Claude는 기본적으로 세션이 끝나면 모든 것을 잊는다 — Memory 시스템은 그 망각을 극복하고 Claude가 당신의 프로젝트와 작업 방식을 장기적으로 학습하게 만든다.
Overview
Claude Code 세션은 기본적으로 상태가 없다. 오늘 알려준 팀의 코딩 규칙, 내일은 다시 알려줘야 한다. 지난주에 한 실수에서 배운 교훈, 새 세션에서 Claude는 모른다. 이것은 AI 어시스턴트 사용의 가장 큰 마찰 중 하나다.
Auto-memory 시스템은 이 문제를 해결한다. Claude가 대화에서 중요한 정보를 발견하면 자동으로 파일로 저장하고, 다음 세션에서 그 파일들을 불러와 컨텍스트에 포함한다. 프로젝트별로 독립된 메모리 디렉토리에 마크다운 파일로 저장되어, 사람이 읽고 수정할 수 있다.
- 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가 잘못된 가정으로 작업할 수 있다. 메모리 파일을 읽기 전에 현재 코드 상태와 대조해 여전히 유효한지 확인하는 습관을 들여라.
상상해보자. 당신이 매일 아침 기억을 잃고 출근한다. 어제 동료와 어떤 결정을 했는지, 어떤 코딩 컨벤션을 사용하기로 했는지, 어떤 버그를 추적 중인지 — 전혀 기억이 없다. 매일 아침 동료들이 다시 설명해줘야 한다.
이것이 기본 상태의 Claude다. 세션마다 새로 시작한다.
Auto-memory는 이 문제에 대한 해결책이다 — 마치 매일 아침 책상에 놓인 '어제의 나에게 남기는 노트'와 같다. 어제의 Claude가 오늘의 Claude에게 남기는 메시지. '이 프로젝트에서 DB mock은 금지입니다. 이유: 지난 분기 사건이 있었습니다.' '이 사용자는 Go 전문가라 Go 개념으로 설명하면 빠릅니다.'
가장 효과적인 노트는 WHY를 포함한다 — 규칙만 있고 이유가 없으면, 다음날의 나는 그 규칙이 아직도 유효한지 판단할 수 없다.
실제 프로젝트에서 사용하는 feedback 메모리 파일의 예제다. Why와 How to apply 구조가 어떻게 미래의 Claude를 안내하는지 주목하라.
---
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]] 링크는 관련 메모리 파일을 연결한다 — 나중에 그 파일이 만들어지면 연결이 완성된다.
✅ 시니어가 보는 것
- 메모리와 CLAUDE.md의 역할을 명확히 구분하는지
- Why와 How to apply가 포함된 feedback 메모리 구조
- stale 메모리를 주기적으로 정리하는 습관
⚠️ 레드 플래그
- CLAUDE.md에 있어야 할 코딩 규칙을 메모리에 저장하는 경우
- Why 없이 규칙만 있는 feedback 메모리
- 오래된 프로젝트 상태가 그대로 메모리에 남아있는 경우
🎤 예상 인터뷰 질문
- 메모리와 CLAUDE.md를 어떻게 구분해서 사용하시나요?
- feedback 메모리에 Why를 포함하는 것이 왜 중요한가요?
- stale 메모리를 발견했을 때 어떻게 처리하시나요?
Key Takeaways
MEMORY.md는 항상 로드된다
200줄 이후 잘리므로 가볍게 유지하라. 각 항목은 한 줄, 핵심 내용과 파일 링크만.
4타입: user/feedback/project/reference
각 타입은 다른 목적. feedback이 가장 중요 — 작업 방식을 교정하고 반복 실수를 막는다.
Why를 반드시 포함하라
규칙만 있고 이유가 없으면 미래의 Claude가 여전히 유효한지 판단할 수 없다.
코드에서 읽을 수 있는 것은 저장하지 마라
코딩 패턴, git 히스토리, CLAUDE.md에 있는 것 — 메모리에 중복 저장하면 충돌 위험만 높아진다.
stale 메모리는 없는 것보다 나쁘다
오래된 메모리를 믿고 Claude가 잘못된 가정으로 작업할 수 있다. 주기적으로 현재 상태와 대조하라.