프록시
이번시간에는 프록시와 연관관계 관리라는 주제를 공부해볼 것임.
예를 들어 member객체와 team객체가 있다고 해보자.
member객체에는 member와 멤버객체가 속한 team도 같이 출력하는 메서드가 있다.
private static void printMemberAndTeam(Member member) {
String username = member.getUsername();
System.out.println("username = " + username);
Team team = member.getTeam();
System.out.println("team.getName() = " + team.getName());
}
위의 메서드는 member객체만으로는 실행할 수 없다. member와 연관관계를 가진 team객체를 가지고와야 teamName도 출력할 수 있기 때문이다. 따라서 해당 메서드를 실행하기 위해서는 처음에 member하나 가져올때 쿼리한번, 그리고 team엔티티 가져오기위해 쿼리한번, 총 두번의 쿼리가 DB로 날아간다.
또한 이번엔 member객체만 출력하는 메서드가 있다고 해보자.
private static void printMember(Member findmember) {
System.out.println("member = "+ findmember.getUsername());
}
이번엔 team엔티티를 DB에서 가져올 필요가 없다. 오직 멤버객체만 DB에서 쿼리날려서 가져오면 된다.
즉 여기서 말하고 싶은건, 비즈니스 로직에 따라 어떨땐 member객체만 쿼리로 가져올 필요가 있고, 어떤 상황에서는 member와 team객체를 둘다 거의 항상 같이 사용하는 경우도 있다는 것이다. 이 각각의 상황을 구분하지 않으면.. 귀찮은 일이 생길게 뻔하다.
JPA는 이를 지연로딩과 프록시라는 기능으로 간단하게 제공한다.