22. 비용·토큰 관리와 보안
- 토큰이 비용으로 이어지는 구조와 절감 전략을 안다
- 모델 차등 배치로 비용·품질을 동시에 잡는 법을 익힌다
- 에이전트의 주요 보안 위협(프롬프트 인젝션·코드 실행)을 종합한다
- 방어 원칙(최소 권한·승인·샌드박스)을 체계적으로 정리한다
비유로 시작하기: 택시 미터기
에이전트를 돌리는 것은 미터기가 켜진 택시를 타는 것과 같습니다. 가만히 있어도 토큰이 쌓이고, 멀리 돌수록(반복이 많을수록) 요금이 오릅니다. 프로토타입에서는 몇 푼이지만, 하루 수천 건을 처리하는 프로덕션에서는 큰돈이 됩니다. 비용 감각 없이 멀티 에이전트를 남발하면 청구서가 폭발합니다.
토큰이 비용이 되는 구조
3장에서 봤듯 비용은 입력 토큰 + 출력 토큰에 비례합니다. 에이전트에서 토큰이 특히 불어나는 지점을 알아두면 절감 포인트가 보입니다.
flowchart TB
classDef cost fill:#EF9A9A,stroke:#C62828,color:#000
A[메모리 누적<br/>매 턴 전체 기록 재전송]:::cost
B[도구 결과<br/>긴 검색·코드 출력]:::cost
C[멀티 에이전트<br/>에이전트마다 LLM 호출]:::cost
D[루프 반복<br/>도구 호출 왕복]:::cost
E[(토큰 비용 증가)]
A --> E
B --> E
C --> E
D --> E
비용 절감 전략
| 전략 | 방법 | 관련 장 |
|---|---|---|
| 메모리 관리 | 윈도우·요약으로 기록 압축 | 4·13·20장 |
| 모델 차등 배치 | 단순 단계는 싼 모델, 어려운 단계만 강한 모델 | 9·16장 |
| 반복 제한 | Max Iterations / recursion_limit | 12·19장 |
| 가드레일 | 값싼 모델로 부적절 요청 조기 차단 | 9장 |
| 캐싱 | 반복되는 입력 결과 재사용 | — |
| 멀티에이전트 절제 | 정말 필요할 때만 분업 | 1·8장 |
📌 핵심: 가장 큰 레버는 모델 차등 배치입니다. 분류·정제·라우팅 같은 단순 작업에 최상위 모델을 쓰는 것은 낭비입니다. 9장 가드레일(값싼 모델로 선별), 14장 매니저(Hierarchical은 매니저 호출 비용 추가), 16장 데이터 크루(단계별 모델 차등)가 모두 이 원칙의 적용입니다.
# 예: 단계별 모델 차등 (의사 코드) classifier = Agent(model="gpt-4o-mini") # 싸고 빠른 분류 deep_reasoner = Agent(model="gpt-4o") # 어려운 추론만 강한 모델
💡 팁: CrewAI Hierarchical, AutoGen식 토론, CrewAI Consensual처럼 "에이전트가 서로 호출/토론"하는 구조는 토큰이 빠르게 불어납니다. 단계가 명확하면 Sequential이 30~50% 저렴합니다(15·16장 참고). "이 협업이 정말 비용만큼 가치 있나?"를 자문하세요.
보안: 에이전트의 3대 위협
에이전트는 도구로 외부와 상호작용하고, 때로 코드를 실행하며, 자율적으로 행동합니다. 그만큼 위협 표면이 넓습니다. 강좌 전반에서 짚은 위협을 종합합니다.
1) 프롬프트 인젝션
18장에서 본 핵심 위협입니다. 에이전트가 처리하는 외부 콘텐츠(웹페이지·이메일·문서)에 악의적 지시가 숨어, 에이전트가 의도치 않은 행동을 하게 만듭니다.
flowchart LR
classDef bad fill:#EF9A9A,stroke:#C62828,color:#000
classDef agent fill:#80DEEA,stroke:#00838F,color:#000
W[외부 콘텐츠<br/>숨은 악의적 지시]:::bad --> A[에이전트]:::agent
A --> X[의도치 않은 행동<br/>데이터 유출 등]:::bad
2) 안전하지 않은 코드 실행
16장에서 경고했듯, LLM이 생성한 코드를 그대로 exec하면 시스템이 위험에 노출됩니다. 데이터사이언스 크루처럼 코드 실행이 필요한 경우 특히 주의해야 합니다.
3) 과도한 권한
에이전트에 필요 이상의 권한(전체 DB 쓰기, 결제, 파일 삭제)을 주면, 오작동이나 공격 시 피해가 커집니다.
방어 원칙
| 원칙 | 적용 |
|---|---|
| 최소 권한 | 꼭 필요한 도구·권한만 부여. 읽기 전용으로 충분하면 쓰기 금지 |
| 샌드박스 | LLM 생성 코드는 격리된 컨테이너에서만 실행 |
| 휴먼 승인 | 되돌릴 수 없는 작업은 사람이 확인 (13·18·20장) |
| 신뢰 경계 | 신뢰할 수 없는 MCP 서버·외부 콘텐츠를 경계 |
| 출력 가드레일 | 민감 정보 유출을 출력 단계에서 차단 (9장) |
| 인증·격리 | 서버 접근에 토큰, 세션·사용자 분리 |
📌 핵심: 보안은 한 가지 장치가 아니라 겹겹의 방어(defense in depth)입니다. 최소 권한으로 피해 범위를 줄이고, 샌드박스로 실행을 격리하고, 승인으로 위험 행동을 게이트하고, 가드레일로 입출력을 검사합니다. 어느 하나가 뚫려도 다음 층이 막습니다.
⚠️ 흔한 실수: 개발 편의를 위해 에이전트에 광범위한 권한을 주고 "나중에 조이자"고 미루는 것. 권한은 처음부터 최소로 시작해 필요할 때 넓히는 편이 안전합니다.
💡 팁: 자율 에이전트일수록 "무엇을 할 수 있는가"보다 "무엇을 할 수 없게 막았는가"가 중요합니다. 능력의 상한과 안전장치를 함께 설계하세요.
이 장에서 배운 것
- 비용은 토큰에 비례하며, 메모리 누적·도구 결과·멀티에이전트·루프 반복에서 불어난다.
- 가장 큰 절감 레버는 모델 차등 배치다. 단순 단계는 싼 모델, 어려운 단계만 강한 모델.
- 에이전트의 3대 위협은 프롬프트 인젝션·안전하지 않은 코드 실행·과도한 권한이다.
- 방어는 겹겹의 층(최소 권한·샌드박스·승인·신뢰 경계·가드레일)으로 설계한다.
✍️ 확인 문제
- 분류·정제 같은 단순 단계에 최상위 모델을 쓰는 것이 낭비인 이유와, 더 나은 배치 방법은?
- LLM이 생성한 코드를 안전하게 실행하기 위한 핵심 장치는 무엇인가?
- "겹겹의 방어"란 무엇이며, 에이전트 보안에서 이를 구성하는 층을 3가지 이상 들어라.
이전 장: 21. 효과적인 프롬프팅과 컨텍스트 관리
다음 장: 23. 트러블슈팅과 프레임워크 선택 가이드