메서드의 진행속도를 측정하는 AOP를 만들어서 측정하려는 메서드에 적용시킨 결과 게시글을 조회하는 메서드의 속도가 기대치보다 낮은점을 알 수 있었다.
원인은 다음 3가지 정도로 확인할 수 있었다.
속도를 개선할 방향으로 다음과 같은 3가지 방향성을 고민할 수 있었다.
현재 검색기능을 구현하기위해 셋팅을 마친 QueryDsl을 이용해서 수정을 해줄 수 있었다.
@Override
public List<Post> find(String category, Pageable pageable, Double lat, Double lng, Sort sort) {
List<OrderSpecifier<?>> orderSpecifiers = new ArrayList<>();
QReview review = QReview.review1;
switch (sort) {
case DISTANCE ->
orderSpecifiers.add(Expressions.asNumber(Expressions.template(Double.class, distanceQuery(lat, lng))).asc());
case STAR -> {
NumberExpression<Double> avgStar = review.star.avg().coalesce(0.0);
orderSpecifiers.add(avgStar.desc());
}
case REVIEW -> orderSpecifiers.add(post.reviews.size().desc());
default -> throw new IllegalArgumentException("Invalid sort value: " + sort);
}
return queryFactory
.select(post)
.from(post)
.leftJoin(post.reviews, review)
.where(post.category.eq(category))
.groupBy(post)
.orderBy(orderSpecifiers.toArray(new OrderSpecifier[0]))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
}
코드를 수정하고 다음과 같은 방법으로 메서드 속도변화를 확인했다.
아래 표와 그래프로 정리되었으며 약 2배 이상의 속도개선이 이루어졌다.