본문으로 건너뛰기
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. 7장: 컨텍스트 격리와 멀티에이전트 설계
2026년 3월 20일·AI / ML·

7장: 컨텍스트 격리와 멀티에이전트 설계

멀티에이전트 시스템에서 에이전트별 컨텍스트를 격리하고, 크로스 오염을 방지하며, 공유 컨텍스트를 효과적으로 관리하는 전략을 다룹니다.

18분453자9개 섹션
aiai-agentclaude-codellm
공유
context-engineering7 / 10
12345678910
이전6장: 컨텍스트 정렬과 포맷 최적화다음8장: 컨텍스트 엔지니어링 도구와 기법

이 장에서 배우는 것

  • 컨텍스트 격리의 필요성: 왜 모든 에이전트에게 같은 정보를 주면 안 되는가
  • 에이전트별 격리된 컨텍스트 윈도우 설계
  • 크로스 오염 방지 전략
  • 공유 컨텍스트 파일(CLAUDE.md)의 역할
  • 서브에이전트 컨텍스트 설계
  • Agent Teams(2026): 격리와 협력의 균형

왜 격리가 필요한가

단일 에이전트가 처리하기 어려운 복잡한 작업은 여러 에이전트로 분할합니다. 이때 각 에이전트에게 전체 컨텍스트를 동일하게 주면 여러 문제가 발생합니다.

컨텍스트 격리(Context Isolation)는 각 에이전트에게 해당 작업에 필요한 정보만 제공하는 전략입니다. 사람 팀에서 각 팀원에게 역할에 맞는 정보를 브리핑하는 것과 같은 원리입니다.

Info

3명의 에이전트가 잘 설계된 CLAUDE.md를 읽는 것이, 3명의 에이전트가 각자 독립적으로 코드베이스를 탐색하는 것보다 일관된 결과를 만들어냅니다. 격리는 "정보를 차단하는 것"이 아니라, "필요한 정보를 정밀하게 제공하는 것"입니다.

에이전트별 격리된 컨텍스트 윈도우

1M 토큰 시대의 격리 전략

2026년 현재, 주요 모델들은 100만 토큰 이상의 컨텍스트 윈도우를 제공합니다. 이는 각 서브에이전트에게 충분히 넓은 격리된 작업 공간을 제공할 수 있다는 의미입니다.

컨텍스트 분배 설계

context-distribution.ts
typescript
interface AgentContext {
  // 공유 컨텍스트: 모든 에이전트에 공통
  shared: {
    projectRules: string;      // CLAUDE.md
    projectStructure: string;  // 트리 요약
    conventions: string;       // 핵심 컨벤션
  };
  
  // 전용 컨텍스트: 에이전트별 특화
  dedicated: {
    role: string;              // 에이전트 역할 정의
    relevantCode: string[];    // 역할 관련 코드
    tools: ToolDefinition[];   // 사용 가능한 도구
    examples: string[];        // 역할 관련 예시
  };
}
 
function buildAgentContext(
  role: "coder" | "tester" | "reviewer",
  task: Task,
  project: ProjectInfo
): AgentContext {
  const shared = {
    projectRules: readCLAUDEmd(project.root),
    projectStructure: generateTreeSummary(project.root, 1),
    conventions: extractCoreConventions(project),
  };
  
  switch (role) {
    case "coder":
      return {
        shared,
        dedicated: {
          role: "코드를 작성하고 수정하는 역할입니다.",
          relevantCode: selectCodeForCoding(task),
          tools: [fileWrite, fileRead, terminalRun, grep],
          examples: findSimilarImplementations(task),
        },
      };
    
    case "tester":
      return {
        shared,
        dedicated: {
          role: "테스트를 작성하고 실행하는 역할입니다.",
          relevantCode: selectCodeForTesting(task),
          tools: [fileWrite, fileRead, testRun],
          examples: findExistingTestPatterns(task),
        },
      };
    
    case "reviewer":
      return {
        shared,
        dedicated: {
          role: "코드를 리뷰하고 개선사항을 제안하는 역할입니다.",
          relevantCode: selectCodeForReview(task),
          tools: [fileRead, grep, gitDiff],
          examples: findReviewStandards(project),
        },
      };
  }
}

크로스 오염 방지

크로스 오염(Cross-contamination)은 한 에이전트의 컨텍스트가 다른 에이전트에 의도치 않게 영향을 미치는 현상입니다.

오염 발생 시나리오

