본문 바로가기

Tech/JPA4

@EntityGraph와 Fetch Join Fetch Join 실무에서는 부가적으로 가져올 데이터들이 많아서 N+1문제가 많이 발생한다 -> fetch join으로 해결 N+1 문제란? 모든 Member를 가져오기 위한 쿼리(쿼리수 1개) + 각 Member의 Team이 모두 다르다면 Member 1명 당 Team 프록시 객체 초기화를 하기 위한 쿼리(쿼리수 n개) N+1 문제 해결: Fetch Join Member와 관련된 Team 모두 Select절에서 조회해 한방의 쿼리로 가져온다. MemberRepository 예시 @Query("select m from Member m join fetch m.team") List findMemberWithTeam(); 이렇게 되면 select절에 Member 필드 값 뿐만 아니라, Team의 필드 값까지.. 2024. 3. 12.
@Modifying과 벌크 연산 @Modifying 이란? Spring Data JPA에서 사용되는 어노테이션으로, @Query 어노테이션을 통해 작성되어 변경이 일어나는 쿼리(Insert, Update, Delete)를 실행할 때 사용된다. @Modifying을 변경이 일어나는 쿼리와 함께 사용해야 JPA에서 변경 감지와 관련된 처리를 생략하고 더 효율적인 실행이 가능하다. JPA에서 벌크 연산은 단건 데이터를 변경(더티 체킹)하는 것이 아닌, 여러 데이터에 변경 쿼리를 날리는 작업을 말한다. @Modifying 어노테이션을 사용하여 벌크 연산을 수행할 수 있다. 예를 들어 게시글 아이디(lostFoundBoardId)를 통해 해당 게시글의 댓글을 모두 삭제하기 위해 벌크 연산을 수행할 수 있다. @Modifying(clearAuto.. 2024. 3. 10.
Slice vs Page: 슬라이스 방식과 페이징 방식 1. 슬라이스 조회 (Slice) 특징 슬라이스 조회는 Spring Data JPA에서 제공하는 기능으로, 결과 데이터를 슬라이스(일부) 형태로 가져온다. 슬라이스는 페이지 크기와 현재 페이지 번호에 따라 정의되며, 페이지 크기에 맞게 결과 데이터를 가져온다. 슬라이스를 사용하면 일부 데이터만 로드되므로 메모리 사용을 최적화할 수 있다. Spring Data JPA의 Slice 타입을 사용하여 결과를 반환합니다. 장점 메모리 사용을 효율적으로 관리하며, 대용량 데이터셋을 다룰 때 성능을 최적화할 수 있다. 사용자 인터페이스에서 무한 스크롤과 같은 기능을 구현하는 데 적합하다. 단점 정렬 기준 및 방향을 지정하는 등 추가적 설정이 필요할 수 있다. import org.springframework.data... 2023. 9. 22.
@EntityGraph @EntityGraph(attributePaths = {”"}) Spring Data JPA에서 사용하는 어노테이션은로 엔티티 그래프를 정의하는 데 사용된다. 엔티티 그래프는 데이터베이스에서 엔티티와 연관된 다른 엔티티를 로딩할 때 사용되며, 지연 로딩(Lazy Loading)을 효과적으로 방지하고 성능을 최적화하는 데 도움된다. @EntityGraph 어노테이션은 다양한 속성을 제공하며 그 중에 attributePaths는 로딩할 엔티티의 연관 속성을 지정하는 데 사용된다. 예시를 통해 알아보자. @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Str.. 2023. 9. 17.