즉시로딩과 지연로딩

Member member = em.find(Member.class, "member1");
Team team = member.getTeam(); // 객체 그래프 탐색
System.out.println(team.getName()); // 팀 엔티티 사용

JPA는 위와 같은 코드를 사용할 때 조회 시점을 선택할 수 있도록 두 가지 방법을 제공한다.

Untitled

그렇다면 Member와 Team을 함께 사용하는 일이 많다면 즉시 로딩으로 설정하고 Member만 사용하는 일이 많다면 지연 로딩을 사용하면 되겠구나!

노노 그렇지 않다. 가급적이면 전부 다 즉시 로딩으로 설정해놓고 N+1이 발생하는 경우는 Fetch Join으로 해결하는 것이 좋다.

이유는 아래와 같다.

다음은 N+1 문제와 패치 조인에 대해서 Araboza