작성
·
131
0
패치조인의 정의가 연관된 엔티티들을 빠르게 조회하는것 아닌가요?
강의에서 실무에서는 모두 지연로딩으로 설정하라고 하셨는데,
페치조인 사용하지않고 그냥 즉시로딩으로 바꾸는거랑 무슨차이인건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
정중한 개구리님 질문에 답변드리겠습니다.
즉시로딩(Eager Loading)과 패치조인(Fetch Join)은 데이터 접근 방식에서 차이를 보입니다.
즉시로딩은 연관된 엔티티를 최초 조회할 때 함께 불러오는 방식입니다. 예를 들어, @OneToMany
같은 관계가 있을 때 연관된 엔티티들을 처음부터 모두 조회합니다. 이 방식은 연관된 데이터가 항상 필요한 경우 유용하지만, 불필요한 데이터까지 조회할 수 있어 성능 저하의 원인이 될 수 있습니다.
반면, 패치조인은 JPQL이나 Criteria API를 사용하여 명시적으로 연관된 엔티티를 조회하는 방식입니다. 패치조인을 사용하면, 지연로딩으로 설정된 엔티티를 조회하는 쿼리를 실행할 때 연관된 엔티티를 함께 조회할 수 있어서 N+1 문제를 해결할 수 있습니다. 이 방식은 필요한 시점에 특정 엔티티들을 성능 저하 없이 가져올 수 있는 이점이 있습니다.
실무에서 모두 지연 로딩으로 설정하라는 조언은 대부분의 경우 지연 로딩이 즉시로딩보다 성능 최적화 측면에서 더 유리하기 때문입니다. 지연 로딩을 사용하면 필요한 경우에만 데이터를 조회하기 때문에 불필요한 데이터 조회를 방지할 수 있습니다. 패치조인을 통해 필요한 시점에 관련 데이터를 효율적으로 불러올 수 있으므로, 즉시로딩으로 설정하는 것보다 더 세분화되고 최적화된 데이터 접근 방식을 사용할 수 있습니다.
즉, 패치조인은 필요한 데이터만 선택적으로 조회하는 반면, 즉시로딩은 관계가 설정된 모든 데이터를 처음부터 조회하므로 성능에 영향을 미칠 수 있는 주요 차이가 있습니다.