개요 JPA는 엔티티 간의 관계를 설정할 때 다양한 페치 전략을 제공하며, 그 중 지연 로딩(Lazy Loading) 은 성능 최적화를 위해 자주 사용된다. 지연 로딩은 실제로 연관된 데이터가 필요할 때만 데이터베이스에서 로딩하는 방식으로, 초기 로딩 시 불필요한 데이터를 가져오는 것을 방지하여 애플리케이션의 응답성을 향상시킨다. 이번 글에서는 JPA에서 지연 로딩이 왜 사용되는지, 연관 관계의 주인이 무엇인지, 지연 로딩 시 프록시와 null이 어떻게 할당되는지, 그리고 특히 OneToOne 양방향 관계에서 지연 로딩이 정상적으로 동작하지 않는 이유에 대해 생각해보겠다. 연관 관계의 주인 JPA에서 연관 관계의 주인(Owner) 이란, 두 엔티티 간의 관계에서 실제로 데이터베이스의 외래 키(Forei..
개요 이전 글에서 Hibernate의 AnnotationBinder에서 어떻게 연관 관게를 처리하는지 알아보았다. 그때 흥미로운 점이 바로 어노테이션 메타 데이터를 아래와 같은 형태로 검증한다는 것이었다. if (property.isAnnotationPresent(OneToOne.class)) 이 이 property는 어떤식으로 설계되어 있는지 궁금하여 분석해보았는데, 같은 글에 다루기에는 양이 방대할 것 같아서 별도의 내용으로 글을 작성하기로 하였다. (JPA) Hibernate는 내부적으로 어떻게 연관 관계 어노테이션을 처리할까? (feat: AnnotationBinder, Hibernate 5개요이전 글에서 Lazy와 Eager 중 Lazy를 사용해 성능을 튜닝해야 한다는 이야기를 했었다. 이번 포..
개요 이전 글에서 Lazy와 Eager 중 Lazy를 사용해 성능을 튜닝해야 한다는 이야기를 했었다. 이번 포스팅에서는 JPA가 내부적으로 Lazy와 Eager 로딩을 어떻게 구분하는지, 그리고 이를 판단하는 주체가 누구인지, 그 주체가 어떻게 동작하는지 더 깊이 있게 파고들어 보자. (hibernate 5.4.18.Final 기준) JPA 연관 관계 조회 성능 최적화 (feat: One To One, Many To One, 지연 로딩, 패치 조인)개요 JPA를 실무에서 사용하다 보면 대표적으로 거론되는 문제 중 하나가 바로 N+1 문제이다. 필자 또한 JPA를 이용해 직접 쿼리를 짜지 않고도 객체 지향적으로 매핑할 수 있다는 점에서 큰 생산wise-dev-seop.tistory.com JPA 연관 관계..
개요이전 글에서 살펴보았듯 JPA로 OneToOne이나 ManyToOne 관계를 조회할 때는 비교적 단순한 방식으로 성능을 개선할 수 있다. 예를 들어, 페치 조인(fetch join) 을 적용하면 여러 쿼리를 한 번으로 줄일 수 있다. JPA 연관 관계 조회 성능 최적화 (feat: One To One, Many To One, 지연 로딩, 패치 조인)개요 JPA를 실무에서 사용하다 보면 대표적으로 거론되는 문제 중 하나가 바로 N+1 문제이다. 필자 또한 JPA를 이용해 직접 쿼리를 짜지 않고도 객체 지향적으로 매핑할 수 있다는 점에서 큰 생산wise-dev-seop.tistory.com 하지만 OneToMany 같은 컬렉션 관계를 다룰 때는, 조인으로 인해 데이터가 중복 조회(일명 ‘뻥튀기’)될 ..