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

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

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

Diagrama de Deploy Detalhado.

image2

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