해결된 질문
작성
·
360
답변 2
1
안녕하세요. kamser님, 공식 서포터즈 코즈위버입니다.
Distinct 가 필요한 경우라면 쿼리에서 수행하는게 좋습니다. 백엔드에서 중복제거를 할 경우 페이징에서 문제가 될 수 있습니다. 물론 페이징이 필요하지 않은 데이터라면 백엔드에서 Set을 이용해 중복을 제거하는 것도 방법입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
distinct
키워드를 사용하는 것은 JPQL에서 중복을 제거하는 표준적인 방법이며, SQL 쿼리에서도 distinct
가 적용되어 중복 데이터가 반환되지 않게 됩니다. 영속성 컨텍스트는 실제로 동일한 식별자를 가진 엔티티에 대해 한 개의 인스턴스만 관리하기 때문에, 결과적으로 같은 식별자를 가진 엔티티 객체는 중복되지 않게 됩니다.
그러나 경우에 따라 distinct
가 SQL 수준에서 원하는 결과를 내지 못하는 상황이 발생할 수 있습니다. 이런 상황에서는 HashSet<>
을 사용해서 애플리케이션 레벨에서 중복을 제거하는 것도 하나의 선택지입니다. 하지만 이 경우, 먼저 모든 결과를 메모리에 로드한 다음 중복을 제거하기 때문에 대량의 데이터를 처리해야 할 때 성능에 부정적인 영향을 줄 수 있고, 더 많은 메모리를 사용할 수도 있습니다.
언급하신 방법을 사용하는 것이 별로인지에 대한 판단은 애플리케이션의 특성과 요구 사항, 성능 요구사항 등을 고려하여 결정되어야 합니다. 또한, @Query
어노테이션을 사용하여 JPQL 혹은 네이티브 쿼리에서 필요한 데이터만 선택적으로 조회하는 방법을 사용할 수도 있습니다. 이를 통해 불필요한 데이터 전송을 줄이고, 중복을 더 효과적으로 제어할 수 있습니다. 자세한 내용은 Spring Data JPA 참조 문서를 참고하시는 것이 좋을 것 같습니다.
Spring Data JPA - Reference Documentation - Query Creation
Kamser님 질문에 도움이 되었기를 바랍니다!