JPA
-
지연로딩, 즉시로딩JPA 2021. 8. 22. 21:56
Team과 Member의 관계가 1:N이고 member를 조회 할 때 member만 사용하는대 Team까지 가져오면 비용적 손해다. 그럴 경우 LAZY로딩을 이용해 proxy로 조회하는 방법을 쓰면된다. ex) @ManyToOne(fetch = FetchType.LAZY) // 지연로딩 주의사항 1.기본은 모두 LAZY로딩으로 잡아 놓고, 필요한 부분만 EAGER로딩으로 변경하는 것을 권장하고 있다. 이유 1-1 JPQL로 작성시 N+1 이슈발생. 1-2 다른 팀원이 member만 조회하려고 findById를 날렸는대, team 쿼리까지나가면 당황. 2. 연관관계 별로 fetch 기본값이 다름. @ManyToOne -> EAGER @OneToOne -> EAGER @ManyToMany -> LAZY @..
-
[QueryDSL] 데이터 존재 유무 체크로직 성능 테스트JPA 2021. 3. 25. 00:23
요약 : 데이터 존재 유무 체크 로직 작성시, fetchCount()가 아닌, fetchFirst()를 쓰자! 주의사항 : fetchFirst() 수행시, 데이터가 없으면 0을 반환할 줄 알았는대, 0이 아닌 NULL을 반환했다. NULL체크 로직 필수! 테스트 시나리오 : H2DB를 사용했고, 약10만건의 데이터를 insert후, 특정 데이터가 존재하는지 확인! 결과 : fetchCount 소요시간 : 약 38초, fetchFirst() 소요시간 : 약 31초. 실행쿼리를 보면 fetchCount()는 count() 쿼리를 사용하였고, fetchFirst는 limit 1을 사용하였다. 전체컬럼을 스캔하는 count()보다야 limit 1이 훨씬 빠르니, 이러한 결과가 나왔다. /** * 데이터 존재 유..