프록시(2)
-
JPA proxy - Lazy, Eager loading
Member Entity를 DB에서 조회할 때, Team도 함께 조회해야 하는가? 프록시는 이를 loading방식으로 선택할 수 있게끔 해준다.(뒤에 설명하겠지만 반.드.시 lazy Loading을 하자. 사실 선택 할 수 없음..) 1) 프록시 기초 em.find() vs em.getReference() • em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 • em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 em.find(Member.class, member.getId())의 방식으로 Member를 조회하면, JPA는 여지없이 Member Entity를 데려온다. 하지만 em.getReference()의 방식을 사용하면 JPA는 Member E..
2022.03.30 -
AOP(Aspect Oriented Programming)
AOP? → 공통 관심사항을 분리하는 방식 공통 관심사항을 추출할 수 있는 이유에는 proxy(대리자)가 있다. 프록시는 런타임 위빙(Runtime Weaving)을 수행한다. 런타임 위빙이란, Runtime때 실제 객체를 가상의 객체로 적용시키는 과정이다. Spring에서는 이 런타임 위빙을 1) JDK Dynamic Proxy 2) CGlib Proxy 두가지 방법으로 구현한다. 두번째 방법인 CGlib(Code Generator Library)는, 이미 스프링이나 하이버네이트에 내장되어있다. DI로 주입받은 객체를 출력해보면 CGLIB이 생성한 가짜 객체가 등장함을 알 수 있다. 즉, memberService가 아닌 다른 객체가 Injection 되어있다. 타겟을 감싸는 프록시가 런타임에 생성되면,..
2022.03.02