Projet
Seaway
Seaway est un projet full-stack architecture conçu pour démontrer des pratiques modernes d’ingénierie logicielle, incluant clean architecture, event-driven systems et APIs production-ready. La plateforme combine un backend Java scalable avec un frontend React et des patterns de déploiement production-oriented.
Architecture du système
Seaway est conçu autour d’une architecture en couches inspirée des principes de l’architecture hexagonale. Le système sépare clairement le domain, la logique applicative et l’infrastructure afin de garantir des boundaries explicites et une long-term maintainability.
Domain layer
Contient les entités métier, la logique métier et les invariants du domaine. Le domain reste isolé des frameworks et des dépendances d’infrastructure.
Application layer
Implémente les use cases via des command et query handlers. Cette couche orchestre la logique du domaine sans contenir de règles métier.
Infrastructure layer
Adapters pour la persistence, la messagerie et les services externes, incluant des repositories PostgreSQL et des producers/consumers Kafka.
API layer
Contrôleurs REST exposant des endpoints validés avec error handling standardisé et filtering sécurisé.
Interface frontend
L’interface utilisateur est développée avec React et Tailwind CSS, fournissant un client léger pour interagir avec l’API. Le frontend met l’accent sur des component boundaries claires et une architecture UI maintenable.
- Architecture de composants React
- Tailwind CSS pour la cohérence du design system
- Intégration API avec les services backend
Vue d’ensemble de l’architecture
Architecture hexagonale
Workflows event-driven
La plateforme utilise Kafka pour orchestrer des workflows asynchrones entre les différents composants du système. Les événements permettent aux services de rester faiblement couplés tout en assurant scalabilité et résilience.
Event publishing
Les domain events sont publiés lors de changements d’état significatifs afin de permettre aux autres services de réagir de manière asynchrone.
Retry strategies
Les événements échoués sont rejoués avec des stratégies de backoff avant d’être redirigés vers des dead-letter topics pour inspection.
Consumers idempotents
Les consumers sont conçus pour traiter les événements plusieurs fois en toute sécurité afin de garantir la cohérence du système dans un environnement distribué.
Flux de traitement des événements
Points techniques clés
Architecture hexagonale
Séparation claire entre domain, application et infrastructure pour garantir maintenabilité et testabilité.
Design CQRS
Séparation des commandes et des requêtes permettant une évolution indépendante des read models et des opérations d’écriture.
Workflows event-driven
Messaging basé sur Kafka permettant des services faiblement couplés et un traitement distribué résilient.
Pratiques de sécurité
- DTO validation avec Bean Validation
- Error handling centralisé
- Pagination et filtering sécurisés
- Secrets externalisés via variables d’environnement
- API design aligné avec les pratiques OWASP
- Durcissement des conteneurs Docker
- Exécution des conteneurs en non-root
- Filesystem en lecture seule
- Reverse proxy avec Nginx
- Rate limiting au niveau infrastructure
Architecture
- Architecture hexagonale
- Pattern CQRS
- Event processing avec Kafka
- PostgreSQL
Stack
- Java 21
- Spring Boot
- Kafka
- PostgreSQL
- React
- Tailwind CSS
- Docker
- Nginx