Пружинный ботинок, React.js & Разработка полного стека AWS S3

YOUTUBE · 28.11.2025 06:17

Ключевые темы и таймкоды

Введение

0:00
  • Приветствие и представление курса по хранению файлов с помощью Spring Boot, React и AWS.
  • Упоминание о переделке старого видео в рамках полной программы курса.
  • Информация о возможности получения сертификата на веб-сайте.

Призыв к подписке

0:57
  • Призыв подписаться на канал и нажать «Нравится».

Диаграмма сервисов AWS

1:24
  • Объяснение диаграммы сервисов AWS, включая EC2 и S3.
  • Настройка роли для доступа к корзине S3.

Использование SDK AWS

2:20
  • Объяснение необходимости назначения роли для использования SDK AWS.
  • Описание двух реализаций: подключение к реальному ведру S3 и использование папки в файловой системе.

Интеграционные тесты

3:12
  • Объяснение использования поддельной реализации для интеграционных тестов.
  • Демонстрация функции перетаскивания изображений в приложении.

Демонстрация загрузки изображений

5:08
  • Пример загрузки фотографии и её отображения в приложении.

Выбор IDE

6:10
  • Выбор IntelliJ IDEA как IDE для курса.
  • Упоминание новой темы пользовательского интерфейса IntelliJ.
  • Информация о розыгрыше лицензии IntelliJ.

Социальные сети и сообщество

7:04
  • Призыв присоединиться к группе в LinkedIn и Discord.

Клонирование репозитория

7:48
  • Инструкция по клонированию репозитория через SSH.

Установка IntelliJ

9:13
  • Рекомендации по установке IntelliJ Ultimate через Toolbox.
  • Получение трёхмесячной лицензии IntelliJ.

Открытие проекта в IntelliJ

11:01
  • Откройте IntelliJ и выберите «Открыть» или клонируйте репозиторий с GitHub.
  • Убедитесь, что все записи сделаны в одной и той же версии IDE.
  • Откройте корень проекта, который содержит интерфейс, серверную часть и другие компоненты.

Новые функции IntelliJ

12:01
  • После обновления приложения в IntelliJ появились новые функции.
  • Найдите скрипт сборки Maven и установите плагин.
  • Проверьте структуру проекта: CI, GitHub, gitignore, бэкенд, фронтенд, Angular, React.

Работа с Git

12:52
  • Откройте Git и проверьте коммиты перед загрузкой файлов.
  • Проверьте код перед загрузкой файлов, используя проверку редакции.
  • Используйте терминал для проверки изменений с помощью команды `git checkout`.

Установка Docker

15:19
  • Установите Docker для локального запуска приложений.
  • Запустите контейнер Hello World через Docker Desktop.
  • Проверьте работу контейнера, открыв страницу на локальном хосте.

Запуск базы данных с помощью Docker

18:40
  • Используйте Docker для запуска базы данных PostgreSQL.
  • Измените файл docker-compose.yaml, оставив только контейнер для базы данных.
  • Запустите контейнер базы данных с помощью команды `docker-compose up -d`.

Проверка работы базы данных

21:30
  • Проверьте запущенный контейнер базы данных с помощью `docker ps`.
  • Убедитесь, что база данных готова к подключениям, проверив вывод `docker logs`.

Создание базы данных customer

23:22
  • Внутри контейнера базы данных создайте базу данных customer для сервера.

Подключение к базе данных через терминал

23:38
  • В IntelliJ откройте серверную папку и попробуйте запустить основной класс.
  • Запуск завершится неудачей из-за отсутствия клиента базы данных.
  • Для подключения к базе данных используйте терминал: `docker ps`, затем `docker exec -it <контейнер_id> sh`.

Работа с PostgreSQL в контейнере

24:32
  • В контейнере введите `psql` для подключения к базе данных.
  • Введите имя пользователя и пароль для подключения.
  • Перечислите доступные базы данных с помощью команды `\l`.

Создание новой базы данных

25:30
  • Создайте новую базу данных с именем «Клиент».
  • Убедитесь, что после команды создания базы данных есть точка с запятой.
  • Подключитесь к новой базе данных с помощью команды `\c Клиент`.

Проверка работы приложения

