Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Amparo
  • wiki
  • Wiki
  • arquitetura

Last edited by Joao Pedro Hallberg R. Martins Jul 05, 2024
Page history
This is an old version of this page. You can view the most recent version or browse the history.

arquitetura

Home Escopo e Cronograma Processo Design/Mockups Configuração Arquitetura Código BD Qualidade Utilização

Arquitetura do Sistema

Descrição

Esta seção irá abordar a arquitetura selecionada para o Backend e Frontend, além dos dados relativos ao deploy.

Sumário

Descrição

  • Tecnologias
    • Spring Boot
    • ReactJs
    • Firebase
    • GitLab
    • Docker
    • Nginx
    • Comunicação entre as tecnologias utilizadas
  • Modelo Arquitetural
    • Definições do modelo
    • Fluxograma
  • Estrutura de Arquivos do Backend
  • Estrutura de Arquivos do Frontend
  • Diagrama comunicação entre pacotes
  • Hospedagem Eficiente
  • Diagrama de deploy

Tecnologias

Spring Boot (Backend)

Spring Boot é uma microestrutura de código aberto mantida por uma empresa chamada Pivotal. Ele fornece aos desenvolvedores Java uma plataforma para começar a usar um aplicativo Spring de nível de produção configurável automaticamente. Com ele, os desenvolvedores podem começar rapidamente sem perder tempo na preparação e configuração de seu aplicativo Spring. No contexto do projeto Amparo foi escolhido como a tecnologia a ser usada para o desenvolvimento do backend.

PostgreSQL (Banco de Dados)

O PostgreSQL é um sistema de banco de dados relacional orientado a objetos poderoso e de código aberto, com mais de 30 anos de desenvolvimento ativo, que tem uma alta confiabilidade, robustez de recursos e desempenho. No contexto do projeto Amparo é a tecnologia escolhida para o banco de dados da aplicação.

Docker (Conteinerização)

Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres. No contexto do projeto Amparo foi escolhido é ferramenta de conteinerização do artefatos que irão ser executados em maquinas EC2 no AWS.

React.js (Frontend)

O React (também denominado React.js ou ReactJS) é uma biblioteca front-end JavaScript de código aberto com foco em criar interfaces de usuário em páginas web. No contexto do projeto Amparo foi escolhido como a tecnologia a ser usada para o desenvolvimento do frontend.

GitLab

O GitLab é um gerenciador de repositório de software baseado em git, com suporte a Wiki, gerenciamento de tarefas e CI/CD. GitLab é similar ao GitHub, mas o GitLab permite que os desenvolvedores armazenem o código em seus próprios servidores, ao invés de servidores de terceiros.

Ngnix

O NGINX é um software de servidor altamente flexível e de alto desempenho que conquistou ampla popularidade na gestão de tráfego na web. Abaixo, destacamos algumas informações adicionais sobre suas principais capacidades:

O NGINX atua como um proxy reverso, direcionando as solicitações dos clientes para servidores backend. Esse recurso é especialmente valioso para otimizar o desempenho e a segurança de um servidor web, além de possibilitar a distribuição equitativa de carga entre servidores, assegurando uma direção eficaz do tráfego.

Comunicação entre as tecnologias utilizadas

Modelo Arquitetural REST

Para o escopo deste projeto foi desenvolvido uma API REST. REST API é uma interface de programação de aplicativo (API ou API da web) que está em conformidade com as restrições do estilo de arquitetura REST e permite a interação com serviços da web, REST significa transferência de estado representacional. A aplicação em React serve como nosso cliente rest, responsavél por lidar com a requisições a serviço REST. O Serviço REST é a api desenvolvida com o Spring Boot onde são definidos os endpoints para a realização das requisições pelo cliente.

Definições do Modelo Arquitetural REST

  • Arquitetura cliente-servidor: A interface do usuário do site / aplicativo deve ser separada da solicitação / armazenamento de dados, para que cada parte possa ser dimensionada individualmente.

  • Statelessness: a comunicação deve ter no contexto do cliente armazenado no servidor. Isso significa que cada solicitação ao servidor deve ser feita com todos os dados necessários e nenhuma suposição deve ser feita se o servidor possui dados de solicitações anteriores.

  • Sistema em camadas: o cliente não deve saber se está se comunicando diretamente com o servidor ou com algum intermediário. Esses servidores intermediários (sejam proxy ou balanceadores de carga) permitem escalabilidade e segurança do servidor subjacente.

Fluxograma em alto nível de chamadas de uma API REST

Estrutura de Arquivos do Backend

Estrutura de Arquivos do Backend

