JPA의 프록시의 이해하기 전에 사전적인 의미를 알고 넘어가도록 하자
프록시(Proxy)는 무언가를 대체하는 것을 의미한다
JPA에서 무언가를 대체할 만한 경우가 있나? 바로 지연 로딩을 사용할 때 필요하다
지연 로딩을 하려면 연관된 엔티티의 실제 데이터가 필요할 때 까지 조회를 미뤄야 한다.
그렇다고 해당 엔티티를 연관관계로 가지고 있는 엔티티의 필드에 null 값을 넣어 둘 수는 없으니 이때 데이터 베이스 조회를 미루는 프록시 객체를 사용한다.
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으로 함께 불러오게 된다.