티스토리 뷰

반응형

이번 포스팅에서는 Proxy Pattern 에 대한 개념과 Spring Boot 에서 이러한 Proxy Pattern 을 사용한 예시에 대해서 살펴보려고 한다.

 

Proxy 패턴이란?


Proxy 패턴은 특정 객체가 호출되기 전에 그에 대한 접근을 제어하기 위해 사용되는 디자인 패턴이다. 즉 특정 객체가 호출될 때 해당 접근을 가로채 Proxy 객체가 그 역할을 대신하는 것을 의미한다.

 

제어권을 가져와 부가적인 기능을 수행한 후 기존 객체를 다시 Delegate 방식으로 호출할 수도 있다.

 

그림을 통해서 설명하면 기존에 클라이언트가 RealSubject.DoAction() 메소드를 호출하는 흐름을 Proxy 객체의 DoAction() 메소드로 가져와서 처리하고, 거기서 Delegate 하게 RealSubject 의 DoAction() 메소드를 호출하는 것이다.

 

매우 간단하지만 이러한 Proxy 패턴을 이용하면 굉장히 다양한 기능을 구현할 수 있다.

 

인터페이스를 이용한 프록시 패턴의 구현방식에 대해서 간략하게 설명해보자면, 타겟 클래스를 인터페이스로 추상화한 뒤에 해당 인터페이스를 구현하는 프록시 클래스를 생성한다.
그리고 해당 프록시 클래스에서는 타겟 클래스를 필드로 의존성 주입받는다. 컴포지션 방식을 이용해 가져온 타겟 클래스를 내부적으로 Delegate 방식으로 호출하도록 구현한다.
이제 이렇게 생성한 프록시 클래스의 객체를 Bean 으로 생성해 IoC 컨테이너에 등록하고 클라이언트가 타겟 객체에 대한 호출을 하면 타겟 Bean 이 아니라 프록시 Bean 을 대신 사용해 Proxy 패턴을 구현한다.

 

Proxy 패턴 활용예시


Proxy 패턴을 활용한 예시로는 가상 프록시, 스마트 프록시, 원격 프록시, 보호 프록시 등 다양하다.

 

가상 프록시란 꼭 필요로 하는 시점까지 객체의 생성을 연기하고 해당 객체를 Proxy 객체로 대체시키는 것을 의미한다. JPA 의 지연로딩이 이러한 가상 프록시 방식을 사용 하고 있으며, 이와 같이 객체를 생성할 때 리소스가 많이 필요한 경우 이러한 가상 프록시 방식을 이용할 수 있다.

 

스마트 프록시란 특정 객체의 메소드가 호출될 때 제어권을 가져와 호출 전후로 부가적인 기능을 수행하는 것을 의미한다. 이러한 스마트 프록시는 Spring AOP 를 구현하는데 사용한 방식이다.

 

원격 프록시란 로컬에 있지 않는 원격지의 객체를 사용할 수 있는 것을 의미합니다. 클라이언트의 객체 호출시 네트워크를 통해 원격에 있는 객체를 호출해 결과를 가져오고, 그 결과를 포장해 반환하는 방식이다.

 

마지막으로 소개할 보호 프록시란 특정 객체에 대한 접근제어를 수행하기 위해 사용되는 방식이다.

 

결과적으로 모두 특정 객체의 메소드로 가는 호출의 제어권을 가져와 무언가 수행한다는 공통점을 가진다.

 

Proxy 패턴의 장점


  1. 사이즈가 큰 객체의 로딩을 실제로 사용되는 시점으로 미룰 수 있다. (가상 프록시 방식)
  2. 실제 객체의 public, protected 메소드를 숨기고 인터페이스를 통해 노출시킬 수 있다. (보호 프록시 방식)
  3. 로컬에 있지 않고 원격지에 존재하는 객체를 사용할 수 있다. (원격 프록시 방식)
  4. 실제 객체의 접근에 대해서 사전, 사후 작업을 수행할 수 있다. (스마트 프록시 방식)

 

Proxy 패턴의 단점


  1. 객체를 생성할 때 프록시 객체도 함께 생성해줘야 하기 때문에 객체 생성이 빈번한 경우 성능이 저하될 수 있다.
  2. 로직이 난해해져 가독성이 떨어질 수 있다.

 

 

 

 
 
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함