modules, functionalities에 따라 분류해, 각각의 features마다 DBdesign + businessLogic + API development을 모두 다루도록 하기
(both)
Detailed requirement document and task assignment.
• Clearly define the requirements for each feature.
• Break down the service into manageable modules (e.g., “Publisher Management,” “Book Management,” “Stock Management,” etc.).
• Assign features to each person. For example:
• Person 1: Handles Publisher Management and Book Inventory.
• Person 2: Handles Orders and Stock Management.
(both)
Architecture diagram (data flow, service-to-service communication, etc.)
• Design the overall architecture of the system, including the application server (Spring Boot) and database server (MySQL, PostgreSQL, etc.).
• Agree on a shared structure for your REST API design (e.g., /publishers, /books, /orders).
(Each Person for Their Feature)
• ER Diagrams for your features.
• JPA entities with relationships and proper annotations (@OneToMany, @ManyToOne, etc.).
• Each person will design the database schema for their feature(s). For example:
• Person 1: Designs tables for Publisher, Book, and BookInventory.
• Person 2: Designs tables for Order, Stock, and Return.
• Define the relationships (one-to-many, many-to-many) using JPA annotations in Spring Boot.
• Use tools like Flyway or Liquibase to manage migrations and keep the database schema consistent.
(Each Person for Their Feature)
JPA entity classes for each feature.
• Create JPA entity classes that represent your database tables.
• Example for Person 1 (Publisher Management):
• Publisher, Book, BookInventory entities.
• Example for Person 2 (Order Management):
• Order, Stock, Return entities.
• Define relationships, constraints, and cascading operations where needed.
(Each Person for Their Feature)
Repository classes to interact with the database.
• Create Spring Data JPA repositories for each entity.
• Use repositories to handle CRUD operations for the database.
• Example for Person 1
• PublisherRepository, BookRepository.
• Example for Person 2:
• OrderRepository, StockRepository.
• Implement custom queries for complex retrievals using @Query annotations or JPA method conventions.
(Each Person for Their Feature)
Service classes that contain all the business logic.
• Implement the service classes that contain the business logic for your assigned features.
• Example for Person 1:
• PublisherService: Logic for adding, editing, and retrieving publishers.
• BookInventoryService: Logic for managing book stock and availability.
• Example for Person 2:
• OrderService: Logic for processing orders, handling returns, and updating stock.
• StockService: Logic for adjusting stock levels and validating transactions.
• Use @Transactional to manage transactions where multiple database operations need to happen atomically.
(Each Person for Their Feature)
REST API endpoints for each feature.
• Implement controllers to expose the business logic via RESTful APIs.
• Example for Person 1:
/publishers, /books, /inventory. GET /publishers to list all publishers.POST /books to add a new book./orders, /stock, /returns. POST /orders to place a new order.GET /orders/{id} to get order details.(Both)
Secured APIs with user authentication and role-based access.
• Implement security using Spring Security to protect sensitive endpoints.
• Define roles and permissions (e.g., admin vs regular users).
• Use JWT tokens or OAuth for user authentication.
• Secure routes like /inventory, /orders with proper role-based access control.
(Each Person for Their Feature)
A suite of tests to ensure both database interactions and APIs work as expected.
• Write unit tests for your service layer to ensure business logic is working correctly.
• Write integration tests for your REST APIs to ensure they respond correctly to requests.
• Use JUnit, Mockito, and Spring Boot's testing features for this.
(Both)
Fully functional database and application servers, ready for use.
• Set up the database server (MySQL, PostgreSQL) on a cloud platform or local environment.
• Set up the Spring Boot application server.
• Configure database connections in application.properties or application.yml.
(Both)
Deployed application with automated testing and deployment processes.
• Use Docker to containerize both the application and database servers for consistent deployment.
• Set up a CI/CD pipeline (e.g., GitHub Actions, Jenkins, GitLab CI) to automate testing and deployment.
• Deploy the application to a cloud platform (AWS, Azure, GCP) or use a container orchestration tool like Kubernetes.
(Both)
Finalized and optimized backend ready for production.
• Integrate all features and ensure that they work together smoothly.
• Perform load testing to ensure that the application can handle the expected number of users.
• Optimize performance for any database queries that are slow or APIs that are inefficient.