Архитектура минимального Java проекта перед трудоустройством.
https://t.me/+IuxPxrb7x1Q5YmIyЭту статью я планировал написать еще миллиард лет назад тк многие спрашивали о том что нужно знать и уметь перед тем как пытаться заходить в айти Java джуном (хотя по сути интерном а не джуном).
Три Базовых Слоя. Фронт, Бэк, База.

Слишком общие словечки.
Каждая из частей может сильно варьироваться.
Фронт может быть:
- Голый Js либо легкие утилитарные либы аля jquery - это очень вряд ли, сейчас так не пишут.
- Какой то фреймворк аля React.js или Vue.js (фронтендеров вообще хлебом не корми дай главное новый фреймворк)
Бэк может быть:
- Голая джава (ну я не верю в это особо, слишком редкий зверь в энтерпрайзике)
- Спринг монолитик (это наиболее реально для джуна)
- Спринг микросервисный (это вам еще рано)
- Спринг реактивный (тож рано)
- Джакартовый - раньше называли джава ее (тож не верю, он как то сдох уже давно и то что воскресло из пепла выглядит как говнямба)
- Кваркус или микронавт (новые типочки, но я так понимаю что после спринг нейтива у них не осталось преемуществ)
- Список можно продолжать, бэк можно подтянять в разных контейнерах
База может быть:
- Классический SQL или еще RDBMS - это наше все, таблички, селекты с джойнами.
- NOSQL (Not only SQL) - вагон нереляционных братюнь. Классические NOSQL это монга и эластиксерч. Если последний (эластисерч) это изян тк по сути представляет из себя легкомасштабируемый кэш с фичами полнотекстового поиска (кстати большинсто nosql легко масштабируются по своей природе)
- Стоит помнить что подключение к базе тоже может быть синхронным и асинхронным но это не столько про архитектуру сколько про тонкости взаимодействия между слоями.
Что за цирк? Почему так сложна?
Я не перечислил все вариации но для новичка и вышесказанное уже выглядит немного пугающе. Для новичка пойдет следующий вариант:

Картина слишком общая, перейдем к конкретике
Что нужно знать и сделать по фронту в лучшем случае:
- По минималке надо знать JS но это совсем базовый вариант, в таком случае есть шанс совсем не понимать что происходит на первом месте работы.
- По хорошему надо разобраться с NPM. Как им билдить проекты на каком нибудь React'е. Ну и конечно же базовый React надо знать (либо альтернативы типа Angular)
Что нужно включить по бэку
- Для минималочки пойдет спринг и его основные понятия IOC/DI или то как работать с бинами, как их инициализировать и инъектировать куда надо.
- Понадобится минимальная авторизация те Spring Basic Security. Это про то как сделать один POST request с именем и паролем и получить в ответ куку которая затем будет ипользоваться для доступа к контроллерам.
- Надо уметь писать REST контроллеры и вообще понимать базовые идеи REST архитектуры. Те нужно сделать как минимум CRUD (create/read/update/delete) API и подключить его к фронту.
- Надо уметь связываться с базой через jdbcTemplate (надо сделать хотя бы простейший CRUD) и уметь делать простейшую транзакцию. К сожалению нужно знать и сраный Hibernate и потому придется продублировать ровно тот же CRUD который вы сделаете на jdbcTemplatе
- Хорошо бы добавить сюда какие нибудь внешние сервисы например которые можно тащить по http (используя restTemplate) или может быть какую то альтернативу и сходить по SOAP протоколу.
Что нужно включить по базе
- По базе для начального проекта пойдет RDBMS те реляционная база еще её называют SQL. Вариант можно выбрать любой - Mysql, Postgres, OracleXE.
- При работе с базой данных нужно уметь создавайть схему, писать запросы к ней (от базовых SELECT * FROM USER where NAME = 'ololoshka' до чего то более солидного c JOIN, GROUP BY, HAVING
Все ли на этом? Неть.
Тесты. Тесты. Тесты.
Все эта система должна быть покрыта тестами, без тестов код считается не готовым к продакшену. Тесты как минимум можно написать и на фронт и на бэк отдельно. Но для новичка просто покрытый бэк достаточен.
Что нужно знать по тестам:
- Начинаем с стыдливого мокирования вроде Mockito или PowerMock и пишем юнит тесты на слои.
- Затем делаем нормальную интеграцию подменяя внешние сервисы (вроде базы данных или какого нибудь интегрированного сервиса) встроенными вроде h2 базой данных. Вообще это не так просто, вангую сделать экспресс курс по этой теме.
Непрерывная интеграция и автоматизация. Сиай Сиди.

- Нужно знать базовый линукс и уметь писать базовые скрипты на нем. Не нужно каких то сложных тем но написать скрипт по созданию файла, папки, выкачки архива и последующего билда с запуском приложения - надо обязательно.
- Сейчас приложения уже не билдят просто на сервере а загружают в контейнеры. А значит нужно знать и уметь в Docker. К счастью докер это топовая темка и написана как боженька смолвил. Это я к тому что базовые вещи докера можно выучить относительно быстро.
- После того как разберетесь с предыдущими двумя все процессы надо автоматизировать и уметь создавать пайплайны которые будут выкачивать проект с гита, билдить его, запускать тесты и потом запускать.
Какими могут быть проекты.
Тут вы ограничены лишь вашей фантазией и времени которое у вас есть. Проще всего начать с админки. Взять HR схему от оракла (она легко гуглится) и сделать две странички - на одной будет бухгалтер просматривать данные (те только считать) по сотрудникам а на другой страничке к которой будет иметь доступ лишь админ сможет делать с данными все что захочет (добавлять, удалять).
Сложна Сложна Сложна.

Да, все вышесказанное в сумме выглядит как небольшой эпический проект. И так оно и есть, я пытался дать некое подобие всех этих технологий двум группам и потратив на каждую где то по 40 часов все равно не покрыл все темы. Но эта статья может послужить лишь ориентиром и необязательно делать всю архитектуру. Например можн закрыть лишь бэк и базу, для некоторых компаний и этого будет достаточно.
По ряду тем я буду вести и бесплатные стримы и платные экспресс курсы по 3 или может даже 4 часа которое помогут сэкономить вам много времени.