DevKim

[Refactor] Querydsl Result Aggregation 사용하여 query 개수 감소 및 코드 단순화 본문

Spring Project/Webtooniverse

[Refactor] Querydsl Result Aggregation 사용하여 query 개수 감소 및 코드 단순화

on_doing 2021. 8. 19. 10:53
728x90

[ 상황 ]

현재 웹툰 객체와 장르는 다:다 연관관계로 이루어져있으며, 중간에 join table을 두어 1:다, 다:1로 DB 구성한 상황이다.

[ 문제점 ]

하나의 웹툰이 2개의 장르를 가지고 있기 때문에 Webtoon 테이블을 조회시마다 WebtoonGenre 테이블과 Genre 테이블 join하여 데이터 가져온다는 것이 문제이다.

서비스 특성상 Webtoon 테이블이 굉장히 조회가 빈번한데, 이때 계속 불필요한 쿼리문이 나가는 것을 발견했다.

 

[ 해결 ] 

Querydsl에서 Result Aggregation 이라는 것을 제공한다는 것을 알게되었고 한꺼번에 list로 불러오는 코드로 단순화하게되었다.

  • (기존) - 웹툰을 찾아온 뒤 웹툰으로 장르를 재조회하여 query 2회 발생 및 genre들을 list로 다시 묶는 과정 필요, 코드가 복잡함
  • (변경) - Querydsl Result Aggregation을 사용하여 웹툰과 해당 웹툰에 대한 장르를 list로 함께 가지고 옴
  • (효과) - Query개수 감소 및 코드 단순화

[ 기존 코드 ]

 

 

[ 개선된 코드 ]

Query 1회 발생, dto로 mapping하는 과정만 발생함을 알 수 있다.

 

 

[ 결과 ]

응답 속도 및 Throughput 개선 

728x90
Comments