프록시란?

Untitled

JPA의 프록시의 이해하기 전에 사전적인 의미를 알고 넘어가도록 하자

프록시(Proxy)는 무언가를 대체하는 것을 의미한다

JPA에서 무언가를 대체할 만한 경우가 있나? 바로 지연 로딩을 사용할 때 필요하다

지연 로딩을 하려면 연관된 엔티티의 실제 데이터가 필요할 때 까지 조회를 미뤄야 한다.

그렇다고 해당 엔티티를 연관관계로 가지고 있는 엔티티의 필드에 null 값을 넣어 둘 수는 없으니 이때 데이터 베이스 조회를 미루는 프록시 객체를 사용한다.

객체를 조회할 때 연관관계가 있는 객체도 함께 조회해야 할까?

Untitled

public void printUserAndTeam(String memberId) {
Member member = em.find(Member.class, memberId); // 멤버와 팀 데이터 외부 조인으로 조회
Team team = member.getTeam();
team.getId();
System.out.println("회원 이름: " + member.getUsername());
System.out.println("소속팀: " + team.getName()); }

위의 코드대로 실행을 하게 되면 Member member = em.find(Member.class, memberId); 에서 Member와 Team의 데이터를 Outer Join으로 함께 불러오게 된다.