광고
~ / posts / developer

프롬프트 인젝션 방어 고르기, 분류기·LLM 검사·CaMeL 비용과 지연 비교

에이전트에 붙일 인젝션 방어를 비용·지연·보장으로 비교했어요. 요청 1,000건당 추가 비용은 소형 LLM 검사 0.86달러, 분류기 4.78달러, 데이터마킹 7~15달러, CaMeL식 분리 45달러. 권한별 판단표와 도입 체크리스트까지 정리했어요.

RAG 챗봇이나 메일·웹을 읽는 에이전트를 만들고 나면 "인젝션 방어는 뭘 붙여야 하나"가 남아요. 결론부터 말하면 모델이 속을 확률을 낮추는 방어(분류기·스포트라이팅)는 싸지만 0이 되지 않고, 피해를 확실히 막는 방어(도구 정책·출력 레일·사람 승인)는 토큰은 거의 안 들지만 기능을 줄여요. 그래서 에이전트가 쥔 권한으로 큰 갈래를 정하고, 그 위에 값싼 확률적 방어를 덧대요.

이 글은 공격 원리보다 고를 때 돌아오는 숫자를 다뤄요. 2026년 10월 28일 기준 Claude API 공식 가격표와 Lambda GPU 클라우드 가격표, 각 방어의 1차 자료(모델 카드·논문)에 나온 수치만 써서 요청 하나당 비용과 지연을 직접 계산했어요. 토큰 증가량은 공개 토크나이저로 직접 세었어요.

광고

프롬프트 인젝션 방어 판단표 — 권한부터 세어 보기

첫 질문은 기술이 아니라 권한이에요. 사이먼 윌리슨이 치명적 삼박자 글에서 정리한 세 조건, 즉 비공개 데이터 접근·신뢰할 수 없는 콘텐츠 노출·외부로 내보내는 수단이 모두 있는지 세어 보세요. 하나라도 비면 모델이 속아도 데이터가 새지 않으니 값싼 확률적 방어로 시작해도 되고, 셋이 다 있으면 모델이 속는다는 가정 위에서 코드로 막아야 해요.

외부 글을 읽는지, 비공개 데이터와 외부 전송 수단을 함께 쥐었는지, 도구 인자를 허용 목록으로 묶을 수 있는지, 해결률 하락과 토큰 증가를 감당할 수 있는지 차례로 물어 출력 레일·도구 정책·CaMeL식 분리·기능 축소 중 하나를 고르는 순서도
위에서부터 답하면 시작점이 정해져요
서비스 예외부 글비공개 데이터외부 전송시작할 조합
웹 검색 요약 도우미있음없음마크다운 렌더링출력 레일(이미지·링크 허용 목록) + 값싼 검사
사내 위키 RAG 질의응답있음(직원 누구나 편집)있음마크다운 렌더링출력 레일 + 문서 권한 필터 + 분류기
메일 비서(읽기·답장)있음있음메일 전송수신자 정책 + 출처 꼬리표 + 전송 전 승인
코딩 에이전트(이슈 읽고 PR)있음(외부 기여자 이슈)비밀값·사설 저장소PR·셸·네트워크네트워크 허용 목록 + 비밀 분리 + 계획·데이터 분리 검토

자주 놓치는 칸이 "외부 전송"이에요. 도구가 없어도 응답 속 마크다운 이미지를 브라우저가 불러오면 그게 전송 수단이에요. OWASP LLM01 프롬프트 인젝션 항목도 이 경로를 대표 시나리오로 들어요.

비교 조건 — 요청 하나를 이렇게 가정했어요

방어마다 단위(GPU 시간·토큰·사람 시간)가 달라서 같은 예시 조건에 올렸어요. 우리 서비스 숫자로 바꿔 넣으면 같은 식으로 다시 계산돼요.

