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 logicaccount: Authentication/authorization managementstore-admin: Store owner managementapi-gateway: Routing and common processingcommon: Common utilities and configurationsdb: Data access layer
- Configured independent build/deployment environment for each module
- Eliminated duplicate code and ensured consistency through common modules
- Designed module structure for domain-specific responsibility separation
-
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