본문으로 건너뛰기
Kreath Archive
TechProjectsBooksAbout
TechProjectsBooksAbout

내비게이션

  • Tech
  • Projects
  • Books
  • About
  • Tags

카테고리

  • AI / ML
  • 웹 개발
  • 프로그래밍
  • 개발 도구

연결

  • GitHub
  • Email
  • RSS
© 2026 Kreath Archive. All rights reserved.Built with Next.js + MDX
홈TechProjectsBooksAbout
//
  1. 홈
  2. 테크
  3. 9장: 프로젝트 메모리와 코딩 에이전트
2026년 3월 14일·AI / ML·

9장: 프로젝트 메모리와 코딩 에이전트

CLAUDE.md 기반 프로젝트 메모리, 코드베이스 컨텍스트 지속, 세션 간 학습, 팀 메모리 설계 패턴 등 코딩 에이전트에 특화된 메모리 시스템을 다룹니다.

18분383자10개 섹션
aillmai-agent
공유
agent-memory9 / 10
12345678910
이전8장: 프로덕션 듀얼 레이어 아키텍처다음10장: 실전 프로젝트 — 에이전트 메모리 시스템 구축

학습 목표

  • 프로젝트 메모리의 개념과 코딩 에이전트에서의 역할을 이해한다
  • CLAUDE.md 패턴의 구조와 설계 원칙을 파악한다
  • 세션 간 학습과 코드베이스 컨텍스트 지속 전략을 적용할 수 있다
  • 팀 메모리와 공유 지식 시스템을 설계할 수 있다

프로젝트 메모리란

지금까지 다룬 메모리 시스템은 주로 대화형 에이전트를 대상으로 했습니다. 하지만 코딩 에이전트에는 고유한 메모리 요구사항이 있습니다.

코딩 에이전트는 다음을 기억해야 합니다.

  • 프로젝트의 기술 스택과 아키텍처
  • 코딩 컨벤션과 스타일 가이드
  • 디렉토리 구조와 파일 간 의존 관계
  • 이전 세션에서 수행한 작업의 맥락
  • 팀의 의사결정 이력과 그 이유

이러한 정보를 체계적으로 관리하는 것이 프로젝트 메모리(Project Memory)입니다.


CLAUDE.md — 프로젝트 메모리의 표준

CLAUDE.md는 프로젝트 루트에 위치하는 메모리 파일로, 코딩 에이전트가 세션 시작 시 자동으로 읽어 프로젝트 맥락을 파악합니다. 이 패턴은 Claude Code에서 시작되었지만, 다른 코딩 에이전트에서도 유사한 방식이 채택되고 있습니다.

CLAUDE.md의 핵심 구조

CLAUDE.md-structure.md
markdown
# 프로젝트명 -- CLAUDE.md
 
## 프로젝트 개요
한두 문장으로 프로젝트의 목적과 성격을 설명합니다.
 
## 기술 스택
프레임워크, 언어, 주요 라이브러리를 표로 정리합니다.
 
## 개발 명령어
빌드, 테스트, 린트 등 핵심 명령어를 나열합니다.
 
## 프로젝트 구조
주요 디렉토리와 파일의 역할을 설명합니다.
 
## 핵심 규칙
절대 지켜야 할 규칙을 명시합니다. (예: TypeScript strict, 이모지 금지 등)
 
## 코딩 컨벤션
네이밍, 임포트 순서, 스타일 가이드를 기술합니다.
 
## 참조 문서
상세 정보가 담긴 문서 경로를 안내합니다.

효과적인 CLAUDE.md 설계 원칙

design-principles.txt
text
1. 간결성 우선
   - 전체 파일이 2,000-5,000 토큰을 넘지 않도록 합니다
   - 에이전트의 컨텍스트 예산을 과도하게 소비하지 않아야 합니다
   - 상세 내용은 별도 문서로 분리하고 경로만 안내합니다
 
2. 규칙의 명확성
   - "가능하면 ~하세요" 대신 "반드시 ~합니다" 형태로 작성합니다
   - 예외 조건이 있다면 명시적으로 기술합니다
   - 규칙의 이유를 간략히 설명하면 에이전트의 준수율이 높아집니다
 
