JPA를 사용해 조회하는 과정에서 불필요한 컬럼도 조회되는 N+1 문제가 있었고 성능적인 부분에서 효율이 떨어지는 것을 확인할 수 있었다.
필요한 쿼리만 실행될 수 있도록 조회하는 부분에서 수정을 할 필요가 있었다. 그에대한 해결 방법으로 jpql, querydsl 등 다른 방법들을 사용해 얼만큼의 차이가 있나 확인을 하고 최종적으로 코드를 수정할 수 있었다.
1. JPA -> JPQL
2. JPA -> QueryDSL
처음에 JPA에서 JPQL과 QuertDSL로 수정했을 때 차이가 있는 것을 볼 수 있는데 JPQL과 QueryDSL의 경우 거의 차이가 없다고 봐도 무방하다. 쿼리 자체가 크게 바뀐게 아니기에 당연한 일이다.
조금 더 성능 부분에서 개선을 하고싶었고 조회하는 기능이었기에 인덱싱과 캐싱을 생각할 수 있었다.
결과적으로 비즈니스 Latancy 또한 개선된 결과를 확인할 수 있었다.
따로 쿼리를 작성하지 않는 JPA를 사용하며 편한 개발을 할 수 있었지만 hibernate로 실행되는 쿼리를 분석해 필요한 컬럼에대한 인덱싱, 쿼리, 캐싱, 로직 변경 등 변화에 따른 성능을 측정하며 약 80% 개선할 수 있었다. 특히 불필요한 컬럼도 같이 조회되는 N+1 문제를 다양한 방법으로 해결하며 각각의 장단점을 생각할 수 있었고, 이 경험을 바탕으로 앞으로도 효율을 생각한 개발을 진행할 계획이다.
'TIL' 카테고리의 다른 글
대칭키 vs 공개키(비대칭키) 암호화의 차이점 (1) | 2023.10.16 |
---|---|
[TIL] 시간복잡도 big O 표기법 (0) | 2023.05.29 |
[JAVA] 전역 예외 처리 (0) | 2023.05.15 |
[회고] 프로젝트를 마치며.. (0) | 2023.05.13 |
[쿼리] JPA & JPQL & NativeQuery (0) | 2023.05.11 |