Files
roadwave/docs/adr/018-librairies-go.md
jpgiannetti 852f6d5e16 refactor(docs): réorganiser ADR et règles métier pour clarté
**Changements majeurs** :

1. **Suppression ADR-010 (Commandes volant et likes)** :
   - Contenu consolidé dans Règle 05 (section 5.3)
   - Raison : ADR-010 était du métier déguisé en architecture
   - Section "Implémentation Technique" ajoutée à Règle 05
   - Pattern correct (addition) vs incorrect (multiplication)

2. **Déplacement ADR-011 → Compliance** :
   - `docs/adr/011-conformite-stores.md` → `docs/compliance/stores-submission.md`
   - Raison : Nature opérationnelle/légale, pas architecture technique
   - Nouveau dossier `/docs/compliance/` créé

3. **Renumérotation ADR (010-022)** :
   - Combler les trous de numérotation (010 et 011)
   - ADR-012→010, ADR-013→011, ..., ADR-024→022
   - 22 ADR numérotés en continu (001-022)
   - Historique Git préservé (git mv)

4. **Mise à jour références** :
   - Règle 03 : ADR-010 → Règle 05 (section 5.3)
   - Règle 09 : ADR-010 → Règle 05 (section 5.3)
   - INCONSISTENCIES-ANALYSIS.md : toutes références mises à jour
   - Incohérence #15 annulée (faux problème : modes séparés)

**Résultat** :
-  Séparation claire ADR (technique) vs Règles métier (fonctionnel)
-  Documentation compliance séparée
-  Numérotation ADR continue sans trous
-  Single Source of Truth (pas de redondance)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 14:34:12 +01:00

4.6 KiB

ADR-018 : Librairies Go du Backend

Statut : Accepté Date : 2026-01-31

Contexte

Le backend Go de RoadWave nécessite des librairies tierces pour HTTP, base de données, tests, streaming, etc. Le choix doit privilégier :

  • Licences permissives (MIT, Apache-2.0, BSD) sans restrictions commerciales
  • Performance (10M utilisateurs, 100K RPS, p99 < 100ms)
  • Maturité et maintenance active
  • Compatibilité avec PostGIS, HLS, WebRTC

Décision

Utilisation de 16 librairies open-source avec licences permissives.

Core Stack

Catégorie Librairie Licence Justification
HTTP Framework gofiber/fiber/v3 MIT 36K RPS, WebSocket natif, Express-like
PostgreSQL jackc/pgx/v5 MIT 30-50% plus rapide, PostGIS natif
Redis redis/rueidis Apache-2.0 Client-side caching, GEORADIUS
SQL Codegen sqlc-dev/sqlc MIT Type-safe, zero overhead (ADR-011)
Migrations golang-migrate/migrate MIT Standard, CLI + library

Tests

Catégorie Librairie Licence Justification
Unitaires stretchr/testify MIT Standard Go (27% adoption)
BDD cucumber/godog MIT Gherkin natif (ADR-007)
Intégration testcontainers/testcontainers-go MIT PostGIS réel dans Docker
Load grafana/k6 AGPL-3.0 Performant (OK usage interne)

Services Externes

Catégorie Librairie Licence Justification
Auth JWT zitadel/zitadel-go/v3 Apache-2.0 SDK Zitadel officiel (ADR-008)
WebRTC pion/webrtc/v4 MIT Pure Go, radio live (ADR-002)
WebSocket coder/websocket ISC Minimal, notifications (ADR-017)
FCM Push firebase.google.com/go BSD-3 SDK Google officiel (ADR-017)
HLS/FFmpeg asticode/go-astiav MIT Bindings FFmpeg n8.0

Utilitaires

Catégorie Librairie Licence Justification
Config spf13/viper MIT Multi-format, env vars
Logging rs/zerolog MIT Zero allocation, le plus rapide

Alternatives considérées

Voir analyse détaillée pour comparatifs complets :

  • Framework : Fiber vs Gin vs Echo vs Chi
  • PostgreSQL : pgx vs GORM vs database/sql
  • Redis : rueidis vs go-redis vs redigo
  • Codegen : sqlc vs SQLBoiler vs Ent
  • Logging : zerolog vs zap vs slog

Justification

Licences

  • 15/16 librairies : MIT, Apache-2.0, BSD, ISC (permissives)
  • 1/16 : AGPL-3.0 (k6 load testing, OK usage interne)
  • Compatibilité totale : Aucun conflit de licence

Performance

  • Fiber : 36K RPS (5% plus rapide que Gin/Echo)
  • pgx : 30-50% plus rapide que GORM
  • rueidis : Client-side caching automatique
  • zerolog : Zero allocation, benchmarks 2025

Maturité

  • Standards : testify (27% adoption), golang-migrate, viper
  • Production : Fiber (33K stars), pgx (10K stars), pion (13K stars)
  • Maintenance : Toutes actives (commits 2025-2026)

Conséquences

Positives

  • Aucune restriction licence commerciale
  • Stack cohérent avec ADR existants (001, 002, 007, 008, 013, 015, 019)
  • Performance validée (benchmarks publics)
  • Écosystème mature et documenté

Négatives

  • ⚠️ k6 (AGPL-3.0) : Copyleft, mais OK pour tests internes (pas de SaaS k6 prévu)
  • ⚠️ Firebase FCM : Dépendance Google (mitigation via abstraction layer, ADR-017)
  • Courbe d'apprentissage : 16 librairies à maîtriser (doc nécessaire)

Dépendances go.mod

require (
    github.com/gofiber/fiber/v3 latest
    github.com/jackc/pgx/v5 latest
    github.com/redis/rueidis latest
    github.com/sqlc-dev/sqlc latest
    github.com/golang-migrate/migrate/v4 latest
    github.com/stretchr/testify latest
    github.com/cucumber/godog latest
    github.com/testcontainers/testcontainers-go latest
    github.com/zitadel/zitadel-go/v3 latest
    github.com/pion/webrtc/v4 latest
    github.com/coder/websocket latest
    firebase.google.com/go/v4 latest
    github.com/asticode/go-astiav latest
    github.com/spf13/viper latest
    github.com/rs/zerolog latest
    grafana/k6 latest  // dev only
)

Références

  • Analyse complète des librairies (tableaux comparatifs, sources)
  • ADR-001 : Langage Backend (Fiber, pgx, go-redis)
  • ADR-007 : Tests BDD (Godog)
  • ADR-011 : Accès données (sqlc)
  • ADR-011 : Stratégie tests (testify, testcontainers, k6)
  • ADR-017 : Notifications (WebSocket, FCM)