
규제 산업의 엔지니어를 위한 LLM API의 제로 데이터 보존 설정에 대한 선별된 가이드입니다. 제공업체별 ZDR 엔드포인트, 위협 모델, 규정 준수 매핑 및 자체 호스팅 패턴을 다룹니다.
최종 업데이트: 2026년 4월
LLM API 사용 시 데이터 프라이버시를 유지하는 실용적인 가이드입니다. 규제 산업의 엔지니어를 위해 제로 보존 엔드포인트, 자체 호스팅, 규정 준수 요구 사항 및 데이터 보호 패턴을 다룹니다.
"제로 보존"은 단일 기능이 아닌 기술적 제어 + 계약 조건의 묶음으로, 고객 콘텐츠(프롬프트, 출력, 파일)가 벤더에 의해 저장되지 않도록 보장합니다. 다양한 접근 방식은 서로 다른 트레이드오프를 제공합니다:```mermaid flowchart TD Start(["Need Private AI?"]) --> Q1{"Can you\nself-host?"}
Q1 -->|"Yes, have GPUs"| SH["Self-Host Open Weights\n(Llama 4 · DeepSeek · Mistral · Qwen)"]
Q1 -->|"Yes, CPU only"| OL["Ollama + Quantized Models\n(7B–14B on consumer hardware)"]
Q1 -->|No| Q2{"Need frontier\nmodel quality?"}
Q2 -->|Yes| Q3{"Regulatory\nrequirements?"}
Q2 -->|No| Q4{"Budget\nconstrained?"}
Q3 -->|"HIPAA / FedRAMP"| Cloud["Azure OpenAI · AWS Bedrock\n+ Private Endpoints + BAA"]
Q3 -->|"Multi-provider"| GW["OpenRouter · Cloudflare AI Gateway\nwith ZDR routing"]
Q3 -->|"Single provider OK"| Direct["Direct ZDR Contract\n(OpenAI · Anthropic · Google)"]
Q4 -->|Yes| Budget["Fireworks · Together AI\n(open-weights, low cost, ZDR included)"]
Q4 -->|"Not really"| Fast["Groq · Fireworks · Together\nZDR toggle in dashboard"]
style Start fill:#4a90d9,stroke:#2c5f8a,color:#fff
style SH fill:#2ecc71,stroke:#1a9c54,color:#fff
style OL fill:#2ecc71,stroke:#1a9c54,color:#fff
style Cloud fill:#e67e22,stroke:#b3611a,color:#fff
style GW fill:#9b59b6,stroke:#7a3d92,color:#fff
style Direct fill:#3498db,stroke:#2471a3,color:#fff
style Budget fill:#1abc9c,stroke:#148f77,color:#fff
style Fast fill:#1abc9c,stroke:#148f77,color:#fff
### 접근 방식 비교
| 접근 방식 | 프라이버시 강도 | 모델 품질 | 운영 비용 | 설정 복잡성 |
| :--- | :--- | :--- | :--- | :--- |
| **셀프 호스팅 (air-gapped)** | 가장 강력 | Open-weight 전용 | 하드웨어 + 운영 | 높음 |
| **셀프 호스팅 (VPC)** | 매우 강력 | Open-weight 전용 | 클라우드 GPU 비용 | 중간 |
| **클라우드 ZDR + Private Link** | 강력 (계약 기반) | 프론티어 모델 | API 가격 | 낮음-중간 |
| **SaaS ZDR API** | 양호 (계약 기반) | 프론티어 모델 | API 가격 | 낮음 |
| **ZDR 라우팅 게이트웨이** | 양호 (위임) | 다중 제공업체 | API + 게이트웨이 수수료 | 낮음 |
---
## 위협 모델
접근 방식을 선택하기 전에 무엇으로부터 보호할지 이해하세요:
| 위협 | 설명 | 완화 방법 |
| :--- | :--- | :--- |
| **훈련 데이터 유출** | 프롬프트/출력이 제공업체 모델 훈련에 사용됨 | ZDR 계약, API 티어(무료 티어 아님), 셀프 호스팅 |
| **악용 모니터링 보존** | 제공업체가 안전 검토를 위해 프롬프트 저장(보통 30일) | ZDR/MAM 옵트아웃, 셀프 호스팅 |
| **직원 접근** | 제공업체 직원이 사고 대응 중 데이터 열람 가능 | ZDR + BYOK 암호화, 셀프 호스팅 |
| **소환장/법적 증거 제출** | 데이터에 대한 정부 또는 법적 요청 | 셀프 호스팅, 데이터 상주 통제, 무보존 계약 |
| **제공업체 침해** | 제공업체 시스템 침해, 데이터 유출 | 무보존(훔칠 것이 없음), 셀프 호스팅, 저장 암호화 |
| **자체 로깅** | 자체 인프라(프록시, APM, 오류 추적기)가 민감한 프롬프트 기록 | DLP 프록시, 로그 수정, 파이프라인 감사 |
| **프롬프트 인젝션 유출** | 악의적 입력으로 LLM이 도구 호출을 통해 데이터 유출 | 출력 스캔, 최소 권한 도구, 샌드박싱 |
### 데이터 생애주기: 프롬프트가 이동하는 경로```mermaid
flowchart LR
User["User Input"] --> App["Your App"]
subgraph YourInfra["Your Infrastructure"]
App --> Logs1["App Logs ⚠️"]
App --> DLP["DLP / PII Proxy"]
DLP --> GW["API Gateway"]
GW --> Logs2["Gateway Logs ⚠️"]
end
subgraph Provider["LLM Provider"]
GW --> Inference["Model Inference\n(in-memory)"]
Inference --> Abuse["Abuse Monitor\n(0–30 day retention)"]
Inference --> Training["Model Training\n(opt-out or ZDR)"]
end
Inference --> Response["Response"]
Response --> App
style Logs1 fill:#e74c3c,stroke:#c0392b,color:#fff
style Logs2 fill:#e74c3c,stroke:#c0392b,color:#fff
style Abuse fill:#f39c12,stroke:#d68910,color:#fff
style Training fill:#e74c3c,stroke:#c0392b,color:#fff
style DLP fill:#2ecc71,stroke:#1a9c54,color:#fff
style Inference fill:#3498db,stroke:#2471a3,color:#fff
빨간색 = 데이터가 보관될 수 있는 위험 지점. 초록색 = 보호 계층. ZDR은 공급자 측 위험을 제거하고, DLP/프록시는 사용자 측 위험을 제거합니다.
store 매개변수는 요청에서 true로 설정하더라도 항상 false로 처리됩니다.store 매개변수는 작동 상태로 유지 — 데이터 보존은 필요하지만 모니터링은 줄이려는 조직용ZDR 허용 엔드포인트:
/v1/chat/completions, /v1/responses, /v1/images/*, /v1/embeddings, /v1/audio/*, /v1/moderations, /v1/completions, /v1/realtime
ZDR 미허용:
Assistants API (/v1/assistants, /v1/threads, /v1/vector_stores), Conversations API, Files, Fine-tuning, Batches, Evals, Background mode (/v1/responses with background: true), Hosted containers (Code Interpreter)
추가 제어:
eu.api.openai.com), AU(au.api.openai.com)에 사용 가능 — ZDR 수정안 필요, 비용 10% 인상curl https://api.openai.com/v1/chat/completions
-H "Authorization: Bearer $OPENAI_API_KEY"
-H "Content-Type: application/json"
-d '{
"model": "gpt-4o",
"store": false,
"messages": [{"role": "user", "content": "Hello"}]
}'
---
### Anthropic
> [공식 문서: 개인정보 보호 센터](https://privacy.claude.com/en/articles/8956058-i-have-a-zero-data-retention-agreement-with-anthropic-what-products-does-it-apply-to) · [데이터 보관](https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data)
- **제어 이름**: ZDR 계약
- **기본 보관 기간**: API 입력/출력은 **7일** 동안 보관(2025년 9월 30일에서 단축) 후 자동 삭제. **모델 학습에 절대 사용되지 않음** — 일률적인 정책, 옵트아웃 불필요
- **ZDR 활성화 방법**: 엔터프라이즈 영업을 통한 계약 부록. Anthropic 승인 필요
- **ZDR 적용 대상**: 적격 Anthropic API + 상업 조직 API 키를 사용하는 제품(Claude Code 포함)
- **ZDR 미적용**: Claude Free, Pro, Max 소비자 요금제; 소비자 Claude Code 계정
**주의사항:**
- 사용자 안전 분류기 결과는 ZDR 하에서도 보관됨(사용 정책 시행을 위해)
- 데이터는 법률 준수 또는 오용 방지가 필요한 곳에 저장될 수 있음
- HIPAA(BAA) 고객은 기능 제한이 있음(예: 웹 검색 제외)
- **BYOK**(자체 키 가져오기) 암호화 기능 2026년 상반기 출시 예정```python
import anthropic
client = anthropic.Anthropic() # Uses ANTHROPIC_API_KEY env var
# ZDR is org-level. No special per-request parameter needed.
# If your org has ZDR enabled, all API calls are covered.
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}]
)