Skip to content

유저, 상품, 주문, 주문상세, 배송 정보를 무작위로 생성하고 순수 JPA 를 사용했을 때와 Query Dsl 을 사용했을 때 성능차이 비교를 위한 boilerplate

Notifications You must be signed in to change notification settings

2024-capston/OrderReportTest-Spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

버전 정보

  • Spring 3.2.0 이상
  • MySQL 8.x
  • Java 17
  • Querydsl-jpa:5.0.0

Table Diagram

Screenshot 2024-03-27 at 9 59 57 PM

목표

  • Test 를 위해 Mock 데이터 생성하는 API 를 생성한다.
  • 사용자 id 를 통해 사용자의 주문 정보를 모두 가져오는 API 만든다.
  • 순수 JPA 를 사용했을 때와 성능 개선을 한 쿼리를 사용했을 때의 성능 차이를 비교한다 (쿼리 생성을 위해 Querydsl 사용)

사용 방법 및 설명

src/main/resources/application.yml 정보 수정

  • datasoruce 의 정보를 사용자의 설정에 맞게 수정합니다.
  • <> 로 표시한 영역만 수정하시면 됩니다.

Mock 데이터 생성

아래의 API 를 순서대로 실행합니다

  • GET /createUser
  • GET /createProduct
  • GET /createOrder
  • GET /createOrderDetail
  • GET /createShipment

생성 관련 기본 구현 정보는 다음과 같습니다.

  1. User, Product 는 1000개 생성합니다. (services/UserMockService.class, services/PrductMockService.class 참고)
  2. Order 는 사용자의 수만큼 생성합니다. (services/OrderMockService.class 참고)
  3. OrderDetail 은 User 100명 * Product 100개 정보로 총 10,000개 생성합니다. (services/OrderDetail.class 참고)
  4. Shipment 은 Order 의 수 만큼 생성합니다 (services/ShipmentMockService.class 참고)

OrderReport 조회

아래의 API 를 통해 조회할 수 있습니다.

  • GET /order-report/no-query-dsl/{userid} - 순수 JPA 만 사용
  • GET /order-report/query-dsl/{userid} - query dsl 사용

OrderReport 는 다음과 같은 정보를 담고 있습니다.

  1. 사용자의 PrimaryKey, 이름, 이메일
  2. 주문정보 (ArrayList)
  3. 배송정보 (ArrayList)

주문 정보는 다음과 같은 정보를 담고 있습니다.

  1. 주문 id (PrimaryKey)
  2. 주문날짜
  3. 주문 상태
  4. 상품 정보 (ArrayList)

상품 정보는 다음과 같은 정보를 담고 있습니다.

  1. 상품 id (Primary Key)
  2. 상품 이름
  3. 가격
  4. 평점
  5. 할인 유무
  6. 카테고리
  7. 주문한 양
  8. 총 금액

배송 정보는 다음과 같은 정보를 담고 있습니다.

1.� 배송 id (Primary Key) 2. 배송 시작 날짜 3. 배송 상태

dto 폴더에서 위와 관련된 코드를 확인할 수 있습니다.

결과

a) 순수 JPA 사용

Screenshot 2024-03-27 at 7 12 55 PM Screenshot 2024-03-27 at 7 13 03 PM Screenshot 2024-03-27 at 7 13 24 PM

b) Querydsl 사용

Screenshot 2024-03-27 at 9 59 16 PM

Screenshot 2024-03-27 at 9 59 13 PM

Screenshot 2024-03-27 at 9 59 10 PM

5개 테이블 조인을 할 때 순수 JPA 를 사용했을 때와 성능 개선을 했을 때 약 40배 차이가 나는 것을 확인할 수 있다.

About

유저, 상품, 주문, 주문상세, 배송 정보를 무작위로 생성하고 순수 JPA 를 사용했을 때와 Query Dsl 을 사용했을 때 성능차이 비교를 위한 boilerplate

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages