스프링 프레임워크는 Java 개발을 위한 다양한 기능과 라이브러리를 제공하는데, 그 중에서도 자바 표준 명세인 JPA(Java Persistence API)는 데이터베이스와의 상호 작용을 간편하게 만들어줍니다. JPA를 사용하면 복잡한 SQL 쿼리를 작성하지 않고도 객체 지향적으로 데이터를 다룰 수 있습니다.
다중 조회(multiple fetch)는 여러 개의 데이터를 한 번에 가져오는 기능을 말합니다. JPA를 사용하여 여러 테이블에 분산되어 있는 데이터를 효율적으로 조회하는 방법에 대해 알아보겠습니다.
@EntityGraph 어노테이션을 사용한 다중 조회
JPA의 @EntityGraph
어노테이션을 사용하면 다중 조회를 간단하게 수행할 수 있습니다. 이 어노테이션을 특정 엔티티에 적용하면 해당 엔티티와 관련된 다른 엔티티들도 함께 가져올 수 있습니다.
예제 코드
@Entity
@EntityGraph(attributePaths = {"orders", "products"})
public class Customer {
// ...
}
위의 코드에서 @EntityGraph
어노테이션은 Customer
엔티티의 orders
와 products
속성과 관련된 데이터를 한 번에 조회하도록 설정합니다.
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의 이러한 기능들을 적극적으로 활용하여 데이터 조회의 효율성을 높일 수 있습니다.
참고 문헌:
- Spring Data JPA Documentation: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-graph
- Baeldung - Using JOIN FETCH in Spring Data JPA: https://www.baeldung.com/join-fetch-pagination