amparo-backend/
└── src/
    ├── main/
    │   ├── java/
    │   │   └── br.com.amparo.web/
    │   │       ├── web/
    │   │       │   ├── controller/
    │   │       │   │   └── ExampleController.ja
    │   │       │   └── ExampleApi.java
    │   │       ├── config/
    │   │       │   └── ExampleConfig.java
    │   │       ├── dto/
    │   │       │   └── ExampleDto.java
    │   │       ├── exception/
    │   │       │   └── ExampleException.java
    │   │       ├── handler/
    │   │       │   └── ExampleHandler.java
    │   │       ├── mapper/
    │   │       │   └── ExampleMapper.java
    │   │       ├── model/
    │   │       │   ├── entity/
    │   │       │   │   └── ExampleEntity.ja
    │   │       │   └── enumeration/
    │   │       │       └── enum.java
    │   │       ├── repository/
    │   │       │   └── ExampleRepository.java
    │   │       ├── service/
    │   │       │   ├──  ExampleService.java
    │   │       │   └── impl/
    │   │       │       └── ExampleServiceImpl.java
    │   │       ├── validator/
    │   │       │   ├── ExampleValidator.java
    │   │       │   └── 
    │   └── resources
    │       └── application.yml
    └── test/

Explicativo dos diretórios do backend

web: Impelementação dos endpoints da aplicação, no direitorio controller estão os contratos do endpoints que possuem as anotações do swagger para documentação da api no código.

config: Arquivos anotados com anotação @Configuration, para indicar as classes que serão usadas para configurações e definições de beans.

dto: Classes java para comunicação rest entre a backend e o front, com a finalidade de não expor as classes de domínios.

exception: Classes customizadas para lançamento de exceção.

handler: Classe responsável por lidar e formatar as exceções lançadas no backened para melhor entendimento do erro no frontend.

model: Classes que descrevem o nosso modelo de domínio, sendo a representação visual de classes conceituais ou objetos do mundo real em um domínio de interesse, também representam as entidades da modelagem do banco de dados.

Repository: Interface JPA para comunicação com o banco de dados.

service: Classes responsáveis pela lógica de negócio.

validator: Classes com o intuito de validar os dados das requisições que vem do cliente.

resources: Recursos e configurações de propriedades da aplicação.

Frontend

Definições de Tecnologias

TBD

Módulos do Sistema

TBD

Diagramas de Componentes

TBD

Diagrama do Sistema

TBD

Hospedagem Eficiente: O Casamento do EC2 com o Amazon S3

Para fornecer uma solução de hospedagem altamente escalável e eficiente para nossos aplicativos web, escolhemos uma abordagem estratégica. Nossa arquitetura de hospedagem envolve a utilização do Elastic Compute Cloud (EC2) e do Amazon Simple Storage Service (S3), dois serviços robustos da Amazon Web Services (AWS).

Backend na Instância do EC2: Nossa lógica de servidor, também conhecida como backend, será executada em uma instância do EC2. O EC2 é uma máquina virtual escalável e flexível que nos permite configurar e gerenciar servidores conforme nossas necessidades. Esta abordagem nos concede controle total sobre o ambiente do servidor e nos permite personalizar recursos, como poder de processamento, memória e sistema operacional. Além disso, o EC2 é altamente seguro e pode ser configurado para atender aos requisitos de segurança específicos de nossa aplicação.

Ao hospedar nosso backend no EC2, garantimos que tenhamos a capacidade de gerenciar a lógica de negócios e o processamento de dados de forma eficaz e escalável.

Frontend no Amazon S3 Bucket: Nossa interface do usuário, conhecida como frontend, será armazenada em um bucket do Amazon S3. O Amazon S3 é um serviço de armazenamento de objetos altamente durável e escalável. Ele é ideal para armazenar arquivos estáticos, como HTML, CSS, JavaScript e imagens. Ao usar um bucket do S3 para hospedar o frontend, garantimos alta disponibilidade, distribuição global e baixos custos de armazenamento.

Essa abordagem nos permite separar claramente o conteúdo estático do dinâmico. Além disso, ao usar a rede de entrega de conteúdo (CDN) integrada do S3, garantimos que nosso frontend seja entregue de maneira rápida e eficiente aos usuários finais em todo o mundo.

A combinação do EC2 e do Amazon S3 cria uma infraestrutura sólida e escalável para nossos aplicativos web. O backend no EC2 fornece a funcionalidade e a lógica de negócios, enquanto o frontend no S3 oferece uma experiência de usuário otimizada e rápida. Essa arquitetura nos permite crescer de maneira eficaz e oferecer aos nossos usuários uma experiência de alta qualidade em nossos aplicativos web.

Diagrama de Deploy

Clone repository
  • arquitetura
  • banco_dados
  • codigo
  • configuracao
  • design_mockups
  • escopo
  • Home
  • processo
  • qualidade
  • utilizacao