Traditionally, applications evolved as monolithic units, where every feature and component resided within a single, large codebase. While this approach offered initial simplicity, it presented challenges as the application expanded in size and complexity. As demands for greater performance, flexibility, and resilience rose, organizations began to