JPA

    QueryDSL Spring Data JPA 같이 적용하기

    QueryDSL Spring Data JPA 같이 적용하기

    DB를 객체지향적으로 다룰 수 있는 JPA를 사용하면 간단한 작업(ex. CURD)을 할 때는 편리하다는 생각을 했습니다. 하지만 테이블들이 많은 환경에서는 join을 해야 하거나 서브쿼리를 만들어야 하는 경우가 많아지고, Query가 점점 길어지면서 JPA만으로는 작업하기 까다롭겠다는 생각을 하였습니다. 이에 대한 해결 방안으로 JPA와 MyBatis를 같이 사용하여 복잡한 쿼리는 MyBatis로 해결하였지만 실무에서는 JPA + QueryDSL을 사용한다 하여 QueryDSL에 관한 공부 하며 포스팅하려 합니다. QueryDSL 쿼리를 자바 코드로 작성할 수 있도록 해줍니다. 자바 코드로 작성하기 때문에 개발자들도 쉽게 작성할 수 있고 문법 오류도 컴파일 시에 알 수가 있습니다. 데이터 조회 기능에 ..

    JPA N+1 문제

    JPA N+1 문제

    N+1 문제 연관 관계에서 발생하는 문제로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수 (N) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 것을 N+1 문제라고 합니다. 1번의 쿼리로 N개의 엔티티를 조회(1번) 엔티티에 연관된 데이터를 가져오기 위해 추가적인 쿼리를 실행(N번) 예제) User, Order 엔티티 사용자(User) 모두를 조회하기 위해 쿼리를 하나 보냅니다. → 1번 이때 사용자마다 갖고 있는 주문(Order)에 대한 정보를 가져오기 위해 추가적인 쿼리를 날립니다. User1의 주문, User2의 주문, ..., UserN의 주문 → N번 총 N+1개의 쿼리를 날리게 됩니다. N+1 문제는 즉시로딩 때문인가? fetch = FetchType.EAGER..