반응형
지연 로딩 (Lazy Loading) ?
- JPA(Java Persistence API)에서 모든 데이터를 한번에 가져오는 것이아니라 필요한 데이터만 필요한 시점에 가져오는 기술
- 네트워크를 통한 데이터 전송 양을 줄여 애플리케이션의 성능을 향상시키기 위해 사용됨
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "customer", fetch = FetchType.LAZY)
private List<Order> orders
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String product;
@ManyToOne(fetch = FetchType.LAZY)
private Customer customer;
}
위 예제에서는 Customer와 Order 두 개의 엔티티가 있습니다.
Customer 엔티티는 Order 엔티티와 일대다 관계를 가지며, Order 엔티니는 Customer 엔티티와 다대일 관계를 가집니다.
fetch 속성은 가져오기 전략을 지정하는데 사용됩니다.
이 경우 Customer 엔티티의 orders 필드와 Order 엔티티의 customer 필드에 대해 FetchType.LAZY로 설정합니다.
이렇게 함으로써 주문 및 고객 데이터는 액세스할 때까지 로드되지 않습니다.
즉시 로딩 vs 지연 로딩
처음부터 연관된 엔티티를 모두 영속성 컨텍스트에 올려두는 즉시 로딩과 필요할 때마다
SQL을 실행해서 연관된 엔티티를 가져오는 지연 로딩중 어떤게 더 좋을까요?
정답은 없습니다! 상황에 따라 다르기 때문입니다.
만일 대부분의 애플리케이션 로직에서 Customer와 Order 엔티티를 같이 사용한다고 한다면 SQL 조인을 사용해서 회원과 팀 엔티티를 한번에 조회하는 것이
성능면에서 더 좋다고 판단할 수 있겠지만, 대부분의 애플리케이션에서 Customer와 Order 엔티티를 따로 사용한다면 지연 로딩을 사용하는것이 맞는 판단이 된다.
반응형
'Dev > JPA' 카테고리의 다른 글
| [JPA] Open In View (0) | 2023.03.11 |
|---|