지연 로딩

Spring boot

[query Optimization] LAZY 로딩과 N+1 문제

대부분의 경우, 어떠한 엔티티를 가져올 때 모든 연관된 엔티티도 함께 가져오는 eager fetch 대신, 그때 그때 필요한 엔티티만 join해서 가져오는 Lazy Fetch를 사용한다. 하지만 이러한 방법에는 N+1 문제가 발생하게 된다. [N+1 문제] N+1 문제는 데이터베이스에서 데이터를 조회할 때 발생할 수 있는 성능 이슈 중 하나다. N+1 문제는 한번의 쿼리로 가져올 수 있는 데이터를 가져오기 위해 N개의 쿼리를 더 실행하는 문제를 의미한다. 예를 들어, 게시물과 댓글을 저장하는 데이터베이스가 있다고 가정해보자. 각 게시물은 여러 개의 댓글을 가질 수 있다. 이때, 게시물과 그에 대한 댓글 정보를 모두 가져와야 한다고 가정하면, 다음과 같이 쿼리를 작성할 수 있다. SELECT * FROM ..

Spring boot

[JPA] Part 3 프록시와 연관관계

*김영한님의 JPA 기본 강의를 기반으로 작성하였습니다. 프록시: 실제 엔티티가 아닌 가짜 클래스. 실제 클래스를 상속받아 만들어진다. 껍데기는 똑같지만, id, name 등 기본정보만 보유하고 있다. 프록시 객체는 실제 객체의 참조를 보관하고, 프록시 객체 호출 시 프록시 객체는 실제 객체의 메소드 호출. ex) 프록시에서 A 메소드를 호출 -> 실제 객체의 A메소드 호출 member를 조회하는 상황에서 꼭 Team도 불려야 할까? (즉시 로딩) 필요할 때 불러 쓰자( 지연 로딩 ) member 생성시점에서는 member만 select하고, team은 select 하지 않는다. member.getTeam() 등으로 team이 필요한 시점에 DB에 쿼리를 넣어서 가져온다. 이걸 프록시로 처리할 수있다. ..

코앤미
'지연 로딩' 태그의 글 목록