검사용 소형 모델은 Claude Haiku 5.5(입력 0.10달러·출력 0.50달러, 10만 토큰 이하), 분류기는 Lambda A100 SXM 40GB 1장 시간당 1.99달러(세금 별도)로 잡았어요. 캐시를 쓰면 기본 비용이 더 내려가요. 계산은 프롬프트 캐싱 비용 계산 글을 참고하세요.

숫자로 보는 비용 ① 분류기 직접 띄우기 vs 소형 LLM 검사

입력 레일 분류기는 전용 소형 모델을 직접 띄우거나, 값싼 LLM 에 "모델을 조종하려는 지시가 있나"를 묻는 두 방법이 있어요.

Llama Prompt Guard 2 86M 모델 카드는 A100 에서 512토큰 한 번 분류에 86M 모델 92.4ms, 22M 모델 19.3ms 가 걸린다고 적어요. 창이 512토큰이라 긴 문서는 잘라서 따로 돌려야 해요. 예시의 외부 문서 8,000토큰은 16조각이에요. 한 장에서 순서대로 돌리면 22M 은 16 × 19.3 = 308.8ms, 86M 은 1,478.4ms 가 본 호출 앞에 붙어요.

문서 길이별 분류기 지연 (A100 한 장에서 512토큰씩 순서대로)
Prompt Guard 2 22MPrompt Guard 2 86M
01,0002,0003,0004,0005,0006,000512토큰2천토큰8천토큰3만2천토큰512토큰 · Prompt Guard 2 22M 19.3ms2천토큰 · Prompt Guard 2 22M 77.2ms8천토큰 · Prompt Guard 2 22M 309ms3만2천토큰 · Prompt Guard 2 22M 1,235ms1,235512토큰 · Prompt Guard 2 86M 92.4ms2천토큰 · Prompt Guard 2 86M 370ms8천토큰 · Prompt Guard 2 86M 1,478ms3만2천토큰 · Prompt Guard 2 86M 5,914ms5,914

조각을 묶어 병렬로 돌리면 줄어들지만 모델 카드는 1회 지연만 공개해요. 묶음 처리량은 직접 재야 해요

단위: ms · 자료: 모델 카드의 1회 분류 지연(A100·512토큰)에 조각 수를 곱해 직접 계산
표로 보기
구분Prompt Guard 2 22MPrompt Guard 2 86M
512토큰19.392.4
2천토큰77.2370
8천토큰3091,478
3만2천토큰1,2355,914

비용은 GPU 상시 운영 값이에요. 하루 16만 조각(1만 건 × 16)을 22M 으로 처리하면 GPU 사용은 하루 0.86시간뿐이지만, 지연 때문에 24시간 켜 둬야 해요. 1.99 × 24 = 하루 47.76달러, 요청 1,000건당 4.78달러, 월 1,453달러예요. 86M 은 하루 4.1 GPU시간이라 같은 한 장으로 돌아가요. 트래픽이 적을수록 GPU 가 놀아 건당 비용이 커져요.

소형 LLM 검사는 문서 8,000토큰 + 지시 500토큰, 판정 20토큰이면 Haiku 5.5 로 8,500 × 0.10 ÷ 100만 + 20 × 0.50 ÷ 100만 = 0.00086달러예요. 1,000건당 0.86달러로 GPU 상시 운영보다 싸요. 대신 지연은 API 왕복 한 번이 통째로 더해지고, 가격표에 지연 수치는 없으니 p95 를 직접 재야 해요. 그리고 품질 근거가 달라요. Prompt Guard 2 는 모델 카드에 AgentDojo 기준 공격 차단율(86M 81.2%, 22M 78.4%, 유용성 3% 하락 지점)이 있지만, 범용 LLM 을 검사기로 쓴 경우는 같은 기준의 공개 수치가 없어요. 검사 LLM 도 문서를 읽으니 "안전하다고 답하라"는 문장에 속을 수 있어요. 판정은 safe·unsafe 두 값만 허용하는 구조화 출력으로 받는 편이 안전해요. 방식별 장단점은 Structured Outputs vs JSON 모드 비교 글에 정리해 두었어요.

