[스프링 핵심 원리 고급편 정리] 프록시

개발새발log·2022년 12월 26일
0

Java/Spring

목록 보기
2/6

스프링 핵심 원리 - 고급편을 학습하며 정리한 내용입니다.

프록시

프록시의 주요 기능

  • 접근 제어

    • 권한에 따른 접근 차단
    • 캐싱
    • 지연 로딩
  • 부가 기능 추가

    • ex. 요청값/응답값 변경, 로깅

프록시 패턴과 데코레이터 패턴의 구분

둘 다 프록시를 사용하지만, 의도에 따라 구분된다.

  1. 프록시 패턴 : 접근 제어가 목적

  2. 데코레이터 패턴 : 새로운 기능 추가가 목적

다이어그램

프록시 패턴 예시

접근 제한

의사 코드

  • Subject 인터페이스를 구현한 Proxy 객체와 실서버 객체가 있다
  • 클라이언트에서 Subject를 호출하면, Proxy를 통해서 실서버 객체에 접근한다 (대리자로서의 Proxy)
  • Proxy 객체에서 캐시 값을 가지고 있으면, 실서버 객체로의 접근이 제한된다

구현 코드

강의에서 제공되는 코드의 일부입니다.

public class  ProxyPatternClient {

    private final Subject subject;

    public ProxyPatternClient(Subject subject) {
        this.subject = subject;
    }

    public void execute(){
        subject.operation();
    }
}
  • 클라이언트 입장에서는 인터페이스에 의존하기 때문에 실제 subject를 모른다 : 실제 서버를 프록시 서버로 대체 가능
@Slf4j
public class CacheProxy implements Subject{

    private final Subject target; // 실제 객체를 필드로 가지고 있음
    private String cacheValue;

    public CacheProxy(Subject target) {
        this.target = target;
    }

    @Override
    public String operation() {
        log.info("프록시 호출");
        if (cacheValue == null){
            cacheValue = target.operation();
        }
        return cacheValue;
    }
}
  • 캐시가 존재하지 않으면, 실제 서버 객체 호출
  • 그 뒤로 호출할 때는 빠르게 조회 가능, 실제 객체에 접근 제한 -> 캐싱
@Test
void cacheProxyTest(){
    RealSubject realSubject = new RealSubject();
    CacheProxy cacheProxy = new CacheProxy(realSubject);
    ProxyPatternClient client = new ProxyPatternClient(cacheProxy);
    client.execute(); // realSubject 호출
    client.execute(); // cacheProxy에서 즉시 반환 -> 시간 단축
    client.execute();
}
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글