지연 로딩을 위한 프록시 객체

HwangBaco·2023년 5월 26일
0

프록시 객체


프록시 객체를 단독으로 로직에 활용하는 경우는 드물지만, 이를 이해하고 있어야 지연 로딩을 원활하게 이해할 수 있으므로 프록시 객체 개념을 이해하고 있는 것은 중요합니다.

프록시 객체는 그 단어의 의미에서 알 수 있듯이, 대리 객체를 의미합니다. A 엔티티가 B 엔티티와 연관관계가 있는 상황에서, "A 엔티티의 정보를 조회하려고 할 때 항상 B 엔티티의 정보도 DB에서 모두 불러와야 하는가?"에 대한 물음에서 시작된 개념이라고 이해할 수 있습니다. 즉, B 엔티티의 정보가 필요하지 않다면 연관관계가 있다고 하여 굳이 전부 불러오지 않고, A 엔티티에 대한 정보만 불러온 뒤 조회하면 된다는 의미입니다. 이러한 매커니즘을 구현하기 위해 도입된 개념이 프록시 객체입니다.

즉, DB에 연결하고 접근하는 것은 오버헤드가 발생하니, 이를 최소화하자는 생각에서 탄생한 것이 '프록시 객체'라는 개념입니다.

(당연히 1차 캐시에 실제 객체가 존재한다면 DB에 접근하여 객체를 불러오지 않아도 되니, 프록시 객체가 아닌 실제 객체를 사용하게 됩니다.)

프록시 객체는 실제 엔티티 클래스를 상속받아 생성되므로, 사용자(개발자)입장에서는 구분 없이 사용해도 무방합니다. 하지만 당연하게도 프록세 객체와 실제 객체는 내부적으로 다른 동작을 수행합니다.

프록시 객체의 메서드가 호출되면, 프록시 객체가 갖는 실제 객체 참조를 통해 메서드 호출을 위임하여 실제 객체의 메서드를 호출합니다.

즉시 로딩과 지연 로딩

엔티티 조회 시 연관관계에 있는 엔티티의 실제 객체를 바로 조회하는 것을 즉시 로딩이라고 하며, 연관관계 엔티티를 실제로 사용할 때 비로소 실제 객체를 불러오는 것을 지연 로딩이라고 합니다.

profile
알고리즘 풀이 아카이브

0개의 댓글