Claude Code, Cursor, GitHub Copilot에서 컨텍스트를 최적화하는 구체적 방법과, MCP 서버를 통한 동적 컨텍스트 확장 기법을 다룹니다.
Claude Code는 에이전트 탐색 방식을 기반으로 하면서, 다중 계층의 컨텍스트 시스템을 운영합니다.
Claude Code에서 CLAUDE.md는 모든 대화와 서브에이전트에 사전 로드되므로, 그 내용의 효율성이 전체 작업 품질에 직접 영향을 미칩니다.
# Project: Kreath Archive
## Commands
pnpm dev # dev server (port 3020, Turbopack)
pnpm build # production build (MUST pass)
pnpm lint # ESLint
## Critical Rules
1. TypeScript strict, NO 'any'
2. Components: function declarations (not arrow)
3. Styling: Tailwind + cn() only
4. No emojis anywhere
5. Korean 경어체 for content
## Structure
src/app/ - App Router pages
src/components/ - UI components (25+)
src/lib/ - Utilities, config
content/ - MDX content (tech, projects, books)
## Detailed Docs (read when needed)
- docs/architecture.md - Project structure, data flow
- docs/design-system.md - Colors, layout, animations
- docs/content-guide.md - Frontmatter, MDX components
- docs/conventions.md - TypeScript, CSS, Git conventionsClaude Code의 CLAUDE.md에서 가장 중요한 항목은 빌드 명령어와 절대 규칙입니다. Claude Code는 작업 후 빌드를 실행하여 검증하므로 빌드 명령어가 정확해야 하고, 절대 규칙은 코드 생성의 모든 과정에 영향을 미칩니다.
Claude Code의 에이전트 탐색 효율을 높이기 위한 기법들입니다.
// 1. 구체적인 파일 경로로 안내
// 나쁜 예: "인증 관련 코드를 수정해주세요"
// 좋은 예: "src/auth/middleware.ts의 verifyToken 함수를 수정해주세요"
// 2. 탐색 범위 제한
// 나쁜 예: "프로젝트에서 비슷한 패턴을 찾아주세요"
// 좋은 예: "src/components/ui/에서 Button.tsx와 비슷한 패턴을 찾아주세요"
// 3. 관련 파일 미리 언급
// 나쁜 예: "새 API 엔드포인트를 만들어주세요"
// 좋은 예: "src/app/api/users/route.ts를 참고하여
// src/app/api/posts/route.ts를 만들어주세요.
// 타입은 src/lib/types/post.ts를 사용합니다."Claude Code의 후크(Hooks) 시스템을 활용하면, 특정 이벤트 시 자동으로 컨텍스트를 보강할 수 있습니다.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"command": "echo '변경 전 반드시 pnpm build 통과 확인 필요'"
}
],
"PostToolUse": [
{
"matcher": "Write",
"command": "pnpm lint --quiet 2>&1 | head -20"
}
]
}
}Cursor는 IDE 환경의 이점을 활용하여 풍부한 암묵적 컨텍스트를 수집합니다.
@-멘션 전략적 활용: Cursor의 @-멘션은 단순 파일 참조를 넘어 다양한 소스를 지원합니다.
@src/auth/middleware.ts # 특정 파일
@src/auth/ # 전체 디렉토리
@web Next.js middleware # 웹 검색 결과
@docs express middleware # 문서 검색
@codebase authentication # 코드베이스 전체 검색Notepads 활용: Cursor의 Notepads 기능으로 재사용 가능한 컨텍스트 블록을 관리할 수 있습니다.
## API Route Pattern
이 프로젝트의 API 라우트는 다음 패턴을 따릅니다:
1. Zod로 입력 검증
2. 서비스 레이어에서 비즈니스 로직 처리
3. 일관된 에러 응답 형식
4. 타입 안전한 응답
참조: src/app/api/users/route.tsGitHub Copilot은 시맨틱 인덱스를 기반으로 자동 컨텍스트를 구성합니다.
@workspace 이 프로젝트에서 인증 미들웨어가 어떻게 구현되어 있는지 설명해주세요.
@workspace #file:src/auth/middleware.ts 이 파일의 verifyToken 함수를
JWT 라이브러리 v5로 마이그레이션해주세요.
@workspace /fix 타입 에러를 수정해주세요.16x Prompt는 단일 프롬프트에 최대한 많은 컨텍스트를 고밀도로 압축하여 전달하는 기법입니다.
[1. 역할 정의]
당신은 Next.js 16 + TypeScript 프로젝트의 시니어 개발자입니다.
[2. 프로젝트 컨텍스트]
프로젝트: 기술 블로그 + 포트폴리오 사이트
스택: Next.js App Router, Tailwind v4, MDX, Velite
구조: src/app(pages), src/components(ui), src/lib(utils), content(MDX)
[3. 현재 작업 대상]
파일: src/components/search/SearchBar.tsx
관련: src/lib/search.ts, src/components/ui/Input.tsx
[4. 기존 코드]
(현재 구현 코드)
[5. 구체적 요청]
검색 결과에 최근 검색 기록을 표시하는 기능을 추가해주세요.
- localStorage에 최근 5개 검색어 저장
- 개별 삭제와 전체 삭제 지원
- 기존 SearchBar의 스타일과 일관성 유지
[6. 제약사항]
- cn() 함수로 className 결합
- 이모지 사용 금지
- 접근성: 키보드 네비게이션 지원핵심은 하나의 메시지에 모델이 정확한 결과를 내기 위한 모든 정보를 포함하는 것입니다. 여러 번의 대화로 컨텍스트를 조금씩 추가하는 것보다, 한 번에 완전한 컨텍스트를 제공하는 것이 일관성 있는 결과를 만듭니다.
MCP(Model Context Protocol) 서버를 활용하면, 코드베이스 바깥의 정보를 컨텍스트에 동적으로 추가할 수 있습니다.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "project-context",
version: "1.0.0",
});
// 프로젝트 아키텍처 정보 제공
server.tool(
"get-architecture",
"프로젝트의 아키텍처 정보를 반환합니다",
{ module: z.string().optional().describe("특정 모듈명") },
async ({ module }) => {
if (module) {
return {
content: [{
type: "text",
text: await getModuleArchitecture(module),
}],
};
}
return {
content: [{
type: "text",
text: await getProjectArchitecture(),
}],
};
}
);
// 관련 이슈 정보 제공
server.tool(
"get-related-issues",
"현재 작업과 관련된 이슈 정보를 반환합니다",
{ filePath: z.string().describe("작업 중인 파일 경로") },
async ({ filePath }) => {
const issues = await findRelatedIssues(filePath);
return {
content: [{
type: "text",
text: formatIssues(issues),
}],
};
}
);
// DB 스키마 정보 제공
server.tool(
"get-db-schema",
"데이터베이스 테이블 스키마를 반환합니다",
{ tableName: z.string().describe("테이블명") },
async ({ tableName }) => {
const schema = await getTableSchema(tableName);
return {
content: [{
type: "text",
text: formatSchema(schema),
}],
};
}
);MCP 서버의 핵심 가치는 "필요할 때 필요한 정보를 동적으로 가져오는 것"입니다. 모든 정보를 사전에 컨텍스트에 넣는 것이 아니라, 에이전트가 작업 중 필요한 시점에 MCP 도구를 호출하여 가져오므로, 토큰 효율이 높습니다.
실전에서는 작업의 종류와 단계에 따라 컨텍스트를 동적으로 조립합니다.
interface ContextPipeline {
stages: ContextStage[];
}
interface ContextStage {
name: string;
condition: (task: Task) => boolean;
gather: (task: Task) => Promise<ContextBlock>;
}
const pipeline: ContextPipeline = {
stages: [
{
name: "project-rules",
condition: () => true, // 항상 포함
gather: async () => ({
content: await readFile("CLAUDE.md"),
priority: "critical",
}),
},
{
name: "target-code",
condition: (task) => task.type !== "question",
gather: async (task) => ({
content: await readFiles(task.targetFiles),
priority: "high",
}),
},
{
name: "dependencies",
condition: (task) => task.type === "modify" || task.type === "create",
gather: async (task) => ({
content: await extractInterfaces(task.dependencies),
priority: "medium",
}),
},
{
name: "tests",
condition: (task) => task.type === "modify",
gather: async (task) => ({
content: await findRelatedTests(task.targetFiles),
priority: "medium",
}),
},
{
name: "similar-code",
condition: (task) => task.type === "create",
gather: async (task) => ({
content: await findSimilarImplementations(task.description),
priority: "low",
}),
},
{
name: "error-context",
condition: (task) => task.type === "fix",
gather: async (task) => ({
content: await getErrorContext(task.errorInfo),
priority: "high",
}),
},
],
};
async function assembleContext(task: Task): Promise<Context> {
const blocks: ContextBlock[] = [];
for (const stage of pipeline.stages) {
if (stage.condition(task)) {
blocks.push(await stage.gather(task));
}
}
// 우선순위에 따라 정렬 (U자형 배치)
return orderByPriority(blocks);
}각 AI 코딩 도구는 고유한 컨텍스트 시스템을 가지고 있으며, 그 특성을 이해하고 활용하는 것이 컨텍스트 최적화의 핵심입니다. Claude Code는 CLAUDE.md와 에이전트 탐색, Cursor는 코드맵과 @-멘션, GitHub Copilot은 시맨틱 인덱스와 @workspace가 핵심 메커니즘입니다.
MCP 서버를 통한 컨텍스트 확장은 코드베이스 바깥의 정보(DB 스키마, 이슈 트래커, API 문서)를 동적으로 제공하며, 작업 유형별 동적 컨텍스트 조립 파이프라인으로 항상 최적의 컨텍스트를 구성할 수 있습니다.
다음 장에서는 이 모든 전략의 효과를 정량적으로 평가하는 컨텍스트 품질 측정과 개선 방법을 다룹니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
컨텍스트 엔지니어링의 효과를 정량적으로 측정하는 방법을 다룹니다. 태스크 성공률, 토큰 효율성, A/B 테스트, 컨텍스트 드리프트 감지를 분석합니다.
멀티에이전트 시스템에서 에이전트별 컨텍스트를 격리하고, 크로스 오염을 방지하며, 공유 컨텍스트를 효과적으로 관리하는 전략을 다룹니다.
시리즈 전체를 종합하여 실전 컨텍스트 엔지니어링 시스템을 구축합니다. CLAUDE.md 작성, MCP 서버 구현, 멀티에이전트 파이프라인, 측정 대시보드를 실습합니다.