인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
배포 및 운영 · SKILL.md

saas-developer

saas-developer

Use when implementing SaaS application features — tenant-aware middleware and request context, multi-tenant database queries (Django/Flask/FastAPI with SQLAlchemy), tenant-scoped API endpoints, webhook delivery systems, background job processing per tenant, email and notification systems, file storage isolation (S3 prefix per tenant), caching strategies (Re…

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: saas-developer description: Use when implementing SaaS application features — tenant-aware middleware and request context, multi-tenant database queries (Django/Flask/FastAPI with SQLAlchemy), tenant-scoped API endpoints, webhook delivery systems, background job processing per tenant, email and notification systems, file storage isolation (S3 prefix per tenant), caching strategies (Redis key namespacing), testing multi-tenant code, and deployment patterns (blue-green, canary per tier). Complements saas-architecture with hands-on code. Part of the saas-* skill family.

SaaS Developer Patterns

Reference Files

Detailed code examples, patterns, and configuration are in the reference files below. Read the relevant file when working on that area.

FileCovers
api-jobs-webhooks.mdtenant-scoped API endpoints, background job processing per tenant, webhook delivery systems
email-storage-testing-deploy.mdemail/notification systems, file storage isolation, caching strategies, testing multi-tenant code, and deployment patterns
tenant-context-database.mdtenant context middleware, multi-tenant database layer with SQLAlchemy, row-level security

Anti-Patterns

Don'tDo Instead
Pass tenant_id as function parameter through 15 layersUse contextvars — set once in middleware, read anywhere
Cache with keys like project:123 (no tenant prefix)Always tenant:{tid}:project:123 — prevents cross-tenant cache reads
Run Celery tasks without tenant context propagationUse TenantTask base class that injects/restores tenant from headers
Generate pre-signed S3 URLs without validating key prefixAlways verify the key starts with tenant-{tenant_id}/ before signing
Use KEYS * in Redis for tenant key operationsUse SCAN with cursor — KEYS blocks Redis on large datasets
Run all tenant schema migrations seriallyParallelize with bounded concurrency (5-10 at a time)
Write tests that share a single hardcoded tenant_idEach test gets a fresh uuid4() tenant_id via fixture
Deploy new features to all tenants simultaneouslyCanary by tier: internal, then starter, then pro, then enterprise
Store uploaded files at user-chosen pathsSanitize filenames, prepend UUID, enforce tenant prefix
Let one tenant's failed webhook retries consume the entire retry queueUse per-tenant or per-endpoint retry budgets with circuit breakers
저장한 Skills