15. Sep 2025

Agentic Coding in Aktion: Microservices mithilfe von KI von JavaScript nach Kotlin/Spring Boot migrieren

Die Softwareentwicklung befindet sich im Umbruch: KI-gestützte Tools verändern nicht nur das Programmieren selbst, sondern auch die Planung und Weiterentwicklung von Softwareprojekten. Besonders bei komplexen Aufgaben wie der Migration von Alt-Systemen bieten große Sprachmodelle und automatisierte Entwicklungsumgebungen neue Möglichkeiten. In diesem Artikel zeigen Joel Tschesche und Julian Fess anhand eines Praxisbeispiels – der Transformation von Node.js-Services zu Java Spring Boot Microservices – wie moderne KI-Tools eingesetzt werden können, welche Chancen und Grenzen sie bieten und wie sie gezielt bei Migrationsprojekten unterstützen.
1060 x 710 Tschesche Joel

Author

Joel Tschesche

1060 x 710 Julian Fess

Author

Julian Fess

2025008 Accso Con Header

    Projektziele & Anforderungen

    Das Projektziel war es, den Migrationsprozess so weit wie möglich an die KI abzugeben und nur dort einzugreifen, wo menschliches Urteilsvermögen gefragt ist. Konkret sollten die JavaScript-Services automatisiert in schlanke Kotlin‑Spring-Boot‑Microservices überführt werden, die per Docker-Container laufen.

    Neben dem reinen Funktionsumfang legten wir großen Wert auf Wartbarkeit, eine klar strukturierte Architektur, Unit-Tests für alle zentralen Funktionen und eine flexible Konfiguration über externe Dateien.

    Migrationsprozess im Detail

    Projektkontext

    Grundlage des Projekts war das Backend einer Anwendung, die verschiedene Schnittstellen für kommunale Daten bereitstellt wie beispielsweise Wetterdaten, Abfuhrkalender und ÖPNV-Informationen. Es basiert auf Node.js und dem  Parse Server Framework. Die Services kommunizieren mit externen APIs (z. B. OpenWeather) und persistieren die Daten über Parse Server.

    Als Proof‑of‑Concept migrierten wir zunächst den einfachen Weather Service; komplexere Schnittstellen sollten folgen.

    Um verschiedene KI‑Agenten zu vergleichen, entschieden wir uns, zwei parallele Migrationspfade zu testen: einmal mit Cursor AI, einmal mit dem GitHub Copilot Agent. Für Letzteren standen uns Unternehmenslizenzen von Accso zur Verfügung.

    Migration mit Github Copilot

    Mit GitHub Copilot starteten wir eine initiale Prompt-Session, in der der Agent die Codebasis analysierte, relevante JavaScript-Dateien extrahierte und ein neues Kotlin‑Spring-Boot‑Projekt anlegte. Im nächsten Schritt haben wir den Agenten schrittweise angeleitet und alle wichtigen Komponenten – von Datenmodell und Controllern über die OpenWeatherMap-Integration bis hin zum Scheduling – zu erzeugen. Zwischendurch forderten wir Feedback zu Architektur, Codequalität und Testabdeckung an und ließen uns schließlich beim Aufräumen des alten JavaScript-Codes im Parse Server sowie bei der Konfiguration der neuen REST-Endpunkte unterstützen.

    Eingesetzte Prompts (Auszug)

    Initiale Zielsetzung & Code-Extraktion
    „My goal is to migrate the Weather Service from my Node.js Parse Server backend into a new Kotlin‑Spring Boot microservice that communicates via REST with the Parse Server. Please identify and extract all relevant JavaScript code for this service.“

    Komponenten‑Migration
    „Migrate the following points from JavaScript to Kotlin/Spring Boot:

    • Data model and entity structure
    • API endpoints and controllers
    • OpenWeatherMap integration
    • Scheduling and job management
      Keep the search integration in the Parse Server and use its REST API for data persistence.“

    Qualitäts‑Check
    „Bitte gib Feedback zur Architektur, Codequalität und Testabdeckung dieses Services.“
    „Überprüfe, ob alle notwendigen Funktionen zum Abruf von Wetterdaten und Speichern im Parse Server korrekt implementiert wurden. Gibt es funktionale Unterschiede?“

    Parse‑Server Cleanup
    „Ich habe den Weather Service erfolgreich in einen Spring Boot‑Microservice migriert. Bitte schlage eine Strategie vor, um die alten JavaScript-Funktionen aus dem Parse Server zu entfernen und die neuen REST-Endpunkte korrekt zu konfigurieren.

    Migration mit Cursor AI

    Bei der Migration mit Cursor AI verfolgten wir einen leicht abgewandelten Ansatz: Zunächst checkten wir den Node.js-Quellcode aus und legten anschließend alle verfügbaren Spezifikationsdateien in einen requirements-Ordner. Anschließend wiesen wir Cursor an, die Migration Schritt für Schritt durchzuführen. Zunächst wurden Kotlin‑Klassenschemata generiert, dann wurde die Funktionalität nach Kotlin übersetzt und anschließend automatisch passende Unit‑Tests erstellt. Dieser konsequent testgetriebene Workflow stellte sicher, dass jede Portierung sofort validiert wurde, wodurch sich die Zuverlässigkeit und Transparenz des Gesamtprozesses erhöhten.

    Copilot vs. Cursor: Ein Vergleich

    Beide Tools lieferten gute Ergebnisse bei der Analyse, Transformation und Dokumentation des Codes. Besonders bei Standardaufgaben wie dem Aufsetzen einer Spring-Boot Anwendung, der Integration von JUnit-Tests oder der Dockerisierung konnte die KI nahezu autonom arbeiten.

    KriteriumCursor AIGitHub Copilot Agent
    IDE‑IntegrationEigenständige Cursor IDE, optimiert für LLC‑Workflows und Spezifikations‑ManagementNahtlose Einbindung in VS Code/GitHub Codespaces
    LernkurveEigene IDE erfordert EingewöhnungBekanntes VS Code‑Interface, mit Chat-Interface
    Kosten & LizenzenKostenlos bis 150 Anfragen/Monat, danach kostenpflichtige PläneUnternehmenslizenz vorhanden

    Erkenntnisse & Best Practices

    Was funktioniert gut

    • KI-gestützter Projekt-Setup: 
      Die initiale Einrichtung einer Entwicklungsumgebung, inklusive Dockerisierung und Anwendungsrahmen im bevorzugten Framework (z. B. Spring Boot), funktioniert mit KI-Unterstützung zuverlässig und weitgehend autonom.
    • Iterative Assistenz:
      Bei vielen Entwicklungsaufgaben, insbesondere Standardfällen, können LLMs wie Copilot oder Cursor effektiv unterstützen, wenn sie schrittweise und gezielt eingesetzt werden.
    • Entkopplung von Technologie-Details:
      Entwickler:innen müssen nicht jede Zeile Kotlin oder Spring Boot im Detail beherrschen. Entscheidend ist ein solides Verständnis für saubere Softwarearchitektur und Qualitätsprinzipien.
    • Code Translation
      Beide Tools sind in der Lage, Code zwischen Programmiersprachen zu übersetzen. Bei korrekter Anleitung erfolgt dies in der Regel funktionserhaltend. So lassen sich beispielsweise JavaScript-Services automatisiert in Kotlin überführen.
    • Dokumentationserstellung: 
      Ob technische API-Dokumentation oder erklärende Kommentare: Moderne KI-Werkzeuge erstellen eine strukturierte und verständliche Dokumentation für neue oder bestehende Projekte.
    • Schnelle Einarbeitung: 
      Der interaktive Umgang mit LLMs (z. B. durch gezielte Fragen in Copilot oder Cursor) ermöglicht eine deutlich schneller Einarbeitung in neue Codebasen, insbesondere bei unbekannten Technologien oder Architekturen.

    Was problematisch sein kann

    • Fehlende Kontextkontrolle
      Bei komplexen Prompts generieren Tools auch unnötige Dateien.
    • Loop-Effekte & chaotisches Verhalten:
      Manchmal führt die Behebung eines Problems durch den Agenten zu einem neuen Problem, das wiederum das ursprüngliche Problem zurückbringt, ein klassischer Loop. Hier kann es helfen, eine externe Sicht (z. B. über ChatGPT ohne IDE) einzunehmen.
    • Verständnisverlust durch Automatisierung: 
      Da Agents oft eigenständig Code generieren, modifizieren und testen, besteht die Gefahr, dass Entwickler:innen den Überblick verlieren, insbesondere bei sicherheitsrelevanten oder komplexen Komponenten.
    • Kritische Schnittstellen erfordern Fachkenntnisse
      In sicherheitsrelevanten Bereichen ist ein tiefes Verständnis der eingesetzten Technologie zwingend erforderlich, denn am Ende trägt der Mensch die Verantwortung für den produzierten Code.
    • Fehlende Reproduzierbarkeit
      Selbst bei identischen Prompts kann ein LLM unterschiedliche Ergebnisse liefern. 

    Best Practices für KI-gestützte Migrationen

    • Klare Spezifikation anlegen
      Vor dem ersten Prompt sollte eine schriftliche Zieldefinition vorliegen: verwendete Sprache, Framework, relevante Bibliotheken, Integrationsgrenzen etc. Je konkreter das Zielbild, desto besser das Ergebnis.
    • In Teilschritte zerlegen
      Komplexe Aufgaben lassen sich selten mit einem einzigen Prompt lösen. Stattdessen ist eine iterative Planung, logische Teilaufgaben, gezielte Feedback-Loops mit der KI sinnvoll
    • Technologie bewusst einsetzen
      LLMs sind Werkzeuge und kein Ersatz für Architektur-Know-how. Entwickler:innen sollten stets kritisch prüfen, was erzeugt wird, und bei sensiblen Komponenten selbst Verantwortung übernehmen.

    Fazit

    Die Migration von Node.js zu Kotlin Spring Boot ist mit Unterstützung durch moderne KI-Werkzeuge wie GitHub Copilot Agent und Cursor AI heute wesentlich effizienter möglich als noch vor wenigen Jahren. Diese ermöglichen die teilweise oder vollautomatische Umsetzung einzelner Services, von Datenmodellen über Schnittstellen bis hin zur Testabdeckung.

    Unsere Erfahrungen zeigen jedoch klar: KI ist ein mächtiger Helfer, aber kein Ersatz für fundiertes Architekturverständnis, sauberes Engineering und kritisches Qualitätsbewusstsein. Ein überzeugendes Ergebnis entsteht nur durch das Zusammenspiel aus klaren Zielen, menschlichen Überprüfungen und gezieltem KI-Einsatz

    KI ist kein Selbstzweck, sondern ein Werkzeug. Je klarer das Ziel, desto nützlicher der Assistent.