20240402 (화) 최종 프로젝트 티켓레이더 6주차 - 유저테스트전 최적화?
2024. 4. 2. 21:30ㆍTIL
엔티티에서 대부분을 FetchType을 EAGER로 설정해놨다.
일부 Response에서 LAZY로 해놓을시 불러오질 못해서였다.
하지만 EAGER 라는것은 상당히 조심해서 써야한다.
이유를 들자면
- EAGER 를 사용하면 예상치못한 SQL이 발생할수 있다.
- ManyToOne이 5개가 있는데 전부 EAGER로 설정되어있다면 조인이 5개 일어난다.
- EAGER 는 JPQL에서 N+1 문제를 일으킬수 있다.
- 위에 이유에 이어서 일어나는 문제인데, 다대일 관계에서 멤버(다)2개와 팀(일)이 2개 있다고 가정해보자
- 멤버 2명을 조회한다.
- JPQL에서는 EAGER시에 반환시점에서 전부 다 조회가 되어있어야 한다.
- 멤버를 조회했는데 그 멤버마다 팀을 추가로 또 가져온다.
- 이처럼 N+1의 문제는 쿼리를 1개 날렸는데 그 때문에 추가쿼리가 N개 생긴다 라는 의미
처음엔 이러한 오류들이 좀 나왔다.
이게 우리가 EAGER로 해놓은 이유들
LAZY상태에선 트랜잭션이 끝난시점에서 직접적으로 부르지않은 엔티티의 프로퍼티를 사용할수가 없어서였다.
해당 오류를 해결하려면
이런것처럼 리스폰스시에 필요한 객체들을 트랜잭션 내에서 생성해서 줄필요가 있다.
'TIL' 카테고리의 다른 글
20240404 (목) 최종 프로젝트 티켓레이더 6주차 - 피드백 수용 (0) | 2024.04.04 |
---|---|
20240403 (수) 최종 프로젝트 티켓레이더 6주차 - 유저테스트 시작 (0) | 2024.04.03 |
20240401 (월) 최종 프로젝트 티켓레이더 6주차 - 최종발표준비 (1) | 2024.04.01 |
20240329 (금) 최종 프로젝트 티켓레이더 5주차 - 마무리주차 (0) | 2024.03.29 |
20240328 (목) 최종 프로젝트 티켓레이더 5주차 - 마무리주차 (1) | 2024.03.28 |