Суть для студентів: залежність — це “пакет можливостей”. У великому проєкті залежності підбирають під задачу, бо кожна додає вагу, конфіг і потенційні помилки.
1) Web / API: коли ви будуєте сервер та інтерфейси
Spring WebКласика для REST API (Controller, JSON, Tomcat). Ми вже використовуємо.
Spring WebFluxРеактивний стек (асинхронність, “не блокує потоки”). Добре для дуже великої кількості одночасних запитів, стрімінгу, але складніше в навчанні.
WebSocketДвосторонній канал “сервер ↔ клієнт” в реальному часі: чат, нотифікації, онлайн-табло, біржові котирування.
Для курсу: достатньо Spring Web. WebFlux/WebSocket — як “просунуті теми”.
2) Data / DB: робота з даними
Spring Data JPAORM через Hibernate. Найчастіше для CRUD систем (табличні дані).
Spring Data JDBCПростіший за JPA підхід (менше “магії”), але менше автоматизації зв’язків.
Spring Data MongoDBNoSQL (документи). Підходить, коли структура даних змінна або потрібні вкладені документи.
FlywayМіграції БД: версії SQL-скриптів. Це “дорослий” підхід: БД змінюється контрольовано.
LiquibaseАльтернатива Flyway (може працювати з XML/YAML/SQL). Теж для міграцій.
Чому міграції важливі: у команді БД має бути однакова у всіх, і зміни повинні “накочуватися” автоматично.
3) Security: авторизація, ролі, захист
Spring SecurityБаза для логіну/пароля, ролей, доступів до endpoint-ів, захисту від типових атак.
OAuth2 ClientВхід через Google/GitHub, або підключення до зовнішніх сервісів з токенами.
OAuth2 Resource ServerКоли ваш API захищений JWT токенами (mobile app / SPA / інші сервіси).
Для курсу: можна пізніше додати простий login + JWT як “вага в портфоліо”.
4) Validation: щоб не приймати “сміття” в API
ValidationДозволяє ставити правила на DTO: @NotNull, @Email, @Size, тощо.
Працює так: клієнт надсилає JSON → Spring мапить в DTO → валідатор перевіряє → якщо погано, повертаємо 400 з описом.
Це одна з найкорисніших залежностей для реального API.
5) Observability: логування, метрики, “що з сервісом”
Spring Boot ActuatorДає health-check, метрики, інформацію про стан сервісу (для DevOps/моніторингу).
MicrometerМетрики (Prometheus/Grafana). У реальних системах це must-have.
LoggingЗазвичай вже є (Logback). Часто додають структуровані логи (JSON) для ELK/Graylog.
Чому це важливо: коли щось ламається, без логів і health endpoints ви “сліпі”.
6) Cache: прискорення, коли БД стає “вузьким місцем”
Spring CacheПростий кеш через анотації (@Cacheable) — менше запитів до БД.
RedisЗовнішній кеш/сховище ключ-значення. Дуже популярний для сесій, кешу, rate-limit, тимчасових токенів.
Для курсу: як “плюшка” для сильніших студентів після JPA.
7) Messaging: асинхронні події та черги
RabbitMQ (AMQP)Черги. Використовується для асинхронних задач: email-розсилки, обробка файлів, фонові задачі.
Apache KafkaПодієва платформа для великих систем: стріми подій, мікросервіси, аналітика.
Уявіть: замість “зараз обробляй” ми кажемо “постав у чергу — обробиш пізніше”.
8) Documentation: документація API автоматично
Springdoc OpenAPI (Swagger)Генерує сторінку документації для API, де можна одразу тестувати endpoints.
Це дуже корисно для командної роботи і для портфоліо: “ось моє API, ось документація”.
9) Developer Tools: комфорт розробника
Spring Boot DevToolsАвтоперезапуск застосунку при зміні коду. Зручно на локальній розробці.
Configuration ProcessorПідказки для application.properties/yml (autocomplete в IDE).
Це не впливає на “логіку”, але сильно полегшує життя.
10) Testing: щоб не боятися змінювати код
Spring Boot TestБаза для тестів у Spring.
JUnitФреймворк тестів.
MockitoМоки (підміна залежностей у тестах).
TestcontainersЗапускає реальну БД у контейнері для інтеграційних тестів (дуже “дорослий” підхід).
Висновок: Spring Boot — це набір модулів. Ви не “вивчаєте все Spring”, ви вчите потрібні модулі під задачу. Для нашої практичної достатньо Web + JPA + DB Driver (+ Lombok).