다중 1:N 관계에서 Querydsl fetch join 사용 시 고려사항

momomoki·2025년 1월 6일
0

문제 상황

Querydsl에서는 다중 1:N 관계에서 fetch 조인이 하나로 제한된다는 것
을 학습했습니다. 이러한 제약 사항을 고려하여 1:N 관계의 데이터를 효율적으로 조회하는 방법에 대해 다양한 해결책을 검토해보았습니다.

1. 해결방안

Querydsl transform 메서드를 활용한 데이터 조회 방법

transform 방식으로 하나의 쿼리문을 통해 다중 1:N, N:1 구조의 데이터를 조회하는 데 성공했습니다. 하지만 이 과정에서 두 가지 문제점을 발견했습니다.
첫째, GroupBy.list 사용 시 순서는 보장되지만 중복 데이터가 발생했습니다. DISTINCT를 적용해도 중복 문제가 해결되지 않았습니다.
둘째, 대안으로 시도한 GroupBy.set은 중복은 제거했지만 데이터 순서가 보장되지 않는 한계가 있었습니다.
이러한 문제들을 해결하기 위해 다양한 방법을 연구하고 검토한 결과

위처럼 1:N 관계마다 개별 select 쿼리를 사용하는 방식을 최종 선택했습니다.

2. 해결방안

1:N 관계를 가진 다중 테이블 구조에서는 fetch 조인의 한계가 있습니다. 이러한 한계를 고려하여 ERD 설계 단계에서 어떤 최적화 방안이 있을까?

초기 1:N 구조 → N:1 구조로 바꾼 상태

주문 내역조회 시 발생하는 1:N 연관 관계의 데이터를 단일 쿼리로 조회하고자 했습니다. 하지만 두 개 이상의 1:N 관계에서는 fetch 조인을 동시에 사용할 수 없어 여러 번의 select 쿼리가 발생하는 성능 문제가 있었습니다. 이를 해결하기 위해 transform 방식 등 여러 1:N 조회 패턴을 연구하던 중, ERD 설계 단계에서 N:1 구조로 변경하면 fetch 조인을 효과적으로 활용할 수 있다는 해결책을 발견하여 적용했습니다.

이처럼 ProductSize 안에 있는 Product에서 상품 정보를 하나의 쿼리문으로 가져오는 것이 가능하게 되었습니다.

profile
얍얍엽엽욥욥

0개의 댓글

관련 채용 정보