/Part 4: 컨텍스트와 메모리/메모리 시스템
🧠
Part 4중급⏱ 약 45분 · 2개 섹션

메모리 시스템

세션을 넘어서는 기억

메모리 시스템 대표 이미지
이 챕터에서 배울 것
  • 4가지 메모리 타입: user, feedback, project, reference
  • MEMORY.md는 200줄 + 25KB 제한의 인덱스
  • Dream 시스템이 유휴 시 자동 메모리 정리
전체 아키텍처에서 현재 위치
⚙️코어 엔진
🔧도구 시스템
🛡️보안
🧠컨텍스트
🤝멀티 에이전트
🌐생태계
인프라
1

메모리 타입과 구조

4가지 메모리 타입의 역할과 형식

user 메모리feedback 메모리project 메모리reference 메모리|memdir/memdir.tsmemdir/memoryTypes.ts

Claude Code의 메모리 시스템은 4가지 타입으로 세션 간 정보를 유지합니다. 각 타입은 서로 다른 용도와 범위를 가집니다.

src/memdir/memoryTypes.ts
1// src/memdir/memoryTypes.ts — 메모리 타입 분류
2
3export const MEMORY_TYPES = ['user', 'feedback', 'project', 'reference'] as const
4export 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.length
12 const byteCount = trimmed.length
13
14 const wasLineTruncated = lineCount > MAX_ENTRYPOINT_LINES
15 const wasByteTruncated = byteCount > MAX_ENTRYPOINT_BYTES
16
17 if (!wasLineTruncated && !wasByteTruncated) {
18 return { content: trimmed, lineCount, byteCount,
19 wasLineTruncated, wasByteTruncated }
20 }
21
22 // 줄 수 먼저 잘라내고, 그 다음 바이트 수
23 let truncated = wasLineTruncated
24 ? contentLines.slice(0, MAX_ENTRYPOINT_LINES).join('\n')
25 : trimmed
26 // 바이트 제한은 마지막 줄바꿈 위치에서 자름 (중간 잘림 방지)
27 // ...
28}
2

자동 메모리 추출

세션 메모리와 Dream 시스템

자동 추출세션 메모리Dream메모리 정리|services/SessionMemory/sessionMemory.tsservices/extractMemories/extractMemories.tstasks/DreamTask/DreamTask.ts

세션 메모리는 백그라운드 포크 에이전트가 자동으로 추출합니다. Dream 시스템은 유휴 시 메모리를 정리합니다.

세션 메모리 + Dream 시스템
1// src/services/SessionMemory/sessionMemory.ts
2// 백그라운드에서 대화 핵심 정보를 자동 추출
3
4// 초기화 임계값: 첫 N번 도구 호출 후 시작
5// 업데이트 임계값: 매 M번 도구 호출마다 갱신
6// GrowthBook 피처 게이트: tengu_session_memory
7
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 시스템
유휴 시 백그라운드에서 메모리를 정리하는 자동 정리 시스템입니다.