시나리오문제결과
코딩 에이전트의 중간 결과가 리뷰 에이전트에 전달리뷰어가 미완성 코드를 최종본으로 오인불완전한 리뷰
에러 메시지가 모든 에이전트에 전파관련 없는 에이전트가 에러에 반응불필요한 수정
한 에이전트의 가정이 다른 에이전트에 주입검증되지 않은 가정이 사실로 취급일관성 있지만 잘못된 결과

방지 전략

contamination-prevention.ts
typescript
interface MessageFilter {
  // 에이전트 간 메시지 전달 시 필터링
  filterForRecipient(
    message: AgentMessage,
    recipient: AgentRole
  ): AgentMessage | null;
}
 
class ContextFirewall implements MessageFilter {
  private allowedChannels: Map<string, Set<AgentRole>>;
  
  filterForRecipient(
    message: AgentMessage,
    recipient: AgentRole
  ): AgentMessage | null {
    // 1. 채널 허용 여부 확인
    const channel = `${message.sender}->${recipient}`;
    if (!this.isChannelAllowed(channel)) {
      return null;
    }
    
    // 2. 메시지 유형 필터링
    if (message.type === "intermediate-result" && recipient !== "orchestrator") {
      return null; // 중간 결과는 오케스트레이터만 수신
    }
    
    // 3. 민감 정보 제거
    return this.sanitize(message, recipient);
  }
  
  private sanitize(message: AgentMessage, recipient: AgentRole): AgentMessage {
    // 수신자 역할에 불필요한 정보 제거
    const sanitized = { ...message };
    
    if (recipient === "tester") {
      // 테스터에게는 구현 세부사항 대신 인터페이스만 전달
      sanitized.content = extractInterfaces(message.content);
    }
    
    return sanitized;
  }
  
  private isChannelAllowed(channel: string): boolean {
    // 허용된 통신 채널만 통과
    return this.allowedChannels.has(channel);
  }
}

공유 컨텍스트: CLAUDE.md의 역할

멀티에이전트 환경에서 CLAUDE.md는 모든 에이전트의 공통 기반으로 작동합니다.

공유 vs 전용의 경계

공유 컨텍스트에 포함할 정보의 기준은 "두 개 이상의 에이전트에게 필요한가?"입니다.

정보공유전용
TypeScript strict, no any공유 (모든 코드 관련 에이전트)-
테스트 프레임워크 설정-테스터 전용
프로젝트 디렉토리 구조공유 (모든 에이전트)-
배포 절차-배포 에이전트 전용
Git 컨벤션공유 (커밋하는 모든 에이전트)-
리뷰 기준-리뷰어 전용

서브에이전트 컨텍스트 설계

Claude Code에서 서브에이전트(Subagent)는 메인 에이전트가 복잡한 작업을 분할하여 위임하는 하위 에이전트입니다.

서브에이전트에게 전달할 정보

subagent-context.ts
typescript
interface SubagentBrief {
  // 1. 명확한 역할 정의
  role: string;
  
  // 2. 구체적인 작업 지시
  task: {
    description: string;
    acceptanceCriteria: string[];
    constraints: string[];
  };
  
  // 3. 필요한 최소 컨텍스트
  context: {
    projectRules: string;    // CLAUDE.md (자동 로드)
    relevantFiles: string[]; // 작업에 필요한 파일 목록
    examples: string[];      // 유사 작업 예시
  };
  
  // 4. 사용 가능한 도구 제한
  allowedTools: string[];
  
  // 5. 결과 포맷 지정
  expectedOutput: {
    format: string;
    deliverables: string[];
  };
}

효과적인 위임 예시

subagent-delegation.txt
text
[메인 에이전트 -> 서브에이전트]
 
역할: src/auth/ 모듈의 단위 테스트 작성자
 
작업:
- src/auth/middleware.ts의 verifyToken 함수에 대한 단위 테스트 작성
- 기존 테스트 패턴을 따를 것 (src/auth/__tests__/ 참조)
- 엣지 케이스: 만료된 토큰, 잘못된 형식, 빈 토큰
 
완료 기준:
- 모든 테스트가 pnpm test 통과
- 커버리지 80% 이상
- 기존 테스트와 일관된 스타일
 
참조 파일:
- src/auth/middleware.ts (테스트 대상)
- src/auth/types.ts (타입 정의)
- src/auth/__tests__/jwt.test.ts (테스트 패턴 예시)
Warning

서브에이전트에게 "전체 코드베이스를 탐색하여 관련 파일을 찾으라"고 지시하는 것은 비효율적입니다. 메인 에이전트가 이미 파악한 관련 파일을 명시적으로 전달하는 것이 토큰 비용과 정확도 모두에서 유리합니다.

Agent Teams: 격리와 협력의 균형

