본문 바로가기
🎨 디자인 패턴

프록시 패턴

by 시마이 2024. 5. 29.

 

 

 

클라이언트에서 프록시를 통해 서버에 요청

 

클라이언트 : 서버로 요청하는 주체
서버 : 클라이언트의 요청을 처리하는 주체

 

일반적으로 클라이언트에서 서버로 직접 호출한다.

프록시 패턴에서는 클라이언트에서 프록시에게 요청하고, 프록시가 서버로 요청하여 처리하는 패턴을 갖는다.

서버와 프록시는 동일한 인터페이스를 상속받고, 클라이언트는 인터페이스로 요청한다.

 

 

 


프록시란?

프록시(Proxy)는 대리자라는 뜻처럼 서버가 처리하는 요청을 대신 처리해주는 클래스를 말한다.

클라이언트와 서버 사이에 위치하기 때문에 서버로 요청을 보내지 않고 클라이언트로 응답할 수도 있고, (접근제어)

서버로부터 응답을 받은 후 부가기능을 수행하여 클라이언트로 응답할 수도 있다. (부가 기능 추가)

GOF 디자인 패턴에서는 접근제어와 부가기능추가의 수행여부에 따라 아래와 같이 구분한다.
프록시 패턴 : 접근 제어
데코레이터 패턴 : 부가 기능 추가

 

 

 


프록시 패턴 구현

1. 서버의 기능을 정의한 인터페이스 생성

2. 인터페이스를 구현하여 서버클래스 생성

3. 인터페이스를 구현하여 프록시클래스 생성, 서버 클래스를 주입받을 멤버변수 생성

4. 클라이언트에서는 프록시를 주입받아 요청

target : 프록시가 호출할 대상

 

 


인터페이스 기반 프록시

서버의 기능이 구현된 클래스가 인터페이스의 구현체인 경우를 말한다.

위의 프록시 패턴 구현이 바로 인터페이스 기반 프록시이다.

 

 

 

구체클래스 기반 프록시

서버의 기능이 인터페이스의 구현체가 아닌 일반 클래스인 경우를 말한다.

서버의 기능이 구현된 클래스(=서버클래스)를 상속받아 만들어진 클래스를 프록시로 사용한다.

이 때 서버클래스를 상속받아 만들어진 클래스 내부에는 서버클래스 타입의 멤버변수를 선언하고, 이를 외부에서 주입받아 서버의 기능을 수행할 때 사용한다.

ConcreteLogic concreteLogic = new ConcreteLogic();	// 서버클래스
TimeProxy timeProxy = new TimeProxy(concreteLogic);	// 서버클래스 상속 클래스
ConcreteClient client = new ConcreteClient(timeProxy);  // 다형성으로 TimeProxy클래스를 전달 
client.execute();

 

 


 

 

스프링 핵심 원리 - 고급편 | 김영한 - 인프런

김영한 | 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., 핵심 디자인 패턴, 쓰레드 로컬, 스프링 AOP스프링의 3가지 핵심 고급 개념 이해하기

www.inflearn.com