프록시가 어떻게 값을 가져올까?
1. getReference()를 호출하면, 영속성 컨텍스트가 일을 한다.
2. 영속성 컨텍스트는 DB에서 값을 조회하여 객체를 새로 생성한다.
3. 프록시는 이 생성된 객체를 그때 참조하는 것이다.
프록시는 처음에 한번만 초기화 된다.
이후, 계속 DB에 접근해 값을 가져오지 않아도 되기 때문에 효율적이다.
프록시의 타입을 알고 싶을 땐, instance of를 활용한다.
실무에서는 지연 로딩을 사용해야 한다.
- 실무에서는 테이블이 많기 때문에 너무 많은 것들이 같이 조회되기 때문이다.
- JPQL에서 n+1 문제를 일으킨다.
- 해결법 : 전부 지연 로딩으로 세팅을 하고, 필요한 경우에만 petch join을 이용한다.
기본 세팅
- @OneToMany 는 지연로딩이 기본 세팅되어 있다.
- @ManyToOne, @OneToOne은 즉시로딩이 기본 세팅되어 있다. ( -> 지연로딩으로 바꿔주자)