반응형
지연로딩
프로그램에서 데이터를 필요로 할 때 데이터를 불러오지 않고 해당 데이터가 실제로 필요한 순간에 로딩하는 방식입니다.
예를 들어보자면 엔티티 A가 다른 엔티티 B와 일대다 관계를 갖고 있다고 가정하면 A를 조회할 때 B 엔티티 들은 처음에 데이터베이스에서 가져오지 않고 A에서 B에 접근할 때 실제로 필요한 시점에 데이터베이스에서 로딩됩니다
지연로딩 전
@Entity(name = "Member")
@Getter
public class Member extends TimeStamp{
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
}
지연로딩 후 (FetchType.LAZY)
@Entity(name = "Member")
@Getter
public class Member extends TimeStamp{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
}
즉시 로딩
관련된 데이터를 필요로 하기 전에 미리 데이터베이스에서 가져와 메모리에 로드하는 방식입니다. 스프링과 JPA에서 엔티티 간의 관계를 설정할 때 이 방식을 선택할 수 있습니다.
엔티티 A가 엔티티 B와 일대다 관계를 갖고 있다고 했을 때 A를 조회할 때 즉시 로딩을 설정한다면 A를 가져올 때에는 연관된 B 엔티티들도 함께 데이터베이스에서 가져와 메모리에 로드됩니다.
즉시로딩 사용 전
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@OneToMany(mappedBy = "post", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Comment> comments = new ArrayList<>();
}
즉시로딩 사용 후 ( FetchType.EAGER로 comments를 설정하여 즉시로딩 사용 변경)
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@OneToMany(mappedBy = "post", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Comment> comments = new ArrayList<>();
}
728x90
'Spring(Boot & FrameWork)' 카테고리의 다른 글
Thymeleaf (0) | 2023.11.16 |
---|---|
@Entity와 @Table의 차이 (0) | 2023.11.14 |
디자인 패턴 (1) | 2023.11.13 |