2026년 초 도입된 Agent Teams 패턴은 격리와 협력 사이의 균형을 추구합니다.

기존 방식 vs Agent Teams

Agent Teams의 핵심 원칙은 다음과 같습니다.

  1. 격리된 윈도우: 각 에이전트는 독립적인 컨텍스트 윈도우를 가집니다
  2. 명시적 메시징: 에이전트 간 통신은 명시적 메시지를 통해서만 이루어집니다
  3. 공유 기반: CLAUDE.md와 같은 컨텍스트 파일은 모든 에이전트에 사전 로드됩니다
  4. 병렬 실행: 독립적인 작업은 동시에 실행됩니다

메시지 설계

에이전트 간 메시지는 최소한의 정보만 포함해야 합니다.

agent-message.ts
typescript
interface AgentMessage {
  from: AgentId;
  to: AgentId;
  type: "request" | "response" | "notification";
  
  // 핵심만 포함 (전체 컨텍스트가 아닌 결과물만)
  payload: {
    summary: string;       // 한 줄 요약
    artifacts?: string[];  // 생성/수정된 파일 경로
    decisions?: string[];  // 내린 결정사항
    blockers?: string[];   // 차단 요소
  };
}
Tip

Agent Teams에서 가장 흔한 실수는 에이전트 간 메시지에 너무 많은 컨텍스트를 포함하는 것입니다. 메시지는 "무엇을 했는가"와 "어떤 파일이 변경되었는가"만 전달하고, 세부 내용은 수신 에이전트가 파일을 직접 읽어서 파악하게 하는 것이 효율적입니다.

격리 설계 패턴 요약


요약

컨텍스트 격리는 멀티에이전트 시스템에서 각 에이전트의 효율과 정확도를 높이는 핵심 전략입니다. 모든 에이전트에게 동일한 전체 컨텍스트를 제공하는 것은 주의력 분산, 역할 혼동, 비용 낭비, 크로스 오염을 유발합니다.

효과적인 격리 설계는 공유 컨텍스트(CLAUDE.md)와 전용 컨텍스트(역할별 코드, 도구, 예시)를 분리하고, 에이전트 간 통신은 명시적 메시지로만 이루어지게 합니다. Agent Teams 패턴은 격리된 윈도우에서 병렬 실행하면서 명시적 메시징으로 협력하는 균형 잡힌 접근을 제공합니다.

다음 장에서는 지금까지 배운 이론을 실전 도구에 적용하는 컨텍스트 엔지니어링 도구와 기법을 다룹니다. Claude Code, Cursor, GitHub Copilot 각각에서 컨텍스트를 최적화하는 구체적 방법과, MCP 서버를 통한 컨텍스트 확장을 살펴봅니다.

이 글이 도움이 되셨나요?

관련 주제 더 보기

#ai#ai-agent#claude-code#llm

관련 글

AI / ML

8장: 컨텍스트 엔지니어링 도구와 기법

Claude Code, Cursor, GitHub Copilot에서 컨텍스트를 최적화하는 구체적 방법과, MCP 서버를 통한 동적 컨텍스트 확장 기법을 다룹니다.

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

6장: 컨텍스트 정렬과 포맷 최적화

어텐션 메커니즘과 위치 편향을 이해하고, 정보 배치 전략과 XML/마크다운/JSON 포맷 비교를 통해 컨텍스트 구조를 최적화합니다.

2026년 3월 18일·15분
AI / ML

9장: 컨텍스트 품질 측정과 개선

컨텍스트 엔지니어링의 효과를 정량적으로 측정하는 방법을 다룹니다. 태스크 성공률, 토큰 효율성, A/B 테스트, 컨텍스트 드리프트 감지를 분석합니다.

2026년 3월 24일·17분
이전 글6장: 컨텍스트 정렬과 포맷 최적화
다음 글8장: 컨텍스트 엔지니어링 도구와 기법

댓글

목차

약 18분 남음
  • 이 장에서 배우는 것
  • 왜 격리가 필요한가
  • 에이전트별 격리된 컨텍스트 윈도우
    • 1M 토큰 시대의 격리 전략
    • 컨텍스트 분배 설계
  • 크로스 오염 방지
    • 오염 발생 시나리오
    • 방지 전략
  • 공유 컨텍스트: CLAUDE.md의 역할
    • 공유 vs 전용의 경계
  • 서브에이전트 컨텍스트 설계
    • 서브에이전트에게 전달할 정보
    • 효과적인 위임 예시
  • Agent Teams: 격리와 협력의 균형
    • 기존 방식 vs Agent Teams
    • 메시지 설계
  • 격리 설계 패턴 요약
  • 요약