26:26
  • Попробуйте запустить приложение в IntelliJ.
  • Введите данные клиента: адрес электронной почты, возраст и другие.
  • Проверьте наличие таблицы «Клиент» в базе данных.

Извлечение данных из базы данных

27:24
  • Извлеките данные клиента с помощью команды `select * from Клиент`.
  • Проверьте идентификатор клиента, имя, пароль, пол и возраст.
  • Выйдите из PostgreSQL и контейнера с помощью `Ctrl+D`.

Установка Node.js и запуск интерфейса

28:36
  • Установите Node.js для локального запуска интерфейса.
  • Перейдите в папку интерфейса с помощью `cd`.
  • Установите зависимости с помощью `npm install`.
  • Запустите интерфейс React с помощью `npm run dev`.

Вход в систему и управление клиентами

30:30
  • Откройте Chrome и введите URL интерфейса.
  • Войдите в систему с учётными данными, полученными из логов серверной части.
  • Добавьте нового клиента, введите его данные и авторизуйтесь.

Завершение

31:30
  • Проверьте добавление нового клиента и его авторизацию.
  • Congratulations! Вы на верном пути к созданию функционала для загрузки фотографий с помощью AWS.

Начало работы с AWS SDK для Java

32:10
  • Изучение официальной документации AWS SDK для Java.
  • Упоминание о двух версиях SDK и руководстве по миграции.

Руководство для разработчиков

33:03
  • Обзор руководства по началу работы, настройке, функциям SDK и безопасности.
  • Пример проекта Maven с использованием SDK.

Настройка Maven

33:57
  • Настройка Apache Maven для работы с SDK.
  • Добавление зависимости SDK в pom.xml.

Добавление зависимости в IntelliJ

34:55
  • Запуск команды для добавления зависимости в IntelliJ.
  • Настройка версии SDK в pom.xml.

Временные учётные данные

36:20
  • Необходимость временных учётных данных для доступа к AWS.
  • Цепочка поставщиков учётных данных по умолчанию.

Создание пользователя в консоли AWS

38:13
  • Переход в консоль AWS и создание нового пользователя.
  • Предоставление полного доступа пользователю.

Генерация ключей доступа

41:00
  • Генерация ключа доступа и секретного ключа.
  • Рекомендации по использованию ключей доступа.

Сохранение ключей на локальном компьютере

42:38
  • Сохранение ключа доступа и секретного ключа на локальном компьютере.
  • Подчёркивание важности безопасного хранения ключей.

Создание файла учётных данных

43:36
  • Создайте локальный файл учётных данных в домашнем каталоге, например, /Users/amigoscode/aws/credentials.
  • Откройте файл с помощью редактора, например, vi.
  • Введите идентификатор ключа доступа AWS и секретный ключ доступа в файл.

Безопасность учётных данных

46:27
  • Учётные данные должны храниться в секрете, чтобы избежать несанкционированного доступа.
  • После использования учётные данные нужно восстановить.
  • Содержимое файла можно найти в описании видео.

Введение в Amazon S3

47:40
  • Amazon S3 — это хранилище объектов для хранения данных.
  • Бесплатный уровень AWS предоставляет 5 ГБ хранилища на 12 месяцев.
  • S3 позволяет масштабировать ресурсы, защищать данные и легко управлять ими.

Настройка клиента S3

50:22
  • Используйте фрагмент кода из документации для настройки клиента S3 в IntelliJ IDEA.
  • Создайте класс для конфигурации клиента, например, s3.Config.
  • Укажите регион AWS, например, eu-west-1.

Определение региона в конфигурации

53:12
  • Определите регион в файле конфигурации, например, в application.yaml.
  • Верните сконфигурированный клиент для использования.

Тестирование без использования учётных данных

55:04
  • Для тестирования можно использовать поддельную реализацию, которая хранит файлы в локальной файловой системе.
  • Это позволяет избежать использования учётных данных AWS локально.

Создание сервиса S3

55:32
  • Конфигурация S3: создание сервиса и добавление методов для загрузки и хранения объектов.
  • Настройка клиента для взаимодействия с S3.

Операции с объектами в S3

56:24
  • Обсуждение операций с корзинами и объектами в документации S3.
  • Рекомендация использовать инфраструктуру как код для управления ресурсами, например, Terraform или Pulumi.

Реализация метода загрузки объекта