3. 계층적 구조
   - CLAUDE.md: 프로젝트 전체에 적용되는 핵심 정보
   - docs/*.md: 특정 영역의 상세 참조 문서
   - 에이전트가 필요에 따라 참조 문서를 읽도록 안내합니다
 
4. 실행 가능한 명령어 포함
   - "빌드는 pnpm build"처럼 바로 실행할 수 있는 형태로 기술합니다
   - 환경 변수나 사전 조건이 있다면 함께 명시합니다
Tip

CLAUDE.md는 에이전트를 위한 "신입 온보딩 문서"라고 생각하면 좋습니다. 새로 합류한 개발자가 프로젝트를 이해하는 데 필요한 핵심 정보를 담되, 너무 많은 정보로 압도하지 않는 균형이 중요합니다.


코드베이스 컨텍스트 지속

세션 간 학습

코딩 에이전트는 세션이 바뀌어도 이전에 학습한 코드베이스 지식을 유지해야 합니다.

codebase-memory.ts
typescript
interface CodebaseMemory {
  // 파일별 요약 -- 에이전트가 파일을 읽을 때마다 갱신
  fileSummaries: Map<string, FileSummary>;
 
  // 의존 관계 그래프
  dependencyGraph: DependencyEdge[];
 
  // 학습된 패턴 -- 코드베이스에서 반복되는 패턴
  learnedPatterns: CodePattern[];
 
  // 변경 이력 -- 최근 세션에서 수행한 변경
  recentChanges: ChangeRecord[];
}
 
interface FileSummary {
  path: string;
  purpose: string;          // 파일의 역할
  exports: string[];        // 주요 내보내기
  dependencies: string[];   // 주요 의존성
  lastAnalyzed: number;     // 마지막 분석 시점
}
 
interface CodePattern {
  name: string;
  description: string;
  examples: string[];       // 패턴이 사용된 파일 경로들
  frequency: number;        // 발견 빈도
}

자동 메모리 갱신

에이전트가 코드를 읽고, 편집하고, 테스트하는 과정에서 자동으로 프로젝트 메모리를 갱신하는 시스템입니다.

auto-memory-update.ts
typescript
class ProjectMemoryUpdater {
  async onFileRead(filePath: string, content: string): Promise<void> {
    // 파일 요약 생성/갱신
    const summary = await this.summarizeFile(filePath, content);
    await this.memoryStore.updateFileSummary(filePath, summary);
  }
 
  async onFileEdit(
    filePath: string,
    changes: string,
    reason: string
  ): Promise<void> {
    // 변경 기록 저장
    await this.memoryStore.addChangeRecord({
      filePath,
      changes,
      reason,
      timestamp: Date.now(),
      sessionId: this.currentSession.id,
    });
 
    // 관련 파일 요약 무효화
    const dependents = await this.findDependentFiles(filePath);
    for (const dep of dependents) {
      await this.memoryStore.invalidateFileSummary(dep);
    }
  }
 
  async onBuildResult(
    success: boolean,
    errors: string[]
  ): Promise<void> {
    if (!success) {
      // 빌드 실패 패턴 기록 -- 같은 실수 반복 방지
      await this.memoryStore.addLearnedPattern({
        name: "build_failure",
        description: `빌드 실패: ${errors[0]}`,
        resolution: "", // 해결 후 채워짐
        timestamp: Date.now(),
      });
    }
  }
}

메모리 파일 설계 패턴

프로젝트 메모리를 파일 시스템에 저장하는 실용적인 패턴들을 소개합니다.

패턴 1: 계층적 메모리 파일

hierarchical-memory.txt
text
project-root/
  CLAUDE.md                    # L0: 핵심 프로젝트 정보
  docs/
    architecture.md            # L1: 아키텍처 상세
    conventions.md             # L1: 코딩 컨벤션 상세
    design-system.md           # L1: 디자인 시스템 상세
  .claude/
    memory/
      MEMORY.md                # 자동 메모리 (에이전트가 갱신)
      user-preferences.md      # 사용자별 선호도
      project-decisions.md     # 의사결정 이력

패턴 2: 자동 메모리 파일

에이전트가 세션 중에 자동으로 갱신하는 메모리 파일입니다.

auto-memory-example.md
markdown
# 자동 메모리
 
## 학습된 사실
- 이 프로젝트는 pnpm을 사용한다
- 빌드 전 반드시 Velite를 먼저 실행해야 한다
- globals.css에서 CSS 변수를 정의하고 Tailwind에서 참조한다
 
## 사용자 선호도
- TypeScript strict 모드를 선호한다
- 이모지를 사용하지 않는다
- 함수 선언(function) 형태를 선호한다
 
## 최근 작업 맥락
- 검색 기능에 최근 검색어 localStorage 저장 추가 (2026-03-28)
- 포스트 네비게이션에 화살표 아이콘 애니메이션 추가 (2026-03-27)

패턴 3: 의사결정 기록

프로젝트에서 내려진 기술적 의사결정을 기록하여, 에이전트가 맥락을 이해하고 일관성을 유지하도록 합니다.

decision-log-example.md
markdown
# 의사결정 기록
 
## 2026-03-15: CSS 프레임워크 선택
- 결정: Tailwind CSS v4
- 대안: CSS Modules, styled-components
- 이유: 유틸리티 우선 접근법이 빠른 개발에 적합, v4의 새 설정 방식 채택
- 영향: 모든 스타일링은 Tailwind 클래스로, 커스텀 프로퍼티는 globals.css에서 관리
 
## 2026-03-18: 콘텐츠 관리 방식
- 결정: MDX + Velite (git 기반)
- 대안: CMS (Sanity, Notion API)
- 이유: 버전 관리, 마크다운 익숙함, 빌드 시 타입 안전성
- 영향: 콘텐츠는 content/ 디렉토리에, 스키마는 velite.config.ts에서 관리
Info

의사결정 기록은 "왜 이렇게 했는지"를 기록하는 것이 핵심입니다. 에이전트가 코드를 수정할 때 기존 결정을 존중하거나, 변경이 필요한 경우 근거를 명확히 제시할 수 있게 됩니다.


팀 메모리 — 공유 지식

개인 에이전트를 넘어, 팀 수준에서 공유되는 지식을 관리하는 개념입니다.

팀 메모리의 구조

공유 메모리 파일 패턴

팀 메모리는 저장소에 커밋되어 모든 팀원의 에이전트가 공유합니다.

team-memory-merge.ts
typescript
interface TeamMemoryEntry {
  content: string;
  author: string;
  createdAt: number;
  endorsedBy: string[];  // 동의한 팀원 목록
  category: "convention" | "decision" | "pattern" | "faq";
}
 
// 팀 메모리는 충돌이 발생할 수 있음
// 병합 전략이 필요
function resolveConflict(
  existing: TeamMemoryEntry,
  incoming: TeamMemoryEntry
): TeamMemoryEntry {
  // 더 많은 팀원이 동의한 항목 우선
  if (incoming.endorsedBy.length > existing.endorsedBy.length) {
    return incoming;
  }
 
  // 동일하면 최신 항목 우선
  if (incoming.createdAt > existing.createdAt) {
    return incoming;
  }
 
  return existing;
}

메모리의 범위와 우선순위

여러 수준의 메모리가 존재할 때, 어떤 메모리가 우선하는지의 규칙이 필요합니다.

memory-priority.txt
text
우선순위 (높은 것부터):
1. 현재 세션의 명시적 지시사항
2. 프로젝트 CLAUDE.md의 절대 규칙
3. 사용자 개인 메모리 (선호도)
4. 팀 메모리 (컨벤션, 결정)
5. 조직 메모리 (정책, 표준)
6. 에이전트의 기본 행동
 
충돌 시:
- 상위 우선순위가 하위를 덮어씁니다
- 명시적 지시가 암묵적 학습을 덮어씁니다
- 팀 컨벤션이 개인 선호도를 덮어씁니다 (코드 품질 관련)
Warning

메모리 우선순위의 역전은 에이전트의 비일관적 행동의 주요 원인입니다. 특히 개인 선호도가 팀 컨벤션을 무시하는 경우, 코드 리뷰에서 불필요한 충돌이 발생합니다. 명확한 우선순위 체계를 설정하세요.


메모리 위생 관리

프로젝트 메모리도 정기적으로 정리하고 갱신해야 합니다.

memory-hygiene.ts
typescript
interface MemoryAudit {
  totalEntries: number;
  staleEntries: number;      // 마지막 참조가 30일 이상 된 항목
  conflictingEntries: number; // 서로 모순되는 항목
  duplicateEntries: number;   // 중복 항목
  suggestions: string[];      // 정리 제안
}
 
async function auditProjectMemory(
  memoryStore: ProjectMemoryStore
): Promise<MemoryAudit> {
  const allEntries = await memoryStore.getAll();
 
  const stale = allEntries.filter(
    (e) => Date.now() - e.lastAccessed > 30 * 24 * 60 * 60 * 1000
  );
 
  const conflicts = findConflicts(allEntries);
  const duplicates = findDuplicates(allEntries);
 
  const suggestions: string[] = [];
  if (stale.length > allEntries.length * 0.3) {
    suggestions.push("30% 이상의 메모리가 30일간 미참조 -- 정리를 권장합니다");
  }
  if (conflicts.length > 0) {
    suggestions.push(`${conflicts.length}건의 모순된 메모리가 발견되었습니다`);
  }
 
  return {
    totalEntries: allEntries.length,
    staleEntries: stale.length,
    conflictingEntries: conflicts.length,
    duplicateEntries: duplicates.length,
    suggestions,
  };
}

정리

이번 장에서 다룬 프로젝트 메모리의 핵심 내용을 정리합니다.

  • 프로젝트 메모리는 코딩 에이전트에 특화된 메모리로, 기술 스택, 컨벤션, 아키텍처 결정을 포함합니다
  • CLAUDE.md는 프로젝트 메모리의 표준 패턴으로, 간결하면서도 핵심적인 정보를 담습니다
  • 자동 메모리 갱신으로 에이전트가 코드를 다루면서 학습한 내용을 지속합니다
  • 팀 메모리는 컨벤션, 의사결정, 공통 패턴을 팀 수준에서 공유합니다
  • 메모리 우선순위와 위생 관리로 일관성과 최신성을 유지합니다

다음 장 미리보기

10장에서는 실전 프로젝트로 지금까지 배운 모든 개념을 통합합니다. Mem0와 Zep을 활용한 대화형 에이전트에 듀얼 레이어 메모리를 구축하고, 메모리 압축 파이프라인과 성능 벤치마킹까지 수행합니다.

이 글이 도움이 되셨나요?

관련 주제 더 보기

#ai#llm#ai-agent

관련 글

AI / ML

10장: 실전 프로젝트 — 에이전트 메모리 시스템 구축

Mem0와 Zep을 활용한 듀얼 레이어 메모리 시스템 구축, 메모리 압축 파이프라인, 성능 벤치마킹, 프로덕션 운영 체크리스트까지 실전 가이드를 제공합니다.

2026년 3월 16일·19분
AI / ML

8장: 프로덕션 듀얼 레이어 아키텍처

Hot Path와 Cold Path를 결합한 듀얼 레이어 메모리 아키텍처의 설계, 하이브리드 검색, 메모리 라우팅, 비용-지연시간 최적화 전략을 다룹니다.

2026년 3월 12일·16분
AI / ML

7장: 메모리 프레임워크 비교와 선택

Mem0, Zep, Letta, LangChain/LangGraph의 메모리 시스템을 상세 비교하고, 프로젝트 요구사항에 맞는 프레임워크 선택 의사결정 트리를 제시합니다.

2026년 3월 10일·16분
이전 글8장: 프로덕션 듀얼 레이어 아키텍처
다음 글10장: 실전 프로젝트 — 에이전트 메모리 시스템 구축

댓글

목차

약 18분 남음
  • 학습 목표
  • 프로젝트 메모리란
  • CLAUDE.md — 프로젝트 메모리의 표준
    • CLAUDE.md의 핵심 구조
    • 효과적인 CLAUDE.md 설계 원칙
  • 코드베이스 컨텍스트 지속
    • 세션 간 학습
    • 자동 메모리 갱신
  • 메모리 파일 설계 패턴
    • 패턴 1: 계층적 메모리 파일
    • 패턴 2: 자동 메모리 파일
    • 패턴 3: 의사결정 기록
  • 팀 메모리 — 공유 지식
    • 팀 메모리의 구조
    • 공유 메모리 파일 패턴
  • 메모리의 범위와 우선순위
  • 메모리 위생 관리
  • 정리
  • 다음 장 미리보기