Skip to Content
PortfolioDelivery App

Delivery App

Multi-Module Delivery App Project | 2023.09 ~ 2023.11

Developed a multi-module-based delivery app backend system aimed at applying MSA architecture. Built a scalable architecture through domain-specific module separation and asynchronous communication.

🛠 Tech Stack

  • Framework: Spring Boot
  • Lang: Java, Kotlin
  • Infra: RabbitMQ, MySQL
  • DevOps: Docker

🛠 Overall Contributions

  • Built independent deployment environment for each domain through multi-module architecture design
  • Improved resource efficiency with RabbitMQ-based asynchronous communication Details
  • Enhanced code reusability and domain focus through common module separation
  • Reduced code volume and improved stability through Kotlin migration Details

💡 Key Technical Challenges and Solutions

RabbitMQ-Based Asynchronous Order Processing System

  • Problem:

    • Resource waste due to maintaining HTTP Connection throughout customer order → store owner approval → response return in synchronous approach
    • Increased customer waiting time and Connection Timeout risk when store owner response is delayed
  • Solution Process:

    • Redesigned order processing flow based on asynchronous messaging
    • Implemented order event publish/subscribe structure using RabbitMQ Topic Exchange
    • Immediate response upon customer order, then created order topic in RabbitMQ
    • Store Admin server subscribes to order topics and delivers notifications to store owners
    • Real-time notifications to customer browsers via SSE (Server-Sent Events) upon store owner approval
  • Result:

    • Reduced HTTP Connection resource usage and improved responsiveness
    • Enhanced system scalability through asynchronous processing

Multi-Module Architecture Design

  • Problem:

    • Increased coupling between domains due to single monolithic structure
    • Need for full system redeployment when specific domain changes
  • Solution Process:

    • Designed module structure for domain-specific responsibility separation
      • api: Consumer service logic
      • account: Authentication/authorization management
      • store-admin: Store owner management
      • api-gateway: Routing and common processing
      • common: Common utilities and configurations
      • db: Data access layer
    • Configured independent build/deployment environment for each module
    • Eliminated duplicate code and ensured consistency through common modules
  • Result:

    • Established foundation for MSA transition through independent deployment per domain
    • Improved code reusability and development productivity

Enhanced Code Stability Through Kotlin Migration

  • Problem:

    • Risk of Null Pointer Exception in Java-based code
    • Reduced development productivity due to boilerplate code
  • Solution Process:

    • Gradually migrated existing Java code to Kotlin
    • Eliminated NPE occurrence possibility at source through Null Safety features
    • Significantly reduced DTO/Entity code volume using Data Classes
    • Improved utility method readability through Extension Functions
  • Result:

    • Reduced code volume and improved runtime stability
    • Enhanced developer experience leading to increased productivity