라이브러리의 사용 방법이 곧 코딩 실력이다...
일단 EntityGraph가 뭔지 부터 보자
연관관계가 있는 엔티티를 조회할 경우 지연 로딩으로 설정되어 있으면 연관관계에서 종속된 엔티티는 쿼리 실행 시 select 되지 않고 proxy 객체를 만들어 엔티티가 적용시킨다. 그 후 해당 프락시 객체를 호출할 때마다 그때그때 select 쿼리가 실행된다.
위 같은 연관관계가 지연 로딩으로 되어있을 경우 fetch 조인을 사용하여 여러 번의 쿼리를 한 번에 해결할 수 있다.
@EntityGraph는 Data JPA에서 fect 조인을 어노테이션으로 사용할 수 있도록 만들어 준 기능이다.
저번 검증 시리즈의 내용과 비교해보면
@EntityGraph 어노테이션이 추가 되어 있다
@EntityGraph(attributePaths = {"members"})
@Query("select m from Team m")
public List<Team> findAllList();
결과를 한번 보자

브라우저에서의 데이터는 같다.
그럼 이제 로그도 보게 되면
2025-07-24T17:00:22.338+09:00 INFO 4400 --- [Nplus1] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Hibernate:
/* select
m
from
Team m */ select t1_0.id, m1_0.team_id, m1_0.memberid, m1_0.memberage, m1_0.membername, t1_0.name
from tbl_team t1_0
left join tbl_memeber m1_0 on t1_0.id=m1_0.team_id
이런 식으로 한번의 쿼리로 호출을 하는 것을 볼 수 있다.
attributePaths로 다른 엔티티를 참조하는 경우에 기존에 가지고 있던 프록시 객체에서
가져옴으로 추가적인 호출이 필요 없게 되는 것이다.
위의 테스트에 대한 트러블 슈팅은 따로 정리해서 진행해보고자 한다.