즉시로딩 vs 지연로딩
❓JPA에서 즉시 로딩이란?
💬 즉시 로딩이란 DB에서 데이터를 조회할 때 연관관계가 있는 데이터들도 가져오는 것입니다.
❓JPA에서 지연 로딩이란?
💬 지연 로딩은 DB에서 데이터를 조회할 때 연관관계가 있는 데이터들을 Proxy로 대체를 해둡니다. 그리고 실제로 사용할 때 데이터를 가져옵니다.
❓둘 중 어느 것이 Default로 설정이 되어있나요?
✅ ManyToOne, OneToOne 경우 Default는 즉시 로딩입니다. ManyToMany, ManyToOne 경우 Default는 지연 로딩입니다.
public @interface ManyToOne {
FetchType fetch() default FetchType.EAGER;
}
public @interface OneToOne {
FetchType fetch() default FetchType.EAGER;
}
public @interface ManyToMany {
FetchType fetch() default FetchType.LAZY;
}
public @interface OneToMany {
FetchType fetch() default FetchType.LAZY;
}
❓그렇다면 Default를 그대로 쓰면 되는 건가? 아니면 무엇을 써야 하는가?
💬 즉시 로딩을 사용하는 경우 한 번에 가져올 수 있다는 장점이 있지만, 연관관계가 많다면 N+1문제가 발생할 수 있다. N+1문제의 경우 1개의 요청에 N개의 요청이 따라붙는 건데, 성능 문제를 야기할 수 있다. 그래서 지연 로딩을 기본으로 사용하는 것을 권장하는 것 같다.
생각
JPA에서 즉시로딩과 지연로딩의 차이를 알 수 있었다. 그리고 거기에서 생기는 N+1 문제가 무엇이고 그로 인해 발생할 수 있는 성능 이슈를 알 수 있었다. 이후에는 나도 프로젝트를 할 때 지연로딩을 설정해서 N+1로 생길 수 있는 성능 이슈를 예방해 봐야겠다.
'개발일지 > TIL' 카테고리의 다른 글
[230706] String Constant Pool? (0) | 2023.07.06 |
---|---|
[230705] 미니 프로젝트(230628) 코드 피드백 및 적용 (0) | 2023.07.05 |
[230703] JavaServlet에 대해 이해하기 (0) | 2023.07.03 |
[230702] Java 이미지 리사이징 방법 (0) | 2023.07.02 |
[230701] 쿠키, 세션, JWT ? (0) | 2023.07.01 |