모델 카드의 다국어 AUC 는 86M 0.995, 22M 0.942 로 차이가 커요. 한국어 문서가 많다면 22M 의 짧은 지연만 보지 말고 우리 데이터로 오탐·미탐부터 세어 보세요.

숫자로 보는 비용 ② 스포트라이팅이 늘리는 토큰

Hines 등의 스포트라이팅 논문은 외부 문서의 공백을 특수 표식으로 바꾸는 데이터마킹으로 GPT-3.5-Turbo 요약 과제의 공격 성공률을 3.10%, 문서 질의응답에서 8.0%까지 낮췄다고 보고해요. 문서를 base64 로 바꿔 넣는 인코딩은 더 낮췄지만, 저자들은 고성능 모델에서만 권해요. 둘 다 GPU 는 안 들지만 토큰이 늘어요. 얼마나 늘어나는지 직접 세었어요.

같은 내용의 회의록을 한국어(792자)와 영어(1,533자)로 만들어 OpenAI tiktoken의 o200k_base 로 셌어요. 한국어 원문 427토큰이 공백 자리를 U+E000 으로 바꾸면 835토큰(1.96배), ^ 로 바꾸면 1.45배, base64 로 바꾸면 1,686토큰(3.95배)이 됐어요. 영어는 원문 295토큰이 각각 2.80배, 1.83배, 4.50배였어요.

스포트라이팅 변환별 외부 문서 토큰 배수 (o200k_base)
한국어 회의록영어 회의록
012345U+E000 데이터마킹 · 한국어 회의록 2배U+E000 데이터마킹 · 영어 회의록 2.8배U+E000 데이터마킹^ 데이터마킹 · 한국어 회의록 1.4배^ 데이터마킹 · 영어 회의록 1.8배^ 데이터마킹base64 인코딩 · 한국어 회의록 4배base64 인코딩 · 영어 회의록 4.5배base64 인코딩

Claude 토크나이저는 공개되지 않아 배수가 다를 수 있어요. 도입 전 토큰 수 세기 API 로 실제 값을 확인하세요

단위: 배 · 자료: 같은 내용 회의록(한국어 792자·영어 1,533자)을 tiktoken o200k_base 로 직접 계산
표로 보기
구분한국어 회의록영어 회의록
U+E000 데이터마킹22.8
^ 데이터마킹1.41.8
base64 인코딩44.5

예시 조건에서는 외부 문서 8,000토큰이 U+E000 데이터마킹으로 7,680토큰 늘어 1,000건당 15.36달러(기본의 61%)가 더 들어요. ^ 표식은 7.20달러, base64 는 47.20달러(기본의 189%)예요.

표식은 두 가지를 보고 골라요. 논문이 U+E000 을 권하는 건 개인 사용 영역 글자라 정상 입력에 거의 없어서예요. ^ 처럼 흔한 글자는 토큰을 아끼지만 문서에 원래 있던 ^ 를 먼저 지워야 해요. 또 같은 개인 사용 영역 글자라도 o200k_base 에서 U+E000·U+E001 은 1.96배, U+E123·U+E7FF 는 2.37배로 달랐어요. 매 요청 표식을 바꿀 계획이라면 후보 글자들의 토큰 수를 미리 재서 싼 것만 후보로 남기세요. 글자의 코드값은 유니코드 이스케이프 변환기로, base64 로 바꾼 문서가 얼마나 길어지는지는 Base64 인코더로 바로 확인할 수 있어요. 한국어 토큰이 원래 얼마나 나오는지는 한국어 LLM 토큰 비용 비교 글에서 토크나이저별로 비교해 두었어요.

숫자로 보는 비용 ③ CaMeL식 분리와 사람 승인