57:22
  • Разработка метода для загрузки объекта в корзину.
  • Передача имени корзины и ключа в запросе.
  • Сохранение данных в виде массива байтов.

Реализация метода получения объекта

59:20
  • Реализация метода для получения объекта из корзины.
  • Использование многосоставной загрузки для больших файлов.
  • Получение ответа в виде потока ввода-вывода.

Тестирование методов

1:03:28
  • Создание корзины в консоли AWS.
  • Проверка наличия объектов в корзине.
  • Подготовка к тестированию загрузки файлов.

Создание корзины в AWS

1:04:26
  • Ввод названия корзины, например, «fs-amigos-code-dash-customer».
  • Выбор региона для развёртывания сервисов.
  • Подтверждение создания корзины.

Начало работы с S3

1:06:14
  • Открытие IntelliJ и метода main.
  • Комментирование кода для тестирования загрузки файла в корзину.

Использование сервиса S3

1:07:10
  • Создание случайного объекта и клиента.
  • Использование сервиса S3 для загрузки файла.
  • Передача названия корзины, ключа и массива байтов.

Загрузка файла

1:08:09
  • Загрузка строки «привет, мир» в массив байтов.
  • Преобразование массива байтов в строку.

Проверка загрузки

1:10:06
  • Запуск приложения и проверка загрузки файла в S3.
  • Возможность скачивания файла из корзины.

Проблемы с учётными данными

1:11:03
  • Удаление учётных данных и проверка работы плагина AWS.
  • Ошибка из-за неверной подписи запроса.
  • Важность правильной настройки учётных данных.

Настройка конфигурации

1:15:05
  • Добавление имени корзины в конфигурацию приложения.yaml.
  • Создание класса для работы с корзинами S3.
  • Использование геттеров и сеттеров для работы с конфигурацией.

Импорт класса и тестирование

1:17:51
  • Импорт класса S3Buckets в main.
  • Тестирование загрузки файла с использованием нового подхода.

Создание контроллера

1:19:55
  • Начало работы над контроллером для API.
  • Определение методов для загрузки и выгрузки изображений.
  • Настройка пути для сохранения изображения клиента.

Работа с изображением профиля

1:21:31
  • Изображение профиля будет иметь идентификатор, представляющий собой целое число.
  • Получение файла через составной запрос.
  • Использование Spring Framework Web Multipart для работы с файлами.

Сопоставление и интеграционные тесты

1:22:30
  • Добавление сопоставления для обработки файла.
  • Планирование добавления интеграционных тестов для проверки работы системы.
  • Передача идентификатора клиента вместе с файлом.

Создание методов в контроллере

1:23:26
  • Дублирование метода для получения изображения профиля.
  • Получение массива байтов изображения профиля.
  • Передача идентификатора клиента и загрузка изображения.

Работа с сервисом

1:25:15
  • Создание методов в сервисе для работы с файлами.
  • Проверка существования клиента перед загрузкой файла.
  • Рефакторинг кода для повторного использования.

Загрузка файла и обработка исключений

1:27:11
  • Загрузка содержимого корзины с файлом.
  • Обработка исключений с помощью try-catch.
  • Извлечение идентификатора изображения профиля.

Сохранение изображения в базе данных

1:31:18
  • Сохранение профиля и идентификатора изображения профиля в PostgreSQL.
  • Проверка наличия идентификатора изображения профиля у клиента.
  • Возврат объекта клиента с изображением профиля.

Тестирование системы

1:35:04
  • Открытие тестового класса для проверки обслуживания клиентов.
  • Создание макета для службы S3.
  • Исправление ошибок компиляции перед сохранением идентификатора изображения профиля в базе данных.

Сохранение идентификатора изображения профиля в базе данных

1:36:21
  • Открытие проекта и запуск миграции базы данных.
  • Создание второй миграции.
  • Добавление столбца «профиль», «изображение», «идентификатор» типа varchar длиной 36.

Настройка уникальности идентификатора изображения профиля

1:38:15
  • Добавление ограничения уникальности для идентификатора изображения профиля.
  • Изменение таблицы «клиент» и добавление ограничения «уникальный идентификатор изображения профиля».

Настройка класса сущности клиента

