Breezy
Réseau social léger et réactif inspiré de Twitter/X, conçu en architecture microservices.
Contexte du projet
Breezy a été réalisé dans le cadre de mon cursus à CESI école d'ingénieurs, en équipe de 4, pour le module Développement d'applications distribuées. L'objectif était de concevoir un réseau social léger, optimisé pour des environnements à faibles ressources, permettant de publier des messages courts, d'interagir avec d'autres utilisateurs et de maintenir une expérience rapide et fluide.
Le back-end repose sur Node.js / Express avec une API REST, l'authentification est gérée par JWT, et le front-end est construit en React selon une approche mobile-first. L'ensemble des services est containerisé avec Docker pour simplifier le déploiement.
Architecture microservices
L'application est découpée en 3 niveaux : un frontend qui consomme et affiche les données, une API Gateway (NGINX) qui centralise le routage des requêtes, et un ensemble de microservices qui portent chacun un domaine fonctionnel précis.
Le découpage des services s'est fait selon trois critères : l'indépendance de déploiement, la propriété des données (chaque service possède sa propre base de données) et la charge de sollicitation justifiant l'isolement.
- IAM Service : authentification, identifiants et émission des JWT (PostgreSQL)
- User Service : profils publics et relations de follow (MongoDB)
- Post Service : posts, commentaires et likes (MongoDB)
- Feed Service : agrégation des posts des comptes suivis, logique de recommandation
- Modération Service : signalements et sanctions (MongoDB)
Organisation du code en Clean Architecture
Chaque microservice est structuré en couches pour séparer clairement les responsabilités :
- Domain : entités métier (ex : Profile) et interfaces de repositories
- Application : cas d'usage (créer, récupérer, mettre à jour un profil...) et DTO
- Infrastructure : modèles Mongoose, repositories concrets et mappers vers le domaine
- Interfaces : controllers HTTP et middlewares (JWT, rôles, ownership)
Cette organisation garde des controllers légers, des cas d'usage centrés sur la logique métier, et rend les microservices plus homogènes, ce qui facilite leur maintenance.
Galerie



