Java/Spring-JPA
-
final Class는 왜 JPA Entity가 될 수 없을까?Java/Spring-JPA 2021. 1. 31. 20:19
final class는 JPA Entity Class가 될 수 없다. 왜 그럴까? JPA는 DB에서 데이터를 조회한 후 엔티티를 생성할 때 지연 로딩이라는 방식을 사용한다. 지연 로딩이란? 해당 엔티티(테이블)와 관계(join)를 맺고 있는 엔티티(테이블)들에 대한 정보는 그 즉시 로딩되지 않고 getter 메소드가 호출되는 등 실제 사용될 때 로딩된다. 이러한 방식을 지연 로딩이라 한다. 지연 로딩 방식을 이용해 데이터를 조회하기 위해서, JPA는 프록시 객체라는 것을 생성한다. 프록시 객체는 간단히 말해서 엔티티를 상속해서 확장한 클래스이다. 하지만 final class는 상속될 수 없기 때문에 JPA는 그 final class를 확장해서 프록시 객체로 사용할 수가 없다. 따라서 JPA Entity로..
-
N+1 쿼리 문제란?Java/Spring-JPA 2020. 7. 27. 11:47
N+1 쿼리 문제란? 1:N 관계인 두 엔티티가 있을 때, 1에 해당하는 엔티티를 N+1 in Lazy Loading N+1 in Eager Loading FetchType을 변경하는 것은 단지 N+1 발생 시점을 연관관계 데이터를 사용하는 시점으로 미룰지, 아니면 초기 데이터 로드 시점에 가져오느냐에 차이만 있는 것 N+1이 발생하는 이유? JPQL 입장에서는 즉시 로딩, 지연 로딩과 같은 글로벌 패치 전략을 무시하고 JPQL만 사용해서 SQL을 생성합니다. N+1 해결책 1 :: Fetch Join 가장 많이 사용하는 방법 페치 조인을 사용하게 되면 연관된 엔티티는 프록시가 아닌 실제 엔티티를 조회하게 되므로 연관관계 객체까지 한 번의 쿼리로 가져올 수 있습니다. N+1 해결책 2 :: @BatchS..
-
JPA(Java Persistence Api) - 입문Java/Spring-JPA 2019. 4. 6. 13:26
■JPA(Java Persistence Api) 간단 설명!- 먼저 ORM이 무엇인지 알아야 한다!ORM(Object-Relational Mapping)은 객체지향적인 db 개발 패러다임, 쉽게 말하면 객체지향적인 db 개발 방법이라고 말할 수 있다.객체지향 언어의 객체와 관계형 데이터베이스의 데이터 사이에서 나타나는 미묘한 차이와 이로 인한 문제들을 극복하기 위해 등장한 개발 방법이다. - ORM을 구현한 프레임워크는 상당히 많다. php 기반의 Laravel, python 기반의 Django, java 기반의 Spring 등 - 여기서는 ORM이라는 개념을 Spring 프레임워크에 맞게 명세된 JPA를 배울것이다.정확히는 ORM을 java에 맞게 구체화한 JPA, 그리고 그 JPA를 구현한 Hiber..