N+1 문제란?
- 요청이 1개의 쿼리로 처리되길 기대했는데 N개의 추가 쿼리가 발생하는 현상
- 만약 100만건의 데이터를 처리할 때 어마무시한 데이터 쿼리가 진행되서 낭비가 심해진다.
지연로딩이란?
- 엔티티를 조회할 시 사용할때까지 데이터로딩을 미루는 것
JPQL이란?
N+1 문제를 해결하는 방법
- select 크루.*,
- 할일.*
- from 크루 join fetch 할일
- 최초에 관련된 데이터를 한꺼번에 가져와서 객체화를 해줬기 때문에 DB를 거치지않고 데이터를 반환해준다.
즉시로딩을 사용할경우
- 연관관계가 있는 엔티티는 신경안쓰고 조회대상이 되는 Entity기준으로만 쿼리를 만든다.
- 즉시 쿼리를 실행해서 진행하면 전체 로딩을 하고 N+1쿼리를 조회한다.
-> 즉시로딩을 최대한 사용하지말고 , 지연로딩 + fetch join으로 하자.