개발/Java
-
Spring Data JPA, N + 1개발/Java 2024. 2. 21. 23:44
데이터베이스 구조. 엔티티. fetch의 기본 값은 EAGER. 컨트롤러에서 먼저 category를 가져와보자. 실행하면, 쿼리는 한번만 실행되고,기대한 결과가 나온다. 컨트롤러에서 food를 가져오면, 여기서 N + 1 이슈가 발생.쿼리를 보면 먼저 food를 가져오고 연관된 엔티티 category의 컬럼 수만큼 쿼리를 실행한다. 결과는 어쨌든 기대한 결과가 나온다.EAGER이 이렇고 이제 fetch 전략을 바꿔보자. 무한루프에 빠지기 때문에 여러 방법이 있지만 여기선 일단 JsonIgnore를 붙여주고, 이렇게 food 엔티티의 fetch를 LAZY, 지연로딩으로 바꿔주면 컨트롤러의 로직을 똑같이 요청할 때 쿼리를 한번만 실행한다. 결과를 보면 카테고리 엔티티가 빠져있다.컨트롤러 로직에 ..