n+1

·TIL,일일 회고
개요JPA를 사용한 프로젝트를 진행하다보면, DB 조회 시 연관 관계에 있는 하위 엔티티들을 한꺼번에 가져오지 않고, 각각의 하위 엔티티를 개별적으로 조회하면서 불필요한 추가 쿼리가 발생하는 문제인 N+1 문제가 자주 발생합니다. 이러한 N + 1 문제를 해결하는 방법에는 @EntityGraph, @BatchSize , Fetch Join등 여러가지가 있습니다. 그런데 왜 많은 개발자들이 여러가지 방법 중 Fetch Join을 사용하는지에 대해서 정리하고자 합니다. 왜 Fetch Join인가❓1. 즉시 로딩과 명시적 제어Fetch Join은 JPQL 쿼리에서 명시적으로 사용되기 때문에, 어떤 연관 데이터를 즉시 로딩할지 명확하게 정의할 수 있습니다. 이는 @EntityGraph나 @BatchSize와 ..
·TIL,일일 회고
개요JPA를 사용하다보면 가장 흔하게 발생하는 문제가 바로 "N+1"문제입니다. N+1문제를 해결하기 위한 방법은 여러가지이지만 주로 Fetch Join을 사용하고는 합니다. 본 글에서는 왜 많은 방법중에서 Fetch Join을 주로 사용하는지에 대해서 알아본 내용을 정리하고자 합니다. Fetch Join의 장점1. 즉시 로딩과 명시적 제어Fetch Join은 JPQL 쿼리에서 명시적으로 사용되기 때문에, 어떤 연관 데이터를 즉시 로딩할지 명확하게 정의할 수 있습니다. 이는 @EntityGraph나 @BatchSize와 같은 방법들에 비해 제어가 더 직관적입니다.SELECT h FROM HubPath h JOIN FETCH h.departureHub JOIN FETCH h.arrivalHub 위와 같이 ..
·Framework/JPA
프록시(proxy)란❓프록시(Proxy)란 소프트웨어 디자인 패턴의 하나로, 다른 객체를 대신하여 그 객체에 대한 접근을 제어하거나 기능을 확장하는 객체를 의미합니다. 프록시는 실제 객체를 대신하여 그 객체의 메서드 호출을 가로채고, 필요한 경우 실제 객체에 대한 작업을 수행합니다. 프록시는 일반적으로 원래 객체와 같은 인터페이스를 구현하여, 클라이언트가 원래 객체를 사용하는 것처럼 보이게 합니다. 한마디로 표현하자면 "가짜 객체"라고 할 수 있습니다.  위 그림에서 알 수 있듯이 프록시 객체는 실제 Entity를 상속 받아서 만들어지기 때문에 실제 클래스와 겉 모양이 같습니다. 프록시 객체는 실제 엔티티에 대한 접근을 지연시키며, 실제 엔티티가 필요할 때까지 데이터베이스 쿼리를 실행하지 않습니다. 또한..
지누박
'n+1' 태그의 글 목록