2 min read
LLM Agent Tool Guardrail 설계
툴 호출 권한 범위와 실패 복구 전략을 정의해 에이전트 오작동을 줄이는 방법

도입
LLM Agent를 프로덕션에 올리면 모델 성능보다 도구 사용 통제가 먼저 문제로 드러난다. 에이전트가 외부 API와 내부 시스템을 호출할 때 권한, 입력 검증, 실행 한도 없이 열어두면 사고 가능성이 커진다. 이 글은 Tool Guardrail을 정책 계층으로 설계하는 방법을 설명한다.

문제 정의
에이전트 장애는 보통 잘못된 추론보다 잘못된 실행에서 발생한다.
- 툴 호출 전 파라미터 검증이 없어 비정상 요청이 그대로 전달된다.
- 민감 툴에 사용자 권한 컨텍스트가 전달되지 않는다.
- 연쇄 호출 제한이 없어 루프 실행으로 비용 폭증이 발생한다.
가드레일은 프롬프트가 아니라 런타임 정책으로 강제해야 한다. 모델 출력은 항상 불완전하다고 가정하는 것이 안전하다.
핵심 개념
| 관점 | 설계 기준 | 검증 포인트 |
|---|---|---|
| 입력 검증 | JSON Schema 기반 파라미터 체크 | invalid call 차단률 |
| 권한 제어 | 툴별 RBAC | 권한 위반 시도 탐지 |
| 실행 제한 | step/time/cost budget | 루프 실행 방지 |
| 감사 | tool call trace | 사후 재현 가능성 |
가드레일을 독립 컴포넌트로 두면 모델 교체 시에도 운영 정책을 유지할 수 있다. 이는 장기적으로 가장 큰 안정성 이점이다.
코드 예시 1: 툴 호출 검증 래퍼
import { z } from "zod";
const createTicketSchema = z.object({
title: z.string().min(5),
severity: z.enum(["low", "medium", "high"]),
owner: z.string().min(2),
});
export async function guardedCreateTicket(input: unknown, ctx: { roles: string[] }) {
const parsed = createTicketSchema.parse(input);
if (!ctx.roles.includes("support")) {
throw new Error("forbidden tool access");
}
return ticketClient.create(parsed);
}
코드 예시 2: 에이전트 실행 예산
export type AgentBudget = {
maxSteps: number;
maxToolCalls: number;
maxCostUsd: number;
};
export function enforceBudget(state: { steps: number; toolCalls: number; costUsd: number }, budget: AgentBudget) {
if (state.steps > budget.maxSteps) throw new Error("step budget exceeded");
if (state.toolCalls > budget.maxToolCalls) throw new Error("tool budget exceeded");
if (state.costUsd > budget.maxCostUsd) throw new Error("cost budget exceeded");
}
아키텍처 흐름
Mermaid diagram rendering...
트레이드오프
- 엄격한 가드레일은 안전하지만 에이전트 자율성이 줄어 작업 성공률이 떨어질 수 있다.
- 검증 레이어 추가로 지연이 증가하지만 잘못된 실행 비용을 크게 줄인다.
- 정책 세분화는 유연하지만 운영 관리 포인트가 늘어난다.
정리
LLM Agent 운영의 핵심은 모델 지능이 아니라 실행 통제다. 툴 호출을 정책 엔진으로 감싸고 예산을 강제하면 비용과 보안 리스크를 동시에 관리할 수 있다.
이미지 출처
- Cover: [source link](https://commons.wikimedia.org/wiki/File:US_Navy_071016-N-5208T-014_Members_of_Explosive_Ordinance_Disposal_Unit_(EODU)
- License: Public domain / Author: U.S. Navy photo by Mass Communication Specialist 1st Class Josh Treadwell
- Note: Wikimedia Commons 무료 라이선스 이미지를 다운로드 후 1600px 기준 JPG로 최적화했습니다.