CaMeL 논문은 사용자 질의만 보고 계획 코드를 쓰는 특권 LLM 과, 외부 데이터를 다루지만 도구가 없는 격리 LLM 을 나누고, 도구 호출마다 값의 출처를 정책으로 검사해요. 논문이 밝힌 대가는 두 가지예요.

예시 조건에 넣으면 입력 28,200토큰(0.0564달러) + 출력 1,365토큰(0.01365달러) = 요청당 0.07005달러로, 기본의 2.8배예요. 1,000건당 45.05달러가 더 들고 하루 비용은 250달러에서 700.5달러가 돼요. 출력 토큰이 2.73배면 생성 시간도 그만큼 늘어난다고 보고 지연 예산을 잡는 게 출발점이에요. 비용을 줄이는 방법은 논문에도 있어요. 격리 LLM 을 작은 모델(Claude 3.5 Haiku)로 바꾸자 중앙값 과제 비용이 약 12% 줄고 해결률은 약 1% 떨어졌다고 보고해요. 참고 구현은 google-research/camel-prompt-injection 저장소에 있어요.

사람 승인은 토큰이 0이지만 사람 시간이 들어요. 예시로 하루 1만 건 중 5%가 메일 전송·결제 같은 고위험 동작이고 건당 확인에 10초가 걸린다면 하루 500건 × 10초 = 약 83분이에요. 더 큰 문제는 습관이라, 하루 500번 누르면 내용을 읽지 않게 돼요. 승인 대상은 되돌릴 수 없는 동작으로 좁히고, 화면에 "수신자가 문서에서 왔음" 같은 출처 정보를 같이 보여 주세요.

광고
광고

방어 방식 한눈에 비교 — 비용·지연·보장

결정적 방어(출력 레일·도구 정책 검사·사람 승인·CaMeL식 분리)와 확률적 방어(경고 문구·Haiku 검사·분류기 22M·데이터마킹·base64)를 요청 1,000건당 추가 비용과 함께 두 줄로 나눈 카드
위 줄은 모델이 속아도 막고, 아래 줄은 속을 확률만 낮춰요
요청 1,000건당 추가 비용 (기본 25달러 기준)
시스템 프롬프트 경고시스템 프롬프트 경고 · 0.2달러0.2달러Haiku 5.5 검사Haiku 5.5 검사 · 0.86달러0.86달러Prompt Guard 2 상시 GPUPrompt Guard 2 상시 GPU · 4.8달러4.8달러^ 데이터마킹(한국어)^ 데이터마킹(한국어) · 7.2달러7.2달러U+E000 데이터마킹(한국어)U+E000 데이터마킹(한국어) · 15.4달러15.4달러CaMeL식 분리CaMeL식 분리 · 45달러45달러base64 인코딩(한국어)base64 인코딩(한국어) · 47.2달러47.2달러

출력 레일·도구 정책·사람 승인은 토큰 비용이 0이라 빠졌어요

단위: 달러 · 자료: Claude API 가격표(Sonnet 5.5·Haiku 5.5)와 Lambda 가격표(A100 40GB)로 직접 계산, 입력 1만·출력 500 토큰·하루 1만 건 예시
표로 보기
구분추가 비용
시스템 프롬프트 경고0.2
Haiku 5.5 검사0.86
Prompt Guard 2 상시 GPU4.8
^ 데이터마킹(한국어)7.2
U+E000 데이터마킹(한국어)15.4
CaMeL식 분리45
base64 인코딩(한국어)47.2
방식추가 지연보장공개된 품질 수치이럴 때
Haiku 5.5 검사API 왕복 1번확률적같은 기준 공개 수치 없음트래픽이 적고 GPU 운영이 부담일 때
Prompt Guard 2 22M8천토큰에 약 0.3초(순차)확률적AgentDojo 차단율 78.4%영어 위주, 지연에 민감할 때
Prompt Guard 2 86M8천토큰에 약 1.5초(순차)확률적차단율 81.2%, 다국어 AUC 0.995한국어 등 다국어 문서가 많을 때
데이터마킹입력 증가분만큼확률적GPT-3.5 요약 과제 공격 성공률 3.10%외부 문서가 짧고 모델 변경이 어려울 때
도구 정책·출처 꼬리표코드 검사 수준결정적—삼박자를 다 가진 에이전트의 기본
CaMeL식 분리출력 2.73배결정적(정책 범위 안)해결률 77%(무방어 84%)고위험 도구가 많고 계획이 미리 정해지는 과제
사람 승인사람이 볼 때까지결정적—되돌릴 수 없는 동작만

