Урок 2: архитектура ИИ-продукта — три границы, которые защищают ваше приложение
Взятый из жизни сценарий: стартап получает от Anthropic счёт на 14 000 долларов в месяц — потому что API-ключ был в React-бандле. Правильные архитектурные границы — это не просто «лучшая практика», это то, что отличает продакшен-проект от уязвимого.
Архитектурная граница — как запертая дверь. По одну сторону — пользователь. По другую — конфиденциальные данные. Ключ всегда остаётся за дверью.
- граница аутентификации (auth boundary)
- Граница между анонимными запросами (anon key) и аутентифицированными запросами (JWT). После этой границы пользователь идентифицирован.
- граница данных (data boundary)
- Граница, где RLS обеспечивает, кто может видеть какие данные, — на уровне базы данных, а не на уровне React.
- граница ИИ (AI boundary)
- Граница, защищающая API-ключи LLM. Ключи Anthropic/Gemini должны оставаться на стороне сервера (Supabase edge function) — никогда в React.
- anon key
- Публичный ключ Supabase, который разрешает неаутентифицированные операции. Безопасен для хранения на клиенте, потому что данные защищает RLS.