1:39:02
  • Добавление столбца «идентификатор изображения профиля» в класс сущности клиента.
  • Установка значения «уникальный» равным «истина» для нового столбца.

Создание конструктора для клиента

1:41:54
  • Создание конструктора, принимающего строку и идентификатор изображения профиля.
  • Настройка автоматического ввода остальных полей.

Тестирование приложения

1:42:49
  • Запуск приложения и проверка работы вставки данных.
  • Исправление ошибки «идентификатор изображения профиля в столбце не найден».

Обновление идентификатора изображения профиля через JDBC

1:44:32
  • Реализация метода обновления идентификатора изображения профиля через JDBC.
  • Использование инструкции SQL для обновления данных.

Реализация обновления через JPA

1:47:52
  • Применение методов JPA для обновления идентификатора изображения профиля.
  • Создание запроса JPQL для обновления данных.

Завершение настройки

1:50:47
  • Обработка данных JDBC клиента.
  • Выбор нового столбца, добавленного ранее.

Добавление новой колонки в JDBC

1:51:33
  • Открытие клиентской службы доступа к данным JDBC.
  • Добавление новой колонки «изображение профиля» через команду «c».
  • Удаление ненужных столбцов для упрощения вставки.

Обновление информации о клиенте

1:52:32
  • Обновление информации о клиенте, включая «пользовательскую покупку» и «электронное письмо».
  • Добавление нового метода для обновления идентификатора изображения профиля клиента.

Изменение программы для отображения строк клиентов

1:53:29
  • Вставка нового столбца в программу для отображения строк клиентов.
  • Создание нового конструктора для указания идентификатора изображения профиля.

Загрузка изображения профиля клиента

1:54:14
  • Загрузка изображения профиля клиента через «Обслуживание клиентов».
  • Проверка существования клиента и генерация идентификатора изображения профиля.
  • Сохранение изображения в AWS и обновление базы данных.

Рефакторинг кода

1:56:04
  • Рефакторинг DTO для добавления идентификатора изображения профиля.
  • Исправление ошибок компиляции, связанных с DTO.

Тестирование системы

1:59:20
  • Запуск тестов для проверки работы системы.
  • Исправление ошибок компиляции, связанных с DTO, и повторное тестирование.

Анализ ошибок тестирования

2:00:22
  • Анализ ошибок отображения строк, обнаружение проблемы с паролем.
  • Добавление пароля в DTO и повторное тестирование.

Завершение тестирования

2:04:01
  • Запуск всех тестов, включая интеграционные.
  • Подтверждение успешного прохождения тестов.

Важность тестирования

2:05:42
  • Подчёркивание важности тестирования кода.
  • Сравнение с безопасностью самолёта и необходимость тестирования программного обеспечения.
  • Анонс курса «Полный стек» для более глубокого изучения тестирования.

Начало тестирования

2:07:10
  • Открытие терминала и выполнение команды `git checkout main`.
  • Демонстрация множества тестов в папке `tests`.
  • Упоминание о проведённых интеграционных тестах в разделах «Путешествие» и «Заказчик».

Проблемы с тестированием

2:08:08
  • Попытка запуска тестов сталкивается с проблемами.
  • Решение проблемы путём аннулирования кэшей и перезапуска проекта.

Важность тестирования

2:09:15
  • Подчёркивание важности тестирования в любом приложении.
  • Рекомендация изучить тестирование для лучшего понимания процесса.

Поддельная реализация для тестирования

2:10:09
  • Создание поддельной реализации для модульного тестирования.
  • Хранение изображений в локальной файловой системе.

Настройка приложения для работы с большими файлами

2:10:51
  • Настройка приложения в YAML для работы с файлами большего размера.
  • Указание максимального размера файла, запроса и объёма памяти.
  • Значения по умолчанию: максимальный размер запроса — 1 МБ, файла — 10 МБ, объём памяти — 256 КБ.

Обновление профиля пользователя

2:12:03
  • Добавление возможности обновления профиля пользователя.
  • Демонстрация процесса обновления фотографии профиля.

Использование React Drop Zone

2:13:10
  • Установка библиотеки React Drop Zone для загрузки файлов.
  • Объяснение простоты использования библиотеки.

Реализация компонента Drop Zone

2:16:03
  • Добавление компонента Drop Zone в форму обновления клиента.
  • Использование хука для реализации зоны перетаскивания файлов.

