Aller au contenu

Seaway — Architecture Overview

Cette documentation présente les principes d'architecture et les pratiques d'ingénierie du projet.

Les détails opérationnels et configurations d'infrastructure internes sont intentionnellement omis.

Contexte général

Seaway est un projet backend / frontend développé from scratch. L'objectif était de construire un système réaliste permettant d'expérimenter des architectures backend modernes et des pratiques de développement proches d'un environnement de production.

Le projet sert à la fois :

  • de terrain d'apprentissage avancé
  • de démonstration de compétences techniques
  • de base pour documenter des décisions d'architecture

Architecture Backend

Stack

  • Java 21
  • Spring Boot
  • Spring Data JPA
  • Kafka
  • PostgreSQL

Architecture hexagonale

Le backend suit une architecture hexagonale avec séparation claire :

domain
application
infrastructure

Utilisation de ports et adapters pour isoler le domaine des dépendances techniques.


Event-Driven Architecture

Kafka est utilisé comme bus d'événements.

Le système produit des événements métier comme :

  • EntityCreated
  • EntityUpdated
  • EntityDeleted

Objectifs :

  • découplage des composants
  • traçabilité
  • possibilité d'évolution vers des microservices

Fiabilité

Plusieurs mécanismes ont été implémentés :

  • idempotence pour éviter les doublons
  • retry avec backoff
  • Dead Letter Topics (DLT)

CQRS léger

Séparation entre :

write model
read model

Le read model est optimisé pour la consultation par l'interface utilisateur.


Audit événementiel

Les événements produits sont persistés afin de permettre :

  • traçabilité des actions
  • reconstitution d'état
  • analyse ultérieure

Persistence

Base de données : PostgreSQL

Gestion de types avancés :

  • JSONB
  • enums
  • dates

Scripts SQL d'initialisation utilisés pour préparer l'environnement.


Sécurité

Mise en place de :

  • Spring Security
  • reverse proxy via Nginx

Frontend

Stack :

  • React
  • Vite
  • TypeScript
  • Tailwind

Interface orientée dashboard.

Fonctionnalités :

  • liste des séjours
  • détail séjour
  • création / modification

Une tentative d'intégration SSE pour le temps réel a été réalisée côté backend, mais abandonnée temporairement côté frontend pour des raisons pragmatiques.


Tests & Qualité

Tests mis en place progressivement :

  • tests unitaires
  • @WebMvcTest pour les contrôleurs
  • tests Kafka

Outils :

  • Embedded Kafka
  • Testcontainers

Déploiement

Environnement conteneurisé :

Docker
Docker Compose

Services :

  • backend
  • PostgreSQL
  • Kafka

Gestion de profils Spring :

dev → H2
postgres → PostgreSQL


Améliorations en cours

Plusieurs axes d'amélioration ont été identifiés :

  • mise en place d'un pipeline CI/CD
  • build automatisé
  • push d'images Docker
  • séparation claire des environnements

Ces sujets feront l'objet d'une phase de consolidation.


Objectif du projet

Ce projet vise à développer des compétences avancées en :

  • architecture backend
  • systèmes distribués
  • messaging
  • fiabilité
  • déploiement

L'objectif à long terme est de consolider un niveau d'ingénieur backend senior.