Translated all remaining English architectural documents into German, including ADRs, guides, release notes, and reference materials. Standardized formatting across translated files, updated section headings, and localized inline comments within code examples for consistency.
3.4 KiB
3.4 KiB
| type | status | owner |
|---|---|---|
| ADR | ACTIVE | Lead Architect |
ADR 001: Backend-Infrastruktur & Architekturentscheidungen
Status: AKZEPTIERT
Datum: 2026-01-15
Autor: Lead Architect
Kontext: „Operation Tracer Bullet" (Phase 1) – Härtung des ping-service.
1. Persistenzstrategie: JPA vs. Exposed
Entscheidung: Hybrider Ansatz (Command/Query-Trennung)
- Primär (Command/Write): Wir verwenden JPA (Hibernate) für das Standard-„Write Model" in unseren Microservices.
- Begründung: Beste Integration mit Spring Data, Transaktionsverwaltung und Validierung. Standard für Enterprise Spring Boot.
- Sekundär (Query/Read/Batch): Wir erlauben Exposed für komplexe Leseabfragen oder Bulk-Operationen, bei denen der JPA-Overhead zu hoch ist.
- Begründung: Kotlin-nativ, typsichere SQL-Generierung, bessere Performance bei leselastigen Operationen.
Maßnahmen:
- Das Modul
backend/infrastructure/persistenceunterstützt beide Ansätze. ping-serviceverwendet primär JPA für seine Entitäten (PingEntity).- JPA wird NICHT aus dem
ping-serviceentfernt. - Exposed wird NICHT aus
infrastructure/persistenceentfernt.
2. Gemeinsames Security-Modul
Entscheidung: Extraktion von backend/infrastructure/security
- Begründung: Wir folgen konsequent dem DRY-Prinzip (Don't Repeat Yourself). Die Sicherheitskonfiguration (OAuth2 Resource Server, JWT Converter, CORS, Global Method Security) ist für alle Microservices identisch.
- Umfang:
SecurityConfig: StandardSecurityFilterChain.KeycloakRoleConverter: Rollen aus JWT extrahieren.CorsConfig: Zentrale CORS-Richtlinie.
Maßnahmen:
backend/infrastructure/securityerstellen.- Sicherheitslogik aus
ping-service(falls vorhanden) in dieses Modul verschieben.
3. Messaging vs. Sync-Protokoll
Entscheidung: REST-basiertes Pull (Phase 1) → Kafka (Phase 3)
- Phase 1 (Tracer Bullet): Für den einfachen
ping-servicewird Kafka noch NICHT verwendet.- Begründung: Die „Tracer Bullet" soll einfach bleiben. Zuerst die HTTP/Auth-Kette validieren.
- Phase 3 (Offline-Sync): Kafka wird später für das „Outbox Pattern" eingeführt.
- Begründung: Zuverlässige Event-Zustellung für Offline-Clients erfordert ein dauerhaftes Log.
Maßnahmen:
reactor-kafka-Abhängigkeit vorerst ausping-serviceentfernen, um die Komplexität zu reduzieren.- Fokus auf
PingEntity(JPA) und REST-Endpunkte.
4. Datenbank-Migration (Flyway)
Entscheidung: Datenbank pro Service (Option A)
- Begründung: Autonomie der Microservices. Jeder Service besitzt sein eigenes Schema.
- Ablageort:
src/main/resources/db/migrationinnerhalb jedes Service-Moduls. - Benennung:
V{Version}__{Beschreibung}.sql(z.B.V1__init_ping_schema.sql).
Maßnahmen:
ping-servicemussV1__init.sqlenthalten.spring.flyway.enabled=trueinapplication.yml.
Zusammenfassung der Aufgaben für den Senior Backend Developer
- Persistenz: JPA für
PingEntityverwenden. - Security: Auf das Modul
infrastructure/securitywarten (Architect erstellt Skeleton) ODER direkt imping-serviceimplementieren und später refaktorieren (bevorzugt: Architect erstellt Modul sofort). - Messaging: Kafka vorerst ignorieren.
- Flyway:
V1__init.sqlimping-serviceerstellen.