Home | Escopo e Cronograma | Processo | Design/Mockups | Configuração | Arquitetura | Infra | Código | BD |
---|
O projeto Coopera RS adota uma arquitetura cliente-servidor, dividindo a solução em dois componentes principais:
- Cliente (Front-end): Construído em React, responsável pela interface web e interação direta com o usuário.
- Servidor (Back-end): Desenvolvido em Spring Boot, lidando com as regras de negócio, integrações e persistência de dados.
No diagrama da figura 19, é possível observar que todo o ecossistema está executando dentro de contêineres Docker, provisionados em uma instância Amazon EC2 (AWS). Dessa forma, a aplicação front-end (React) e o back-end (Spring Boot) ficam encapsulados em contêineres separados, facilitando a escalabilidade e o isolamento de cada serviço.
A comunicação entre o front-end e o back-end acontece via requisições HTTP REST, seguindo o modelo tradicional de cliente-servidor. Quando o usuário acessa a aplicação web, as requisições são enviadas ao servidor Spring Boot, que processa as regras de negócio e interage com as bases de dados.
- Integração com a AWS
Alguns serviços da Amazon Web Services (AWS) foram incorporados para dar suporte à aplicação:
- Amazon S3: Utilizado para armazenar arquivos estáticos, imagens ou qualquer conteúdo que necessite de um bucket de alta disponibilidade e escalabilidade.
- Amazon SES: Responsável pelo envio de e-mails transacionais, como confirmações de cadastro, notificações de compras ou recuperação de senha.
- Pipeline de Integração Contínua (CI) e Implantação Contínua (CD)
O controle de versão e a automação de deploy são realizados via GitLab. O fluxo ocorre da seguinte forma:
- O desenvolvedor realiza um commit ou merge request no repositório do GitLab.
- Um GitLab Runner é acionado para executar testes e builds da aplicação.
- Caso seja aprovado, o runner gera as imagens Docker do front-end e do back-end.
- As imagens são enviadas para a instância EC2, onde são executadas como contêineres (ou atualizadas, em caso de uma nova versão).
Esse processo garante que todas as novas funcionalidades e correções sejam testadas antes de chegar ao ambiente de produção.
- Padrão Arquitetural (Back-end)
Para a camada de serviços, foi adotada uma abordagem inspirada na Arquitetura Hexagonal, também conhecida como Ports and Adapters. Essa arquitetura visa separar o núcleo de regras de negócio (o “domínio”) das partes externas de comunicação (banco de dados, serviços externos, interface web etc.). Dessa forma, as “portas” são as interfaces que definem como o domínio se comunica com o resto do sistema, enquanto os “adaptadores” implementam essas portas em tecnologias específicas (ex.: repositórios para acesso ao PostgreSQL, controladores REST para expor endpoints etc.).
Essa estrutura modular facilita:
- Manutenção: modificações em um adaptador (por exemplo, troca de banco de dados) podem ser feitas sem afetar diretamente o domínio.
- Testabilidade: cada camada pode ser testada isoladamente, garantindo maior confiabilidade do sistema.
- Evolução: novos serviços ou integrações podem ser adicionados sem grandes impactos no núcleo do projeto.