🧠
Part 4중급⏱ 약 45분 · 2개 섹션
메모리 시스템
세션을 넘어서는 기억

✦이 챕터에서 배울 것
전체 아키텍처에서 현재 위치
⚙️코어 엔진
→🔧도구 시스템
→🛡️보안
→🧠컨텍스트
→🤝멀티 에이전트
→🌐생태계
→⚡인프라
1
메모리 타입과 구조
4가지 메모리 타입의 역할과 형식
user 메모리feedback 메모리project 메모리reference 메모리|
memdir/memdir.tsmemdir/memoryTypes.tsClaude Code의 메모리 시스템은 4가지 타입으로 세션 간 정보를 유지합니다. 각 타입은 서로 다른 용도와 범위를 가집니다.
src/memdir/memoryTypes.ts
1// src/memdir/memoryTypes.ts — 메모리 타입 분류2 3export const MEMORY_TYPES = ['user', 'feedback', 'project', 'reference'] as const4export type MemoryType = (typeof MEMORY_TYPES)[number]5 6// ─── 각 타입의 역할 ───7 8// user (항상 private)9// 사용자 역할, 목표, 선호도, 지식 수준10// 예: "사용자는 Go 10년 경력, React 초보"11 12// feedback (private 또는 team)13// 작업 방식 가이던스 — 교정과 확인 모두 기록14// 예: "이 프로젝트에서 리팩터링 PR은 하나로 묶기"15 16// project (team)17// 진행 중인 작업, 목표, 이니셔티브, 마감일18// 예: "3/5부터 merge freeze — 모바일 릴리스 브랜치 컷"19 20// reference (team)21// 외부 시스템 포인터 (Linear, Grafana, Slack 등)22// 예: "파이프라인 버그는 Linear 'INGEST' 프로젝트에서 추적"src/memdir/memdir.ts — MEMORY.md 관리
1// src/memdir/memdir.ts — MEMORY.md 인덱스 관리2 3export const ENTRYPOINT_NAME = 'MEMORY.md'4export const MAX_ENTRYPOINT_LINES = 200💡5export const MAX_ENTRYPOINT_BYTES = 25_000 // ~125자/줄 × 200줄💡6 7// 이중 제약 잘라내기 (줄 수 AND 바이트 수)8export function truncateEntrypointContent(raw: string): EntrypointTruncation {💡9 const trimmed = raw.trim()10 const contentLines = trimmed.split('\n')11 const lineCount = contentLines.length12 const byteCount = trimmed.length13 14 const wasLineTruncated = lineCount > MAX_ENTRYPOINT_LINES15 const wasByteTruncated = byteCount > MAX_ENTRYPOINT_BYTES16 17 if (!wasLineTruncated && !wasByteTruncated) {18 return { content: trimmed, lineCount, byteCount,19 wasLineTruncated, wasByteTruncated }20 }21 22 // 줄 수 먼저 잘라내고, 그 다음 바이트 수23 let truncated = wasLineTruncated24 ? contentLines.slice(0, MAX_ENTRYPOINT_LINES).join('\n')25 : trimmed26 // 바이트 제한은 마지막 줄바꿈 위치에서 자름 (중간 잘림 방지)27 // ...28}2
자동 메모리 추출
세션 메모리와 Dream 시스템
자동 추출세션 메모리Dream메모리 정리|
services/SessionMemory/sessionMemory.tsservices/extractMemories/extractMemories.tstasks/DreamTask/DreamTask.ts세션 메모리는 백그라운드 포크 에이전트가 자동으로 추출합니다. Dream 시스템은 유휴 시 메모리를 정리합니다.
세션 메모리 + Dream 시스템
1// src/services/SessionMemory/sessionMemory.ts2// 백그라운드에서 대화 핵심 정보를 자동 추출3 4// 초기화 임계값: 첫 N번 도구 호출 후 시작5// 업데이트 임계값: 매 M번 도구 호출마다 갱신6// GrowthBook 피처 게이트: tengu_session_memory7 8// src/tasks/DreamTask/DreamTask.ts — Dream 시스템9export type DreamTaskState = TaskStateBase & {💡10 type: 'dream'11 phase: 'starting' | 'updating'12 touchedFiles: string[] // 편집된 파일 목록💡13 recentTurns: Turn[] // 최근 턴 (최대 30개)14 consolidationLock: boolean // 동시 정리 방지💡15}16 17// Dream 흐름:18// 1. 대화 종료 또는 유휴 감지19// 2. DreamTask 시작 (백그라운드)20// 3. 편집된 파일 목록 수집21// 4. 최근 턴 분석 (최대 30개)22// 5. 메모리 정리/통합23// 6. 정리 잠금 해제💡 비유로 이해하기
각 행을 클릭하여 대응 관계를 확인하세요
🌍사람의 기억 시스템
🤖Claude Code 메모리
?
이해도 확인 퀴즈
MEMORY.md 파일에 200줄과 25KB 제한이 모두 있는 이유는?
✅ 학습 체크리스트
이해한 항목을 체크하고 학습 진도를 확인하세요
0/4 완료0%
📋 컨텍스트와 메모리 파트 요약
이 챕터에서 배운 핵심 개념을 정리합니다
1
컨텍스트 윈도우 한계
토큰 예산이 유한하므로 4가지 컴팩션 전략으로 긴 대화를 관리합니다.
2
4가지 메모리 타입
user(선호도), feedback(가이던스), project(작업 상태), reference(외부 포인터).
3
이중 제약 최적화
줄 수(200)와 바이트(25KB) 모두 제한하여 메모리 크기를 컨트롤합니다.
4
Dream 시스템
유휴 시 백그라운드에서 메모리를 정리하는 자동 정리 시스템입니다.