어제 도전했던 검색기능을 마침내 완성했다.
하다가 포기했던 jpql을 이용했는데, 어제까지는 분명히 잘 되지 않았는데, 오늘 시도해보니 잘 되었다.
어제 시도하다가 착각한게 있었는데, 쿼리를 두번 날리는게 아니라 그냥 조인쿼리를 한번 날리면 되는 것이었다.
그리고, 쿼리를 작성해서 찾아온 값을 어떻게 넣어서 보여줘야하나 고민이었는데, 방법은 간단했다. dto를 하나 만들어서 거기에 담는 형식으로 작성하면 되는 것이었다. 완성된 코드는 이렇다.
role이 SELLER인 유저의 키워드를 포함한 닉네임을 불러오는 쿼리이다.
order by를 통해 페이징까지 깔끔하게 쿼리를 통해 처리하고 싶었는데, 페이지 정보를 표시하게 하려면 더더욱 복잡한 쿼리를 써야할것같아 그냥 pageable에게 맡겼다.
그리고, 기존에 연관관계를 맺어서 가져오던 메서드들도 쿼리를 통해 최적화를 해 주었다.
연관관계를 끊고, 따로 조인쿼리를 작성하여 적용해주었다.
기존에 쿼리문을 4번 날리던걸 3번 날리는것으로 바뀌는것을 확인했다.
4번에서 3번이라 감이 잘 안왔지만 만약 많은 양의 데이터를 처리할때, 예를들면 10000개의 데이터를 처리해야 할때 40000번 쿼리를 날릴것을 30000번 날리는것으로 줄였다고 생각하니 많은 비용절감을 했다고 느꼈다. 단순히 %로만 계산해보아도 25%의 비용을 절감한 것이다.
오늘 jpql을 통해 쿼리를 날려 값을 가져오고, 페이징처리를 해 보았는데, jpa가 정말 많은 것을 해주는 것을 알게 되었으며, 쿼리를 쓸 줄 안다면 값을 불러오기위해 연관관계를 고려해야 하나 하는 고민을 할 필요가 없다는 것을 알게 되었다.
사실 팀프로젝트 설계를 할때 연관관계를 맺지 않고 id참조를 해서 가져오자는 의견을 내가 내어서 사서 고생을 한 꼴이 되었지만, 그래도 jpql쿼리를 통해 값을 불러오는 법을 공부할 수 있어서 만족스러웠다.
'개발일지(일간)' 카테고리의 다른 글
23년 1월 26일 (0) | 2023.01.26 |
---|---|
23년 01월 25일 (0) | 2023.01.25 |
23년 1월 19일 팀 프로젝트 (0) | 2023.01.19 |
23년 01월 18일 팀 프로젝트 (0) | 2023.01.19 |
23년 01월 17일 팀프로젝트 (0) | 2023.01.18 |