PSD( Private-Self-Development )

프록시 패턴 본문

Backend/디자인패턴

프록시 패턴

chjysm 2023. 2. 17. 15:09

프록시 패턴이란?

어떠한 객체를 사용하고자 할 때, 객체에 직접적으로 접근하는 것이 아닌,

해당 객체에 실질적으로  접근하는 대리자(프록시) 를 두어
해당 대리자에 접근하여 실객체 설정 및 사용하도록 만든 디자인패턴

 

프록시 패턴의 장점

  •  사이즈가 큰 객체라면 실제 해당 객체 생성 전에 프록시를 통해 참조할 수 있다.
  • 실 객체의 내부 로직을 숨기고 인터페이스를 통해 원하는것만 노출 가능
  • 실 객체 접근 전, 전처리 로직을 만들 수 있다.
  • 개방/폐쇄 원칙
  • 실 객체의 생명주기 관리 가능

프록시 패턴의 단점

  • 객체 생성 시 한 단계가 추가되므로, 객체 생성이 빈번할 경우 성능 저하
  • 프록시 내부에 스레드 생성, 동기화 구현 필요 시, 성능 저하
  • 가독성 저하

 

프록시 패턴 종류

  • 가상프록시
    • 꼭 필요로 하는 시점가지 객체의 생성 연기하고, 객체가 실제로 생성된 것 처럼 동작하도록 만드는 패턴
    • 프록시 에서 작은 단위의 작업을 처리하고 리소스가 많이 요구되는 작업은 실 클래스에서 사용하도록 구현
  • 원격프록시
    • 실 객체의 대변자 역할을 하도록 만드는 패턴 
    • 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는것 처럼 구현
  • 보호프록시
    • 원 객체에 대한 접근을 제어하기 위한 경우에 사용하는 패턴
  • 로깅프록시
    • 각 요청 전/후 로 로깅
  • 캐싱프록시
    • 항상 같은 결과를 생성하는 반복 요청에 대하여 캐싱
  • 스마트 참조 
    • 해당 서비스를 사용중인 클라이언트가 없을 경우 해당 서비스에 대한 시스템자원을 해제한다.

 

프록시 패턴 구현

public interface AInterface { // 인터페이스
	int getCount(int id);
    List<String> getList(int id);
}

 

public class AImpl implements AInterface { // 실 객체
    public int getCount(int id){
    	int i = 0;
        return i;
    }
    
    public List<String> getList(int id){
    	List<String> list = new ArrayList<>();
        return list;
    }
}

 

@RequiredArgsConstructor
public class AProxy implements AInterface { // 프록시
	private final AImpl aImpl;
    
    @Override
    @Transactional
	public int getCount(int id){
    	// 전 처리
        if( id < 1 ) {
        	return null;
        }
        
        aImpl.getCount(id);
    }
    
    @Override
    @Transactional
    public List<String> getList(int id){
    	// 전 처리
        if( id < 1 ) {
        	return null;
        }
        
        aImpl.getList(id);
    }
}

 


참조 : 

https://velog.io/@newtownboy/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-%ED%94%84%EB%A1%9D%EC%8B%9C%ED%8C%A8%ED%84%B4Proxy-Pattern

 

[디자인패턴] 프록시패턴(Proxy Pattern)

프록시(Proxy)를 번역하면 대리자, 대변인의 의미를 갖고 있다. 대리자, 대변인은 누군가를 대신해서 그 역할을 수행하는 존재이다. 이는 프로그램에도 똑같이 적용된다. 즉, 프록시에게 어떤 일

velog.io

 

'Backend > 디자인패턴' 카테고리의 다른 글

추상 팩토리 패턴  (0) 2023.05.09
팩토리 메서드 패턴  (0) 2023.03.21
싱글톤 패턴(Singleton pattern)  (0) 2023.03.20
팩토리 패턴  (1) 2023.03.15
옵저버 패턴  (1) 2023.02.17