AI 코딩 워크플로에 대체가 필요한 이유
실제 AI 코딩 프로세스에서 LLM이 외부 도구(예: 파일 읽기, 셸 명령 실행, API 쿼리 등)를 호출할 때 도구 접근 불가능, 매개변수 오류, 권한 부족, 시간 초과 등 여러 가지 이유로 함수 호출이 실패할 수 있습니다. 대체 전략이 없으면 단일 오류로 전체 워크플로가 중단되어 불완전한 결과가 발생하거나 임의 코드가 재생성될 수 있습니다. MCP(모델 컨텍스트 프로토콜)에서 제공하는 대체 호출 함수는 이러한 종류의 문제를 정확하게 해결하기 위한 것입니다. 기본 경로의 함수 호출이 오류를 반환하면 미리 정의된 백업 로직이 자동으로 트리거되어 워크플로가 직접 충돌하는 대신 계속 실행될 수 있도록 합니다.
대체 사용 시기: 세 가지 일반적인 시나리오
모든 함수 호출에 대체가 필요한 것은 아닙니다. 다음은 실제로 폴백을 구성해야 하는 세 가지 시나리오입니다.
시나리오 1: 외부 서비스에 의존하는 구성 단계
예를 들어 AI이 npm 패키지를 작성하는 경우 npm install을 호출하여 종속 항목을 설치해야 합니다. 네트워크 시간이 초과되거나 레지스트리를 사용할 수 없는 경우 대체에서는 전체 빌드 작업이 실패하는 대신 다른 레지스트리를 사용하거나 설치를 건너뛰고 기록하려고 시도할 수 있습니다. 내 프로젝트 중 하나에서 폴백이 구성되지 않았기 때문에 AI은 일시적인 네트워크 오류로 인해 불완전한 코드를 생성하여 전체 리팩토링 라운드를 낭비했습니다.
시나리오 2: 다단계 코드 검토 및 형식 지정
eslint --fix 또는 prettier는 AI가 자동으로 코드를 린트하고 형식을 지정할 때 호출될 수 있습니다. 명령 실행이 실패하는 경우(예: 구성 파일의 형식이 올바르게 지정되지 않은 경우) 폴백은 자동으로 기본 규칙으로 전환하거나 형식 지정 단계를 건너뛰고 후속 테스트 실행을 차단하는 대신 문제에 플래그를 지정할 수 있습니다.
시나리오 3: API 호출 다운그레이드
AI 문서 생성 시 함수 서명이나 주석을 얻기 위해 외부 API 호출이 이루어질 수 있습니다. API가 제한 중이거나 오류를 반환하는 경우 먼저 대체를 로컬 캐시 데이터로 대체하거나 사용자가 공백 또는 환각 콘텐츠를 출력하는 대신 수동으로 보완할 수 있습니다.

MCP의 함수 호출 폴백을 구성하는 방법
MCP 자체는 기본 제공 fallback 구성 필드를 제공하지 않지만 사용자 정의 도구 래퍼 기능을 통해 구현할 수 있습니다. 다음은 TypeScript를 기반으로 한 참조 구현입니다.

// MCP 도구 래퍼, 대체 추가
'mcp'에서 { createTool } 가져오기; // MCP SDK를 사용한다고 가정
비동기 함수 callWithFallback(
도구 이름: 문자열,
args: 레코드<문자열, 알 수 없음>,
대체: () => Promise<string>,
maxRetries = 1
): 약속<문자열> {
마지막 오류를 보자: 오류;
for (시도 = 0; 시도 <= maxRetries; 시도++) {
{를 시도해보세요
const 결과 = someMCPClient.callTool(toolName, args)를 기다립니다.
if (결과.isError) {
throw new Error(result.error || '도구에서 오류가 반환되었습니다.');
}
결과.내용[0].text를 반환합니다.
} 잡기(오류) {
lastError = 오류로 인한 오류;
if (시도 < maxRetries) {
// 단순 재시도
새로운 약속을 기다리세요((r) => setTimeout(r, 1000));
}
}
}
//모든 재시도 실패 후 대체 실행
대체()를 반환합니다.
}
// 도구 정의에 사용됨
const checkSyntaxTool = {
이름: 'check_syntax',
설명: 'tsc --noEmit를 사용하여 TypeScript 구문을 확인하세요',
매개변수: { ... },
실행: 비동기(args) => {
return callWithFallback('check_syntax', args, async () => {
// 대체: 더 느슨한 검사를 사용합니다.
return wait someMCPClient.callTool('check_syntax_lite', args);
});
},
};
핵심 사항:
- 각 도구 기능은 내부적으로 재시도 및 대체 논리를 구현합니다.
- 대체 기능은 도구의 또 다른 단순화된 버전을 호출하고, 기본값을 반환하고, 오류를 기록하거나, 사용자에게 메시지를 표시할 수 있습니다.
- 재시도 횟수와 백오프 전략은 도구의 특정 실패 모드에 따라 결정되어야 합니다.
문제가 발생하기 가장 쉬운 곳
실제 테스트에서 두 가지 고주파 오류를 발견했습니다.
- 폴백 호출이 다시 실패하여 무한 루프가 발생합니다. 대체 자체가 동일한 실패 경로를 사용하는 경우 무한히 재시도합니다. 해결 방법: 대체 시 기본 경로와 완전히 다른 도구나 순수 논리만 호출하고 전역 실패 횟수 상한을 추가하세요.
- LLM 컨텍스트 불일치는 무시됩니다. 대체가 트리거되면 LLM이 일부 상태(예: 코드의 일부)를 축적했을 수 있습니다. fallback에서 반환된 콘텐츠가 이전 상태와 일치하지 않으면 최종 출력이 혼란스러워집니다. 폴백에 컨텍스트 적응 논리를 추가하거나 LLM이 다음 단계를 다시 계획하도록 하는 것이 좋습니다.
대안 및 경계
애플리케이션 시나리오에서 폴백으로 인한 부정확성을 수용할 수 없거나 실패율이 매우 낮은 경우 폴백이 필요하지 않을 수 있습니다. 대안은 다음과 같습니다:
- 중복 호출: 두 개의 서로 다른 도구(예: 두 개의 코드 검사 도구)를 동시에 호출하여 가장 일관된 결과를 얻습니다.
- 사람의 개입: 실패 시 워크플로를 일시 중지하고 사용자 피드백을 기다립니다. 이는 매우 중요한 작업(예: 커밋 전 코드 검토)에 적합합니다.
- 이 단계 건너뛰기: 도구가 중요하지 않은 경우 이를 건너뛰고 기록하여 후속 단계를 계속할 수 있습니다.
MCP 폴백은 "실패를 다시 실행해야 하는" 최종 커밋 단계보다는 "실패를 복구할 수 있지만 중단할 수 없는" 중간 단계에 가장 적합합니다.
다음 단계: AI 코딩 워크플로 체계화
이미 MCP 대체 구성을 시도하고 있다면 AI 코딩의 최하위 단계에 진입했다는 의미입니다. 이러한 전략을 진정으로 안정적이고 재사용 가능하게 만들려면 워크플로 설계, 오류 처리 패턴 및 품질 관리에 대한 체계적인 이해가 필요합니다.

아직 댓글이 없습니다