[스프링] JPA와 다중 조회

스프링 프레임워크는 Java 개발을 위한 다양한 기능과 라이브러리를 제공하는데, 그 중에서도 자바 표준 명세인 JPA(Java Persistence API)는 데이터베이스와의 상호 작용을 간편하게 만들어줍니다. JPA를 사용하면 복잡한 SQL 쿼리를 작성하지 않고도 객체 지향적으로 데이터를 다룰 수 있습니다.

다중 조회(multiple fetch)는 여러 개의 데이터를 한 번에 가져오는 기능을 말합니다. JPA를 사용하여 여러 테이블에 분산되어 있는 데이터를 효율적으로 조회하는 방법에 대해 알아보겠습니다.

@EntityGraph 어노테이션을 사용한 다중 조회

JPA의 @EntityGraph 어노테이션을 사용하면 다중 조회를 간단하게 수행할 수 있습니다. 이 어노테이션을 특정 엔티티에 적용하면 해당 엔티티와 관련된 다른 엔티티들도 함께 가져올 수 있습니다.

예제 코드

@Entity
@EntityGraph(attributePaths = {"orders", "products"})
public class Customer {
    // ...
}

위의 코드에서 @EntityGraph 어노테이션은 Customer 엔티티의 ordersproducts 속성과 관련된 데이터를 한 번에 조회하도록 설정합니다.

Join Fetch를 사용한 다중 조회

JPA의 JOIN FETCH 구문을 사용하여 다중 조회를 할 수도 있습니다. 이를 이용하면 특정 엔티티와 그와 연관된 엔티티들을 조인해서 함께 조회할 수 있습니다.

예제 코드

@Entity
public class Order {
    // ...

    @ManyToOne
    @JoinColumn(name = "customer_id")
    private Customer customer;

    // ...
}
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {

    @Query("SELECT o FROM Order o JOIN FETCH o.customer")
    List<Order> findAllOrdersAndCustomers();
}

위의 코드에서 OrderRepository 인터페이스의 findAllOrdersAndCustomers() 메서드는 JOIN FETCH 구문을 사용하여 모든 주문과 주문에 연결된 고객을 함께 조회할 수 있습니다.

마치며

JPA를 사용하면 여러 테이블에 분산되어 있는 데이터를 간단하게 다중 조회할 수 있습니다. @EntityGraph 어노테이션을 사용하거나 JOIN FETCH 구문을 통해 효율적으로 다중 조회를 처리할 수 있으며, 개발자는 복잡한 SQL 쿼리 작성이나 결과 데이터를 조합하는 로직을 신경 쓸 필요가 없어집니다. JPA의 이러한 기능들을 적극적으로 활용하여 데이터 조회의 효율성을 높일 수 있습니다.

참고 문헌: