julian-gamboa-ensino / aula-microservicos-2022

1 stars 0 forks source link

JPA #8

Open julian-gamboa-bahia opened 1 month ago

julian-gamboa-bahia commented 1 month ago
Spring Data Module Tipo de Banco de Dados Caso de Uso Principal Características Específicas
Spring Data JPA Relacional Acesso a bancos de dados relacionais via JPA - Suporta transações ACID
- Amplamente utilizado em aplicações empresariais
Spring Data MongoDB Documento (NoSQL) Integração com MongoDB, um banco de dados NoSQL baseado em documentos - Schema-less, escalabilidade horizontal
- Bom para armazenamento de grandes volumes de dados semi-estruturados
Spring Data Redis Chave-valor (NoSQL) Acesso rápido a estruturas de dados em memória com Redis - Alta performance para operações de leitura e gravação
- Suporte a estruturas de dados complexas como listas e sets
Spring Data Elasticsearch Busca e Análise Integração com Elasticsearch para funcionalidades de busca poderosas - Suporte a indexação e pesquisa full-text
- Análises e agregações complexas
Spring Data Cassandra Colunar (NoSQL) Suporte para o banco de dados distribuído Apache Cassandra - Escalabilidade horizontal
- Adequado para grandes volumes de dados com gravação rápida
Spring Data R2DBC (Reativo) Relacional (Reativo) Acesso reativo a bancos de dados SQL - Não bloqueante, suporte para backpressure
- Integra bem com aplicações reativas usando Spring WebFlux
Spring Data Couchbase Documento (NoSQL) Integração com Couchbase para aplicações distribuídas e escaláveis - Combinação de NoSQL com busca full-text
- Suporte a replicação e persistência
julian-gamboa-bahia commented 1 month ago
Característica Tomcat Netty
Tipo Servidor Web e Container de Servlet Servidor de rede assíncrono e framework para o desenvolvimento de aplicações em rede
Modelo de Programação Baseado em Threads e Blocos Event-driven (Orientado a eventos) e não bloqueante
Uso com Spring Utilizado predominantemente com Spring MVC Utilizado com Spring WebFlux para aplicações reativas
Performance Alto desempenho em aplicações baseadas em modelo de thread tradicional Superior em cenários com muitas conexões simultâneas devido ao seu modelo não bloqueante
Escalabilidade Escala bem até um certo ponto, mas pode ser limitado pelo número de threads Altamente escalável devido ao seu modelo de I/O não bloqueante
Complexidade Relativamente simples de usar e configurar para aplicações web tradicionais Maior curva de aprendizado devido à programação assíncrona e ao gerenciamento manual de estado
Flexibilidade Menos flexível, focado em HTTP/Servlets Extremamente flexível, suporta vários protocolos e permite controle fino sobre o tráfego de rede
Comunidade e Suporte Forte comunidade e amplamente adotado, com suporte extensivo Comunidade ativa e crescente, popular em aplicações de alto desempenho
Casos de Uso Típicos Aplicações web empresariais, sistemas de gerenciamento de conteúdo, fóruns, etc. Aplicações de tempo real, jogos, servidores de chat, IoT, serviços de streaming, etc.
Implementação Servlet API API própria que pode ser mais complexa mas oferece controle mais granular
julian-gamboa-bahia commented 1 month ago
Aspecto Boas Práticas
Configuração - Externalize a configuração e use o application.properties ou application.yml para ambientes distintos.
- Use @ConfigurationProperties para agrupar propriedades relacionadas.
- Evite valores de configuração hardcoded no código; prefira injetá-los via propriedades Spring.
Estrutura do Projeto - Siga a estrutura padrão do Maven/Gradle sugerida pelo Spring Initializr para manutenção e compreensibilidade.
- Organize o código em pacotes baseados em componentes ou funcionalidades, não por tipo (controller, service, etc.).
Desenvolvimento de APIs - Use @RestController para serviços web e defina claramente os endpoints com @RequestMapping.
- Valide a entrada do usuário no lado do servidor usando @Valid e manipuladores de exceção.
Acesso a Dados - Prefira o Spring Data JPA ou similar para abstrair o acesso ao banco de dados e reduzir o boilerplate.
- Use o padrão Repository para separar a lógica de negócios da persistência de dados.
Segurança - Integre o Spring Security para gerenciar autenticação e autorização.
- Use HTTPS para proteger os dados em trânsito e valide rigorosamente os dados de entrada para evitar injeções SQL e outros ataques.
Performance - Use caching apropriado com @EnableCaching para melhorar a performance de operações de leitura frequentes.
- Monitore e otimize a utilização de recursos (como conexões de banco de dados e threads).
Testes - Escreva testes unitários e de integração usando JUnit, Mockito e Spring Test.
- Use @SpringBootTest para testes de integração que necessitam de um contexto de aplicação e @DataJpaTest para testar interações de banco de dados isoladas.
Manutenção - Mantenha as dependências atualizadas e verifique regularmente as vulnerabilidades de segurança.
- Documente a API usando Swagger ou Spring Rest Docs.
Logs e Monitoramento - Configure adequadamente os níveis de log usando o SLF4J junto com uma implementação como Logback.
- Integre ferramentas de monitoramento como Actuator para monitorar a saúde e métricas da aplicação em tempo real.