이 문서는 Runna 백엔드에서 workspace와 namespace 이름에 대해 구현된 다층 sanitization 및 검증 시스템을 설명합니다. 이 시스템은 injection 공격에 대한 심층 방어(defense-in-depth) 보안을 제공하고 Kubernetes 호환성을 보장합니다.
┌─────────────────────────────────────────────────────────────┐
│ 사용자 입력 (HTTP Request) │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Layer 1: API 계층 (app/api/workspaces.py) │
│ - 첫 번째 방어선 │
│ - 사용자 입력을 즉시 sanitize │
│ - 빠른 피드백으로 UX 향상 │
│ - 실패 시 SANITIZATION_ERROR 반환 │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Service 계층 (app/services/workspace_service.py) │
│ - 비즈니스 로직 처리 (중복 체크 등) │
│ - 검증된 데이터를 신뢰 │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Layer 2: 모델 계층 (app/models/workspace.py) │
│ - 두 번째 (최종) 방어선 │
│ - SQLAlchemy @validates 데코레이터 │
│ - 데이터베이스 저장 직전 검증 │
│ - 데이터 무결성 보장 │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Infrastructure 계층 (app/core/namespace_manager.py) │
│ - 검증된 데이터를 신뢰 │
│ - 길이 검증만 수행 (63자 제한) │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Database / Kubernetes │
└─────────────────────────────────────────────────────────────┘
app/core/sanitize.py)모든 sanitization 및 검증 로직을 포함하는 중앙 모듈입니다.