Стек — это не список модных технологий
Полезный технологический стек начинается с распределения ответственности. Интерфейс должен быстро показывать данные и помогать человеку выполнять задачу. Сервер обязан защищать бизнес-правила, работать с интеграциями и сохранять состояние. База данных обеспечивает целостность, а инфраструктура — повторяемый запуск и наблюдаемость.
В моём стеке эти роли разделены явно. Java 21 и Spring Boot отвечают за серверную логику, React и TypeScript — за интерфейс, PostgreSQL — за основные данные, Redis — за быстрый кэш и временные состояния. Docker, Nginx и автоматические пайплайны превращают код в контролируемый релиз.
Java 21 и Spring Boot на стороне сервера
Java 21 даёт современный язык, производительную JVM и долгосрочную поддержку. Виртуальные потоки упрощают работу с большим количеством параллельных операций, а записи и улучшенное сопоставление с образцом делают код компактнее. Spring Boot добавляет конфигурацию, безопасность, доступ к данным и готовность к мониторингу.
Сервер остаётся единственным источником правды для цен, скидок, ролей и статусов. Даже если интерфейс будет заменён, бизнес-правила продолжат работать через API. Это снижает связанность и позволяет подключать мобильное приложение, партнёрский кабинет или внешнюю CRM без копирования логики.
React и TypeScript для интерфейса
React хорошо подходит для интерфейсов, где данные меняются без полной перезагрузки: кабинетов, каталогов, аналитики и административных панелей. Компоненты позволяют собрать единый визуальный язык и повторно использовать проверенные сценарии. TypeScript добавляет контракты и раньше обнаруживает несовпадение данных между API и экраном.
Для публичных страниц я использую серверный рендеринг и семантический HTML. Это помогает SEO и ускоряет первый показ. Интерактивные части подключаются поверх готового контента. Пользователь получает быстрый ответ, а поисковая система — понятную страницу с правильными ссылками и заголовками.
PostgreSQL и Redis: надёжность плюс скорость
PostgreSQL хранит данные, которые нельзя потерять или случайно рассинхронизировать: пользователей, заказы, документы и настройки. Транзакции защищают сложные операции, индексы ускоряют поиск, а строгие ограничения поддерживают качество данных независимо от приложения.
Redis используется там, где важна скорость и допустимо восстановление: кэш ответов, ограничение частоты запросов, короткие сессии или очередь небольших задач. Он не заменяет основную базу. Такое разделение делает систему быстрее, но сохраняет предсказуемость и упрощает восстановление после сбоя.
Инфраструктура завершает продукт
Docker фиксирует окружение приложения, Nginx принимает HTTP-запросы и завершает TLS, а GitHub Actions проверяет код перед релизом. Prometheus и Grafana показывают состояние сервиса, ошибки и нагрузку. Резервные копии проверяются так же, как основной запуск: бэкап ценен только тогда, когда его можно восстановить.
Этот стек не является обязательным для любой задачи. Небольшой сайт может работать без Redis или контейнеров. Но архитектурные границы сохраняются: данные отделены от представления, секреты — от кода, а релиз — от ручных действий. Благодаря этому первая версия остаётся простой, а путь к росту не требует полного переписывания.