https://github.com/nosibi/product-order-app
상품, 회원 정보를 관리하고 주문 처리 및 내역 관리
https://github.com/nosibi/product-order-app
java17 mariadb querydsl-jpa restful-api spring-boot swagger3 validation
Last synced: about 1 month ago
JSON representation
상품, 회원 정보를 관리하고 주문 처리 및 내역 관리
- Host: GitHub
- URL: https://github.com/nosibi/product-order-app
- Owner: nosibi
- Created: 2025-07-22T15:00:24.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-08-18T01:01:09.000Z (10 months ago)
- Last Synced: 2025-08-18T03:05:58.341Z (10 months ago)
- Topics: java17, mariadb, querydsl-jpa, restful-api, spring-boot, swagger3, validation
- Language: Java
- Homepage:
- Size: 78.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 상품 주문 처리
## 1. 계층 설계
- Controller, Service, DAO, DB로 계층 구성
- Controller -> Service 에서는 DTO를 통해 데이터를 받아 Service 계층에서 DTO를 Entity로 변환하여 DAO에 넘김
- DAO에서 Entity를 통해 DB를 조작하고 DAO에게 Entity 데이터를 받은 Service 계층에서는 ResponseDTO로 변환하여 Controller에게 넘김
## 2. 데이터 테이블
- Product, Member, Order 엔티티를 정의하고 SpringData JPA를 사용하여 DB 테이블에 매칭
- 각각의 엔티티는 Primary Key로 Id값을 필드로 가짐
- Order 엔티티 클래스의 테이블명은 order_table임
## 3. 연관관계
- Order 엔티티는 Product, Member와 N:1 연관관계로 설정
- Order의 외래키로 Product, Member의 기본키를 설정
## 4. UI
- Swagger UI를 사용

## 5. 기능
- 회원, 상품에 대한 정보는 기본적으로 CRUD 가능
- 회원 정보는 이름과 등급을 수정하는 기능이 각각 있음
- 상품 정보는 재고, 가격을 각각 수정할 수 있게 기능 구현
- 주문을 신청할 경우 주문한 수량만큼 상품의 재고가 줄어들게 구현(DB에도 반영됨)
- 반대로 주문을 취소할 경우 그 수량만큼 상품의 재고가 늘어나게 구현(DB에도 반영됨)
- 주문 내역을 수정할 때 주문 상품만 수정 가능
- DB에는 주문자(회원), 주문한 상품(상품)의 id 값으로 표기되지만 주문 내역을 조회하면 이름으로 반환하도록 구현
## 6. 보완
- 회원 등급에 따른 가격 할인을 적용하는 기능을 추가 구현 :white_check_mark:
- 회원의 이름으로 주문 내역 리스트를 조회, 동명이인 회원 리스트를 조회하는 기능 구현 ----> QueryDSL을 사용하여 CustomRepository 구성 필요 :white_check_mark:
- 테스트 코드를 별도로 작성하지 않고 Talend API Tester로 테스트를 했는데 TDD 개발을 위해서는 테스트 코드를 별도로 작성할 필요가 있음
- 계층별로 각각 도메인을 만들었는데 도메인별로 계층을 만들어보는 방법도 좋을 것 같다고 생각함 --> 다음 프로젝트에서 적용할 예정
- 클라이언트로부터 받는 데이터에 대한 유효성 검사 추가해서 데이터 무결성 확보(구체적인 검사 조건은 주석으로 추가함) :white_check_mark:
- 데이터 조회 시 해당 데이터가 없을 시 IllegalArgumentException을 발생시키고 글로벌 예외처리 시킴(404 반환) :white_check_mark: