TIL

[Java] 조회기능 성능 개선

Big Iron 2023. 5. 22. 22:29

JPA를 사용해 조회하는 과정에서 불필요한 컬럼도 조회되는 N+1 문제가 있었고 성능적인 부분에서 효율이 떨어지는 것을 확인할 수 있었다.


image
image
image
image

필요한 쿼리만 실행될 수 있도록 조회하는 부분에서 수정을 할 필요가 있었다. 그에대한 해결 방법으로 jpql, querydsl 등 다른 방법들을 사용해 얼만큼의 차이가 있나 확인을 하고 최종적으로 코드를 수정할 수 있었다.

1. JPA -> JPQL


image


2. JPA -> QueryDSL


image



처음에 JPA에서 JPQL과 QuertDSL로 수정했을 때 차이가 있는 것을 볼 수 있는데 JPQL과 QueryDSL의 경우 거의 차이가 없다고 봐도 무방하다. 쿼리 자체가 크게 바뀐게 아니기에 당연한 일이다.


조금 더 성능 부분에서 개선을 하고싶었고 조회하는 기능이었기에 인덱싱과 캐싱을 생각할 수 있었다.


image
image

image
결과적으로 비즈니스 Latancy 또한 개선된 결과를 확인할 수 있었다.



따로 쿼리를 작성하지 않는 JPA를 사용하며 편한 개발을 할 수 있었지만 hibernate로 실행되는 쿼리를 분석해 필요한 컬럼에대한 인덱싱, 쿼리, 캐싱, 로직 변경 등 변화에 따른 성능을 측정하며 약 80% 개선할 수 있었다. 특히 불필요한 컬럼도 같이 조회되는 N+1 문제를 다양한 방법으로 해결하며 각각의 장단점을 생각할 수 있었고, 이 경험을 바탕으로 앞으로도 효율을 생각한 개발을 진행할 계획이다.