Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- CS
- 시큐리티
- springboot
- Java
- python
- programmers
- 백준
- Flutter
- 스프링
- spring
- 데이터베이스
- 리눅스
- postgresql
- 스프링부트
- CS지식
- Spring Security
- 네트워크
- baekjoon
- 플러터
- 프로그래머스
- 스프링 부트 쇼핑몰 프로젝트 with JPA
- Oracle
- DB
- backjoon
- JPA
- 자료구조
- 파이썬
- 자바
- 자바스크립트
- 데이터
Archives
- Today
- Total
Jin's Dev Story
[Spring Data JPA] 즉시로딩, 지연로딩 본문
즉시 로딩
⇒ 연관된 엔티티를 즉시 조회 후 영속성 컨텍스트에 저장
- 연결된 모든 데이터를 즉시 가지게 된다는 것.
문제점
- 조인해서 가져오는 엔티티가 많아질수록 쿼리가 어떻게 실행될지 개발자가 예측하기 힘듦
- 사용하지 않은 엔티티도 한꺼번에 가져오기 때문에 성능상 문제가 발생할 수 있음
- @ManyToOne, @OneToOne처럼 One으로 끝나는 것들은 기본값이 즉시 로딩
- @OneToMany, @ManyToMany처럼 Many로 끝나는 것들은 기본값이 지연 로딩
- 즉시 로딩 대신에 지연 로깅 방식 사용
-> (fetch = FetchType.*LAZY*) 연관관계 어노테이션 뒤에 붙이기
// 양방향 매핑을 하기 위해 설정, 영속성 전이 설정, 고아객체 설정(고아객체가 되면 다 날려버리겠다는 것)
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<OrderItem> orderItems = new ArrayList<>();
지연 로딩
연관된 엔티티는 사용할 때 조회하는 Fetch LAZY 타입
⇒ 연관된 엔티티를 프록시 형태로 영속성 컨텍스트에 저장
⇒ 연관된 엔티티를 실제 사용하는 시점에 JPA가 SQL 호출해 조회해 옴.
- 해당 전략이 선택된 필드는 접근 전까지 데이터를 가져오지 않음.
- 즉, 필요할 때 데이터를 불러온다는 뜻
- 따라서 성능상 우위를 점함. ( 웬만하면 LAZY 쓰라는 이유 )
- 실제 비즈니스 구현 시 매핑되는 엔티티의 개수 ↑
- 사용하지 않는 데이터도 한꺼번에 조회하므로 성능 ↓
- @ManyToOne 어노테이션에 fetch 설정 지정
import jakarta.persistence.*;
import kr.spring.item.entity.Item;
import kr.spring.utils.entity.BaseEntity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OrderItem extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_item_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_id")
private Order order;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;
private int orderPrice;
private int count;
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
연관 관계 매핑 지연로딩 설정
- 연관 관계가 맺어진 엔티티의 fetch 전략을 모두 LAZY로 설정
'Web & Android > Spring Data JPA' 카테고리의 다른 글
[Spring Data JPA] 영속성 전이, 고아객체 (0) | 2023.10.15 |
---|---|
[Spring Data JPA] 연관 관계 매핑 (0) | 2023.10.15 |
[Spring Data JPA] Querydsl (0) | 2023.10.15 |
[Spring Data JPA] @Query (0) | 2023.10.14 |
[Spring Data JPA] JPA (0) | 2023.10.14 |