1대N 또는 N대N 관계에서 조인을 수행하게 되면 주 엔터티가 중복해서 나타날 수 있다.
한 A
가 여러 B
를 가지고 있다고 가정하면 A
와 B
를 조인할 때 각 주문마다 A
정보가 반복해서 나올 것이다.
이 경우 결과 집합에는 같은 A
정보가 여러 번 중복되어 나타난다.
이것을 "데이터 뻥튀기" 문제라고 한다.
데이터 전송량 증가
중복된 데이터가 많을 경우 전송되는 데이터의 양이 증가하고 애플리케이션의 응답 시간도 증가한다
메모리 사용량 증가
중복 데이터의 처리 및 저장으로 메모리 사용량 상승한다.
데이터 처리 비용 상승
중복 데이터 처리로 인한 CPU 부하 증가한다.
데이터의 정확성 문제
중복된 데이터의 수정 및 관리 문제로 데이터 불일치 가능성이 있다.
가독성 및 유지보수 문제
코드 복잡성 증가로 인한 유지보수의 어렵다.
패치 조인은 JPA에서 제공하는 기능으로 연관된 엔터티를 함께 조회하는 방법이다.
이를 통해 쿼리 한 번으로 필요한 모든 데이터를 가져올 수 있다.
그러나 패치 조인만으로는 데이터 뻥튀기 문제를 완전히 해결할 수 없다.
따라서 DISTINCT
를 함께 사용하여 중복된 결과를 제거하는 것이 일반적이다.
DISTINCT
는 중복된 결과를 데이터베이스 수준에서 제거하며 일대다 또는 다대다 조인에서 발생하는 데이터의 "뻥튀기" 문제를 해결하는데 효과적이다.
DISTINCT
키워드가 포함되어 데이터베이스가 중복된 결과를 제거하게 된다.DISTINCT
는 데이터베이스와 애플리케이션 두 수준에서 중복을 제거하게 된다.