2. 프록시 패턴(Proxy Pattern)
프록시란?
대리자, 대변인의 뜻을 가지고 있는 단어.
즉, 다른 누군가를 대신해 그 역할을 수행하는 존재를 말합니다.
대변인 처럼 자신의 입장을 가감해서 값을 변경하는게 목적이 아닌, 제어의 흐름을 변경하거나 다른 로직을 중간에 실행하기 위해서 사용합니다.
“즉, 제어의 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴”
인터페이스를 중간에 두고 타이어를 교체하는 설계구조(DIP)와 자동차 인터페이스 아래에 자동차 종류를 두는 구조(OCP) 를 적용한 것이 프록시 패턴
프록시의 주요 기능
접근 제어
권한에 따른
캐싱
지연 로딩
부가 기능 추가
원래 서버가 제공하는 기능에 더해 부가 기능 수행
ex : 요청 값 / 응답 값을 중간에 변형
ex : 실행시간 측정 및 로그 남기기 등
단점 : 생성해야 할 클래스가 너무 많음.
대체가능
객체에서 프록시가 되려면 클라이언트는 서버에게 요청한 것인지, 프록시에게 요청한 것인지 조차 몰라야함. → 서버와 프록시는 같은 인터페이스를 사용해야함.
서버와 프록시가 같은 인터페이스 사용 → 서버 객체를 프록시 객체로 변경해도 클라이언트 코드를 변경하지 않고 동작할 수 있어야함.
서버와 프록시가 같은 인터페이스 사용
위 그림에서 Client는 ServerInterface 인터페이스에만 의존함(서버와 프록시는 같은 인터페이스 사용)
→ DI를 사용해서 대체 가능
Client → Server 관계에서 Client → Proxy → Server로 의존관계를 변경해도 클라이언트 코드를 전혀 변경하지 않아도 됨.
GOF 디자인 패턴
GOF 디자인 패턴에서는 의도(intent)에 따라 proxy pattern과 decorator pattern으로 구별함. (데코레이터 패턴도 프록시를 사용함)
proxy : 접근 제어가 목적
decorator : 새로운 기능 추가가 목적
(예제) V1 App 인스턴스 의존 관계
(예제) V1 프록시 의존 관계
프록시 런타임 객체 의존 관계 설정
프록시를 실제 스프링 빈 대신 등록함
실제 객체는 스프링 빈으로 등록 X
프록시는 내부에 실제 객체를 참조하고 있음.
Last updated