« Card Market » — une application de marché de cartes à collectionner, conçue dans le cadre d’un projet de développement web à CPE Lyon. Le cœur de l’exercice : reprendre un monolithe Spring Boot et le découper en microservices déployables indépendamment.
Le projet
Projet de groupe (4 personnes). Les utilisateurs s’authentifient, gèrent leur collection de cartes, échangent dans un store, discutent via un chat temps réel et génèrent images / textes / propriétés de cartes via des services dédiés.
L’enjeu d’architecture : isoler chaque responsabilité — auth, utilisateurs, chat, génération, logging, matchmaking — dans son propre service, relier le tout par un bus de messages, et exposer un point d’entrée unique via un proxy.
Ce sur quoi j’ai travaillé
- Authentification & utilisateurs — service
ms-auth(Spring Boot) et CRUD utilisateurs en JPA/H2, exposés en REST. - Chat temps réel — backend Node.js + Socket.IO (room générale et rooms privées), avec persistance des messages côté Spring.
- Services de génération — image, texte et propriétés de cartes, chacun un microservice Spring Boot indépendant.
- Communication inter-services — REST synchrone (
RestTemplate,axios) et messaging asynchrone via ActiveMQ / JMS pour découpler producteurs et consommateurs (logging). - Frontend — front HTML/JS de l’atelier initial, puis migration vers Next.js + React + Redux ; comparatif des frameworks frontend.
- Schéma d’architecture de la nouvelle application distribuée.
La stack
Java 17 + Spring Boot (Web, Data JPA, JMS), H2 en mémoire, Swagger pour la doc
d’API. Côté Node.js : Express, Socket.IO et un proxy http-proxy-middleware.
Front en Next.js / React / Redux Toolkit. Build Maven, pipelines GitLab CI et
conteneurisation Docker.
Ce que j’en ai retenu
Le plus dur n’est pas d’écrire un microservice. C’est de les faire dialoguer.
Trois questions reviennent en permanence : quand utiliser un appel REST direct, et quand passer par un message asynchrone (ActiveMQ) ? Comment faire cohabiter proprement du code Java et du code Node.js dans le même système ? Et comment tester un parcours qui traverse cinq services à la suite ?
Surtout, j’en retiens qu’une appli découpée en dix briques coûte beaucoup plus en orchestration, en tests et en discipline qu’un monolithe. Le découpage ne vaut le coup que si chaque service a une vraie raison d’exister à part — pas juste pour faire « microservices » sur un CV.