해당 프로젝트에서 현재 DB의 데이터 호출에 활용되는 ORM, 프레임워크는 아래와 같다.
1. Spring Data JPA
2. JPA - JPQL
3. QueryDsl
위의 3가지 방법은 모두 데이터 호출 속도와는 무관하게 데이터 호출하는 방식을 결정짓는 요인이다.
Spring Data JPA
= 메서드 네이밍 컨벤션에 맞추어 자동 생성 메서드를 쓰느냐
List<MemberBook> findByMember_MemberIdAndReturnedAtIsNullAndBook_BookPublisher
(Long memberId, String bookPublisher);
JPA-JPQL
= SQL을 직접 작성하느냐
@Query("SELECT mb FROM MemberBook mb WHERE mb.member.id =:memberId
AND mb.returnedAt IS NULL AND mb.book.bookPublisher =:bookPublisher")
List<MemberBook> findByMemberIdAndReturnedAtIsNull
(@Param("memberId") Long memberId, @Param("bookPublisher") String bookPublisher);
QueryDsl
= Type-Safe 쿼리 방식으로 SQL과 유사한 쿼리를 생성하는 프레임워크.
@Override
public List<MemberBook> Q_DSL_findMemberBooks(Long memberId, String bookPublisher) {
return jpaQueryFactory
.selectFrom(qMemberBook)
.where(qMemberBook.member.memberId.eq(memberId)
.and(qMemberBook.returnedAt.isNull())
.and(qMemberBook.book.bookPublisher.eq(bookPublisher)))
.fetch();
}
다시 한번 말하지만 3방식 데이터를 '어떻게 호출하는지'에 관한 차이가 있다.
하지만 동시에 5000명의 유저가 동시에 데이터 호출 요청이 들어온다면 서버 측에서 부하가 걸릴테고
이 상황에서 Spring Data JPA, JPA-JPQL, QueryDsl 3가지 경우의 평균 응답 속도가 궁금해졌다.
이를 위해 사용하는 Tool로써 JMeter 를 활용해보자.
<JMeter 사용법 확인>
https://dvdhan.tistory.com/241
JMeter 설치 & 사용 법
JMeter ? Apache에서 만든 자바로 만들어진 웹 애플리케이션 성능 테스트 오픈 소스. JMeter를 활용하면 아래와 같은 테스트를 할 수 있다. -웹 : HTTP, HTTPS, (Java, NodeJS, PHP, ASP.NET .. ) - SOAP / REST 웹 서비스
dvdhan.tistory.com
< Test 대상 메서드 >
<목적>
회원의 이름, 이메일을 전달받아 해당 회원이 대여 후 미반납 된 도서 중
선택된 특정 출판사에 의해 출간된 도서들의 리스트를 호출하는 것.
< Test 조건 >
동시 요청 5,000번 5회 반복 = 총 25,000번의 요청 테스트
< Test 결과 >
#1. Spring Data JPA



#2. JPA - JPQL



#3. QueryDsl



< Test 결과 비교 >
Spring Data JPA | JPA - JPQL | QueryDsl | |
샘플 수 | 25,000 | 25,000 | 25,000 |
에러율 | 0.00% | 0.00% | 0.00% |
처리량 | 472.4/sec | 500.0/sec | 499.8/sec |
평균 응답 시간 | 1059 ms | 347 ms | 315 ms |
중위값 응답 시간 | 1098 ms | 334 ms | 220 ms |
90% 라인 응답 시간 | 1218 ms | 685 ms | 759 ms |
95% 라인 응답 시간 | 1433 ms | 770 ms | 832 ms |
99% 라인 응답 시간 | 1608 ms | 1127 ms | 1144 ms |
최대 응답 시간 | 2809 ms | 1979 ms | 2815 ms |
3가지 중Spring Data JPA의 처리량이 가장 낮고, 응답 시간이 가장 높다.
< 결론 >
평균 응답 시간 기준
Spring Data JPA 에서 QueryDsl로 변경함으로써 평균 응답 시간 기준 70.2% 향상.
(1059 ms - 315 ms) / 1059 ms * 100
'프로젝트 일지' 카테고리의 다른 글
#18. Docker 적용하기 (0) | 2023.05.29 |
---|---|
#16. QueryDsl 적용 (0) | 2023.05.24 |
#15. Spring RestDocs - GitPage Hosting (0) | 2023.05.19 |
#14. 싱글 프로젝트 일지 - JUnit test : Library 도메인 (0) | 2023.05.17 |
#13. 싱글 프로젝트 일지 - JUnit test : Book 도메인 (0) | 2023.05.17 |