Skip to content

Infrastructure and tools

DanDuguay edited this page Nov 9, 2024 · 2 revisions

Backend (Spring Microservices)

Name Type Description
Spring Framework
  • Purpose: Foundation for building scalable, production-ready Java applications.

  • Use: Used with Spring Boot to create each microservice. Spring offers modules for web applications, security, data access, and messaging, which are essential for microservices.
MongoDB Database
  • Purpose: NoSQL database optimized for flexible, schema-less storage.

  • Use: Often chosen for microservices needing high scalability and flexibility. Its document-oriented nature fits well with JSON-like data structures and is ideal for real-time applications.
Redis Database
  • Purpose: In-memory data store, used as a cache or message broker.

  • Use: Used for caching frequently accessed data to improve performance or as a message broker for event-driven communication between services.
Keycloak Tool
  • Purpose: Open-source Identity and Access Management.

  • Use: Manages authentication and authorization, provides single sign-on, and integrates with OAuth2 and OpenID Connect for secure microservice access.
MinIO Database
  • Purpose: Object storage similar to Amazon S3.

  • Use: Used for storing large unstructured data like media files or backups, often needed in applications with extensive data storage needs.

Frontend (React Native Mobile App)

Name Type Description
React Native Framework
  • Purpose: Framework for building native mobile apps with JavaScript and React.

  • Use: Allows for a shared codebase between iOS and Android, speeding up mobile development while retaining a native look and feel.
Redux Library
  • Purpose: State management library.

  • Use: Manages application state in a predictable way across React components, which is essential for handling data from microservices and managing app state globally.
Axios Library
  • Purpose: HTTP client to make requests to APIs.

  • Use: Facilitates communication between the React Native front end and backend microservices, enabling data retrieval and interaction.
Expo Framework
  • Purpose: Set of tools to make React Native app development easier.

  • Use: Simplifies testing and deploying React Native apps, especially in the early stages, by providing a suite of APIs and services.
Nativewind Framework
  • Purpose: CSS framework that allows Tailwind CSS styling within React Native.

  • Use: Enables fast and flexible UI styling in React Native applications, similar to Tailwind CSS in web applications.

Testing

Name Type Description
JUnit Framework
  • Purpose: Java testing framework.

  • Use: Unit testing of individual Spring microservices, ensuring functionality works as expected before integration.
Jest Framework
  • Purpose: JavaScript testing framework.

  • Use: Used for testing the React Native front end, especially functional and unit tests for components, to maintain a high-quality mobile application.

DevOps & CI/CD

Name Type Description
Docker Tool
  • Purpose: Containerization platform.

  • Use: Packages each microservice as a lightweight container, enabling easy deployment and scaling across different environments.
Kubernetes Tool
  • Purpose: Container orchestration tool.

  • Use: Manages and scales Docker containers across distributed systems, ensuring that microservices are reliable, resilient, and scalable.
Helm Library
  • Purpose: Kubernetes package manager.

  • Use: Simplifies the deployment of complex Kubernetes applications, like Spring-based microservices, by using pre-configured charts.

Monitoring & Observability

Name Type Description
Grafana Tool
  • Purpose: A visualization tool for monitoring metrics.

  • Use: Provides dashboards for visualizing metrics from services and system health data, helping to identify performance issues.
Prometheus Tool
  • Purpose: Monitoring and alerting toolkit.

  • Use: Collects and stores metrics from microservices, enabling real-time monitoring and setting up alerts based on specified thresholds.

Code Quality & Analysis

Name Type Description
SonarQube Tool
  • Purpose: Continuous inspection tool for code quality and security.

  • Use: Runs static code analysis on both backend (Spring) and frontend (React Native) codebases to enforce coding standards, detect bugs, and ensure security compliance.
ESLint Tool
  • Purpose: Linter for JavaScript and TypeScript.

  • Use: Ensures consistent code quality and enforces coding standards across the React Native application, reducing bugs and improving maintainability.