Тестирование компонента

2:18:23
  • Проверка работы компонента Drop Zone в веб-браузере.
  • Возможность перетаскивания или выбора изображения через окно проводника.

Настройка компонента в IntelliJ

2:19:21
  • Преобразование изображения из div в прямоугольник с помощью Chakra UI.
  • Увеличение ширины прямоугольника до 100%.
  • Выравнивание текста по центру.

Добавление рамки и отступов

2:20:20
  • Вставка рамки и настройка её цвета на серый.
  • Добавление отступов с значением 6.
  • Настройка радиуса границы.

Работа с v-stack

2:21:18
  • Использование v-stack для организации элементов.
  • Добавление интервалов и отступов внутри v-stack.
  • Сохранение изменений и проверка результата.

Добавление изображения

2:22:18
  • Использование изображения из Chakra.
  • Настройка границы и радиуса изображения.
  • Установка размера изображения на 150 пикселей.
  • Добавление src для изображения.

Проверка в Chrome

2:23:12
  • Проверка отображения пустого круга в Chrome.
  • Загрузка и сохранение изображения на сервере.

Загрузка изображения на сервер

2:23:37
  • Перетаскивание или выбор изображения для загрузки на сервер.
  • Изображение сохраняется в S3 или локальную файловую систему в зависимости от реализации.
  • Открытие проекта в IntelliJ, выбор служб и клиента.

Передача информации в API

2:24:36
  • Использование блока «попробуйте и поймайте» для обработки ошибок.
  • Передача данных формы и заголовков в качестве полезной нагрузки.
  • Получение токена через «authconfig».

Обработка данных формы

2:26:37
  • Формирование данных формы из нескольких частей.
  • Указание клиента в данных формы.
  • Обработка ошибок с помощью «throw e».

Загрузка файла в рабочей зоне

2:27:36
  • Открытие формы «Обновить клиента» и загрузка файла.
  • Использование метода «загрузить» для обработки файла.
  • Передача идентификатора пользователя и заполнение формы.

Создание объекта formData

2:28:32
  • Создание объекта formData для обработки файла.
  • Захват первого файла из принятых файлов.
  • Передача идентификатора клиента в качестве реквизита.

Обработка ответов API

2:30:06
  • Обработка успешного завершения операции.
  • Отображение уведомления об успешном завершении.
  • Обработка ошибок и отображение уведомления об ошибке.

Тестирование загрузки изображения

2:32:11
  • Проверка сохранения изображения в базе данных.
  • Проверка идентификатора изображения в S3.
  • Открытие изображения в проводнике.

Обновление карточки клиента

2:35:37
  • Получение URL-адреса изображения профиля клиента.
  • Импорт URL-адреса в форму «Обновить список клиентов».
  • Обновление карточки клиента с изображением.

Отображение изображения в карточке клиента

2:37:36
  • Добавление изображения в аватар карточки клиента.
  • Передача идентификатора пользователя в src для аватара.
  • Проверка отображения изображения после обновления страницы.

Обновление клиента

2:38:58
  • Использование метода привлечения клиентов.
  • Передача запроса на получение клиентов.
  • Запись кода в новой строке.

Тестирование изменений

2:39:59
  • Вызов функции «Выборка» после успешной загрузки.
  • Исправление ошибок в JavaScript.
  • Обновление изображения на странице.

Работа с изображением профиля

2:41:25
  • Получение массива байтов вместо изображения.
  • Изменение типа носителя в customer controller.
  • Перезагрузка серверной части.

Внедрение изменений

2:43:40
  • Фиксация изменений в IntelliJ.
  • Запуск конвейера CI/CD.
  • Развёртывание приложения на AWS Amplify.

Тестирование интеграционного теста

2:45:44
  • Ошибка при прохождении теста.
  • Исправление формата изображения с JSON на JPEG.
  • Повторное тестирование и успешное прохождение.

Тестирование развёрнутого приложения

2:48:54
  • Вход в приложение с новыми учётными данными.
  • Обновление информации о клиенте.
  • Добавление и загрузка изображения через API.

Заключение

2:52:24
  • Призыв к обратной связи и комментариям.
  • Анонс профессионального курса Stack.
  • Прощание и приглашение на следующее занятие.