[Spring][AOP] 프록시, 프록시 패턴, 데코레이터 패턴

donghyeok·2023년 2월 21일
0

Spring

목록 보기
3/9

프록시란?

클라이언트는 서버에 필요한 것을 요청하고, 서버는 클라이언트의 요청을 처리한다.
이때 클라이언트가 서버를 호출하는 방식은 2가지가 있는데 클라이언트가 서버를 직접 호출하는 방식,
클라이언트가 프록시를 통해서 서버에 간접 호출하는 방식이다.
직접 호출 방식과는 다르게 간접 호출을 하면 프록시가 중간에서 여러가지 일을 할 수 있게 된다.
이런식으로 중간에서 대리자 역할을 하는 것을 프록시라고 한다.

프록시의 특징 - 대체 가능

객체에서 프록시는 아무 객체나 될 수 없다. 객체에서 프록시가 되려면 원본 객체와 동일한 인터페이스를 사용해야한다.
이는, 클라이언트가 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지 모르게 하며 둘을 바꿔도 클라이언트 코드를 변경하지 않고 동작할 수 있게 한다.

프록시의 주요 기능

  • 접근 제어
    - 권한에 따른 접근 차단
    - 캐싱
    - 지연 로딩
  • 부가 기능 추가
    - 원래 서버 기능에 부가 기능을 수행
    - ex) 요청값이나 응답값을 중간에 변형
    - ex) 실행 시간 측정

프록시 패턴이란?

프록시 패턴은 위 그림처럼 실제 서버 코드와 클라이언트 코드를 전혀 변경하지 않고, 프록시를 도입해서 접근 제어를 할 수 있게 해준다. 또한 클라이언트 코드의 변경 없이 자유롭게 프록시를 넣고 뺄 수 있다. 실제 클라이언트 입장에서는 프록시 객체가 주입되었는지, 실제 객체가 주입되었는지 알지 못한다.

데코레이터 패턴이란?

데코레이터 패턴은 프록시 패턴과 비슷하게 실제 서버 코드와 클라이언트 코드의 변경 없이 프록시를 활용하기 부가 기능을 추가하는 패턴이다. 위 그림에서는 `Decorator` 들은 스스로 존재할 수 없으며 항상 꾸며주는 대상이 있어야 한다. 따라서 내부에 호출 대상인 `Component` 를 가지고 있어야 하며 항상 호출해야 한다. 이러한 중복을 제거하기 위해 보통 `Decorator` 추상 클래스를 만들어 묶어준다.

프록시 패턴 VS 데코레이터 패턴

위 설명과 그림을 보면 프록시 패턴과 데코레이터 패턴은 그 모양이나 기능이 거의 비슷하다.
Decorator라는 추상 클래스는 없어도 무관하기 때문에 상황에 따라 똑같다고 볼 수도 있다.
그러면 둘은 어떻게 구분하는 것일까?

의도 (Intent)

디자인 패턴에서 중요한 것은 패턴의 겉모양이 아니라 패턴을 만든 의도가 더 중요하다. 따라서 의도에 따라 패턴을 구분한다.

  • 프록시 패턴의 의도 : 다른 개체에 대한 접근을 제어하기 위해 프록시를 제공
  • 데코레이터 패턴의 의도 : 객체에 추가 기능을 동적으로 추가하고, 기능 확장을 위한 유연한 대안 제공

0개의 댓글