프록시

학습 페이지

이번시간에는 프록시와 연관관계 관리라는 주제를 공부해볼 것임.

프록시를 왜 쓸까?

예를 들어 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는 이를 지연로딩과 프록시라는 기능으로 간단하게 제공한다.

프록시란?