본문 바로가기

스프링

[Spring] 디자인 패턴 - 프록시 패턴(데코레이터 패턴)

참고 1. 스프링-핵심-원리-고급편, 김영한
참고 2. 위키백과

프록시 패턴

프록시는 클라이언트의 요청을 클라이언트 대신 서버로 전달하는 역할을 한다. 즉, 프록시 패턴이란 클라이언트에서 서버로의 직접 요청이 아닌, 클라이언트에서 서버로의 간접 요청을 하도록 중간에 프록시를 두는 방법을 말한다.

프록시

프록시 패턴의 이점

중간에 프록시를 둘 경우, 프록시에서 아래와 같은 여러가지 일들을 처리할 수 있다.

  • 접근 제어(프록시 패턴)
    • 권한에 따른 접근 차단
    • 캐싱 (캐시 서버도 프록시 서버 중 하나)
    • 지연 로딩
  • 부가 기능 (데코레이터 패턴)

프록시 객체 조건

클라이언트는 요청이 프록시로 간건지, 서버로 간건지 몰라야 한다. 즉 서버와 프록시는 같은 인터페이스를 사용해야 한다.또한 클라이언트가 사용하는 서버 객체를 프록시 객체로 변경해도 클라이언트 코드의 변경없이 동작할 수 있어야 한다.

  1. 서버와 프록시는 같은 인터페이스를 사용해야 함.
  2. 서버 객체를 프록시 객체로 변경해도, 클라이언트 코드는 변경되지 않아야 함.

의존 관계

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

프록시 패턴과 데코레이터 패턴 둘 다 프록시를 사용하는 패턴으로 형태는 같다. 이 두 패턴의 차이점은 패턴의 의도에 있다. 프록시 패턴의 경우, 접근 제어가 목적인 디자인 패턴이지만, 데코레이터 패턴은 새로운 부가 기능 추가가 목적인 디자인 패턴이다.

  • 프록시 패턴 == 데코레이터 패턴
  • 프록시 패턴 ➡️ 접근 제어
  • 데코레이터 패턴 ➡️ 새로운 부가 기능 추가