====== LU16a - Die Zwölf-Faktoren-App ====== In der Praxis haben sich verschiedene Vorgehen bewährt. Im Folgenden möchte ich die Grundsätze der Zwölf-Faktoren-App (https://12factor.net/de/) vorstellen. - **Codebase** \\ Eine im Versionsmanagementsystem verwaltete Codebase, viele Deployments \\ ✅ Empfehlung: Git ℹ️ Deployments (Dev / Test / Prod) werden im nächsten Semester behandelt. \\ \\ - **Abhängigkeiten** \\ Abhängigkeiten explizit deklarieren und isolieren \\ ✅ Empfehlung: Maven(pom.xml) oder Gradle(build.gradle) bei Java, Pip(requirement.txt) bei Python, Npm/Yarn(package.json) bei JavaScript/TypeScript \\ \\ - **Konfiguration** \\ Die Konfiguration in Umgebungsvariablen ablegen \\ ✅ Keine Secrets in Git eingecheckt ℹ️ Konfiguration der Deployments werden im nächsten Semester behandelt. \\ \\ - **Unterstützende Dienste** \\ Unterstützende Dienste als angehängte Ressourcen behandeln \\ ✅ Datenbank o. Ä. austauschbar. Adressen nicht hartcoden. Empfehlung: .properties-Datei \\ \\ - **Build, release, run** \\ Build- und Run-Phase strikt trennen \\ ℹ️ Das Thema wird im nächsten Semester behandelt. \\ \\ - **Prozesse** \\ Die App als einen oder mehrere Prozesse ausführen \\ ✅ Zustandslosigkeit durch Persistierung sicherstellen \\ \\ - **Bindung an Ports** Dienste durch das Binden von Ports exportieren \\ ✅ Spring Boot erfüllt das automatisch. Die Ports sind konfigurierbar und werden nicht vorausgesetzt. \\ \\ - **Nebenläufigkeit** \\ Mit dem Prozess-Modell skalieren \\ ✅ Aufgrund Zustandslosigkeit kann Skaliert werden, ohne manuelle Thread-Manipulation \\ \\ - **Einweggebrauch** \\ Robuster mit schnellem Start und problemlosen Stopp \\ ✅ Start, Stopp, Reconnect mittels Spring-Framework möglich \\ \\ - **Dev-Prod-Vergleichbarkeit** \\ Entwicklung, Staging und Produktion so ähnlich wie möglich halten \\ ℹ️ Das Thema wird im nächsten Semester behandelt. \\ \\ - **Logs** \\ Logs als Strom von Ereignissen behandeln \\ ✅ SLF4J o. Ä. nutzen korrekt Streams, die man nach Bedarf umleiten kann. \\ \\ - **Admin-Prozesse** \\ Admin/Management-Aufgaben als einmalige Vorgänge behandeln \\ ✅ Init-Skripte o.Ä. sind separat von der App. \\ \\