Spring Data 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의 필드 값까지.. Tech/JPA 2024. 3. 12. 어떤 데이터 접근 기술을 선택하는 것이 좋을까? 비즈니스 상황과 현재 프로젝트 구성원의 역량에 따라서 결정하는 것이 맞다고 생각한다. JdbcTemplate이나 MyBatis같은 기술들은 SQL을 직접 작성해야하는 단점이 있지만 기술이 단순하기 때문에 SQL에 익숙한 개발자라면 금방 적응할 수 있음 JPA, 스프링 데이터 JPA, Querydsl 같은 기술들은 개발 생산성을 혁신할 수 있지만, 학습 곡선이 높기 때문에, 이런 부분을 감안해야 한다. 그리고 매우 복잡한 통계 쿼리를 주로 작성하는 경우에는 잘 맞지 않는다. 개인적으로 추천하는 방향은 JPA, 스프링 데이터 JPA, Querydsl을 기본으로 사용하고, 만약 복잡한 쿼리를 써야 하는데, 해결이 잘 안되면 해당 부분에는 JdbcTemplate이나 MyBatis를 함께 사용하는 것이다. 트랜잭.. Tech/Spring 2023. 12. 22. 스프링 데이터 JPA와 트레이드 오프 스프링 데이터 JPA 구조를 맞추기 위해, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 유지보수 관점에서 ItemRepository의 구현체를 변경할 수 있는 장점이 있다. DI, OCP 원칙을 지킬 수 있다는 좋은 점이 분명히 있다. 반대로 구조가 복잡해지면서 어댑터 코드와 실제 코드까지 함께 유지보수 해야하는 어려움도 발생한다. 다른 선택 직접 스프링 데이터 JPA를 사용하는 방법 DI, OCP 원칙을 포기하는 대신, 복잡한 어댑터를 제거하고, 구조를 단순하게 가져갈 수 있는 장점이 있다. 클래스 의존 관계 런타임 객체 의존 관계 트레이드 오프 DI, OCP를 지키기 위해 어댑터를 도입하고, 더 많은 코드를 유지함 어댑터를 제거하고 구조를 단순하게.. Tech/Spring 2023. 12. 20. Slice vs Page: 슬라이스 방식과 페이징 방식 1. 슬라이스 조회 (Slice) 특징 슬라이스 조회는 Spring Data JPA에서 제공하는 기능으로, 결과 데이터를 슬라이스(일부) 형태로 가져온다. 슬라이스는 페이지 크기와 현재 페이지 번호에 따라 정의되며, 페이지 크기에 맞게 결과 데이터를 가져온다. 슬라이스를 사용하면 일부 데이터만 로드되므로 메모리 사용을 최적화할 수 있다. Spring Data JPA의 Slice 타입을 사용하여 결과를 반환합니다. 장점 메모리 사용을 효율적으로 관리하며, 대용량 데이터셋을 다룰 때 성능을 최적화할 수 있다. 사용자 인터페이스에서 무한 스크롤과 같은 기능을 구현하는 데 적합하다. 단점 정렬 기준 및 방향을 지정하는 등 추가적 설정이 필요할 수 있다. import org.springframework.data... Tech/JPA 2023. 9. 22. 이전 1 다음 728x90 반응형