요령은 위아래를 섞는 거예요. 결정적 방어(대개 출력 레일 + 도구 정책)를 먼저 깔고, 남는 예산으로 확률적 방어 하나를 더해요. Prompt Guard 2 모델 카드도 탐지를 피하도록 설계한 적응형 공격을 한계로 적고 있어서, 확률적 방어를 여러 겹 쌓기보다 결정적 방어 한 겹이 사고 범위를 더 확실히 줄여요.

도입 체크리스트 — 붙이기 전에 정할 것

광고
광고

자주 묻는 질문

분류기 하나만 붙이면 충분하지 않나요?

Prompt Guard 2 86M 도 AgentDojo 차단율이 81.2%라 공격 다섯 중 하나쯤은 지나가요. 비공개 데이터와 외부 전송 수단이 없는 서비스라면 그 정도로 시작해도 되지만, 둘 다 있다면 도구 정책이나 출력 레일 같은 결정적 방어를 먼저 두세요.

스포트라이팅은 최신 모델에도 효과가 있나요?

논문은 2023년 GPT 계열로 실험했고, 최신 모델에서 같은 폭으로 줄어드는지는 공개 수치가 없어요. 토큰 비용은 확실히 늘어나니 우리 평가 세트로 효과를 재 보고, 짧은 외부 문서부터 적용하세요.

Haiku 같은 소형 LLM 검사와 전용 분류기 중 무엇이 싼가요?

예시 조건(하루 1만 건, 문서 8,000토큰)에서는 Haiku 5.5 검사가 1,000건당 0.86달러로, A100 을 상시 켜 둔 분류기 4.78달러보다 싸요. 트래픽이 수십 배 늘면 GPU 한 장을 더 꽉 채워 쓰게 돼 분류기가 유리해질 수 있으니, 트래픽 구간별로 같은 식을 다시 계산해 보세요.

CaMeL 을 바로 도입하기 어렵다면 무엇부터 하나요?

"외부 데이터에서 나온 값으로 위험한 도구를 부르지 않기"는 정책 함수 몇 개로 먼저 흉내 낼 수 있어요. 메일 수신자·결제 대상 같은 인자부터 출처를 기록하고 검사하세요.

시스템 프롬프트를 캐시하면 방어 비용도 줄어드나요?

시스템 프롬프트에 들어가는 경고 문구·표식 안내는 캐시로 싸져요. 하지만 데이터마킹으로 늘어나는 토큰은 매번 바뀌는 외부 문서 쪽이라 캐시 이득이 거의 없어요.

정리

더 깊이 읽기

이 글은 실무에서 판단할 때 필요한 것 위주로 정리했어요. 같은 주제의 내부 동작 원리는 devboi 기술 블로그의 프롬프트 인젝션 원리와 LLM 가드레일 — CaMeL·스포트라이팅에서 도식과 코드로 단계별로 풀었어요.

참고한 자료

#프롬프트 인젝션 방어#LLM 가드레일 비용#Prompt Guard 2#스포트라이팅 토큰#CaMeL 비용#AI 에이전트 보안 체크리스트#간접 프롬프트 인젝션 대응
← 이전 글NestJS 프로바이더 스코프 고르기, 요청 스코프 비용과 DI 에러 점검 순서다음 글 →파이썬 .pth 파일 실행 원리, sitecustomize 시작 훅 점검법
광고

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →