• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

화면에 맞춰진 복잡한 정적 쿼리 관련 질문입니다!

21.12.21 18:49 작성 조회수 165

1

1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
안녕하십니까 강사님!
강사님의 강의와 영상을 통해 성장을 꿈꾸는 주니어 백엔드 개발자 입니다!

이번 회차와 쿼리 결과를 DTO로 받는 강의를 통해 궁금한 점이 생겼습니다.
 
만약 거래내역과 같이 특정 하나의 테이블이 아닌 관련된 여러 테이블의 값이 필요할 경우에는 단일 거래내역을 가져오기위해서는 적어도 3~4개에서 많으면 5~6개의 쿼리가 발생하게 됩니다.
 
ex1) A a = a_repo.findById({id});
B b = b_repo.findByA_Id({a.getId()});
....
 
// 연관관계가 맺어져 있다면
ex2) A a = a_repo.findById({id});
B b = a.getB();
...
 
위와 같은 방법으로 하여 전체 거래내역을 불러오기 위해서는 총
({전체 거래내역 갯수} * {하나의 거래내역을 가져오기 위한 쿼리 갯수})
개의 쿼리가 발생하게 됩니다.
 
그래서 강사님의 강의를 듣고 JPQL로 풀어보아야겠다 해서 시도를 했습니다.
그런데, JPQL로 하다보니 SELECT와 FROM절에서 서브쿼리를 지원하지 않는다는 것을 알게되었고 아주 많은 조인이 일어나는 쿼리에서 From절에서 데이터를 걸러내지 못하고 WHERE절에 서브쿼리를 많이 넣게 되는 것도 그렇게 좋은 방법이 아니라고 생각이 들어 이렇게 질문드립니다.
 
1) 위와 같이, 화면에 맞춰져 있고, 많은 조인이 필요한 경우(쿼리가 복잡한 경우)에는 어떠한 방법을 추천해주시나요? (Querydsl은 아직 도입하기에는 무리인 상황입니다ㅠㅠ)
 
2) 거래내역과 같이 여러 테이블의 필드값들이 필요한 경우에, 하나의 거래내역을 클라이언트에게 반환하기 위해서 몇 개의 쿼리가 넘어가야 각각의 쿼리메소드보다 JPQL로 사용하는게 낫겠다고 느끼시나요?
 
 
(사실, @NamedNativeQuery를 사용하여 단일 쿼리로 전체 결과를 반환하도록 리팩토링 하였고 성능 향상의 이점도 얻었지만, 더러워진 Entity 클래스와 유지보수에 대한 걱정이 있었는데 강사님 강의를 보고 조금 더 좋은 방향으로 고쳐야겠다는 생각이 들었습니다ㅠ)

답변 1

답변을 작성해보세요.

0

안녕하세요. BackStart님

다음 강의를 참고해주세요.

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

감사합니다.