[스프링] JPA와 연관관계 지연 로딩

JPA(Java Persistence API)에서는 엔티티 간의 연관관계를 지연 로딩할 수 있습니다. 지연 로딩은 연관된 엔티티가 실제로 사용될 때까지 데이터베이스에서 가져오지 않고, 필요한 시점에 가져오는 방식을 말합니다. 이 기능은 프로그램의 성능을 향상시키고, 불필요한 데이터베이스 조회를 줄여줍니다.

연관관계의 지연 로딩 설정

JPA에서 연관관계의 지연 로딩은 @ManyToOne이나 @OneToMany 등의 어노테이션을 사용하여 설정할 수 있습니다.

예시 1: @ManyToOne의 지연 로딩

@Entity
public class Order {
    // ...
    @ManyToOne(fetch = FetchType.LAZY)
    private Customer customer;
    // ...
}

예시 2: @OneToMany의 지연 로딩

@Entity
public class Customer {
    // ...
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "customer")
    private List<Order> orders;
    // ...
}

위의 예시에서 fetch = FetchType.LAZY 옵션을 사용하여 연관된 엔티티를 지연 로딩으로 설정할 수 있습니다.

연관된 엔티티 사용 시점에서 조회

지연 로딩으로 설정된 연관된 엔티티를 사용할 때는 실제로 해당 엔티티를 사용하는 시점에 데이터베이스에서 조회됩니다. 따라서, 연관된 엔티티를 사용하는 코드 블록 내에서 조회가 발생하게 됩니다.

예시: 연관된 엔티티 사용

Order order = entityManager.find(Order.class, orderId);
Customer customer = order.getCustomer(); // 실제로 이 시점에서 데이터베이스에서 조회

결론

JPA에서 연관관계의 지연 로딩은 프로그램의 성능을 향상시키고 불필요한 데이터베이스 조회를 줄여줄 수 있는 유용한 기능입니다. 적절한 시점에 데이터를 로딩하여 효율적으로 사용할 수 있도록 설정하는 것이 중요합니다.

이상으로 JPA와 연관관계의 지연 로딩에 대한 내용을 알아보았습니다.

참고문헌: