패치 조인2 - 한계

전역으로 batch_size를 1000이하의 값으로 설정파일에 추가하면 N+1문제를 방지하고, 원하는 테이블 수만큼만 조회할 수 있다.

  1. 연관된 엔티티 패치 조인

  2. 1을 한 후에 애플리케이션에서 DTO로 변환

  3. 처음부터 new 생성자로 DTO로 반환

실무에셔는 컬렉션을 페치 조인하고, 페이징하면서 매우 복잡한 쿼리를 작성한다. 하지만 컬렉션을 페치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수 없다! =>이 문제는 어떻게 해결하는가?

실례로, 7~8개의 테이블을 조인하는 상황에서 데이터 싱크를 맞추는 좀 큰 API였다. 실질적으로 패치 조인으로 바꾸는 것은 얼마 걸리지 않는다. 하지만 네이티브로 바꿨다면 시간이 더 오래 걸렸을 것이다(DTO 전면 수정, 애플리케이션 로직 전면 수정). =>패치 조인과 배치 사이즈 넣어줌으로써 해결 가능!

결론적으로, 패치 조인을 잘 숙지해야 실무에서 성능 튜닝(조인)을 잘 할 수 있다! 예전에는 쿼리를 전면 수정해서 튜닝을 했다면 현재는 명령에 패치 조인 추가하는 식으로 하면 member 테이블과 그와 연관된 엔티티들만 조회함으로써 N+1 문제를 방지하고 성능을 향상시킬 수 있다!

Last updated