[개인공부]
Proxy란
클라이언트 - 서버에 필요한 것을 요청, 서버 - 클라이언트의 요청을 처리Proxy란 대리자를 의미하며 직접호출과 다르게 간접 호출을 하면 대리자가 중간에 여러가지 일을 할 수 있다.
주요 기능
1. 접근 제어 및 캐싱- 권한에 따른 접근 차단- 캐싱- 지연 로딩(JPA 등)
2. 부가 기능 추가- 원래 서버가 제공하는 기능에 더 해서 부가 기능을 수행- 요청 값 중간 변형- 실행 시간을 측정해서 추가 로그 남김
3. 대리자가 다른 대리자를 호출 가능, 클라이언트는 호출 이후의 과정을 모른다
(프록시 체인)[ Client -> Proxy -> Proxy2 -> Proxy3 ]
대체 가능- 객체에서 프록시가 되려면, 클라이언트는 서버에게 요청을 한 것인지, 프록시에 요청을 한 것인지 몰라야 한다.SeverInterface는 프록시든 서버든 동일해야한다. (클라이언트는 서버 인터페이스에 의존, 즉 DI로 대체 가능하도록)
GOF 디자인 패턴에서는 둘의 의도에 따라서 프록시 패턴과 데코레이터 패턴으로 구분한다
[프록시 패턴] : 접근 제어가 목적
[데코레이터 패턴] : 새로운 기능 추가가 목적
인터페이스 기반 프록시 vs 클래스 기반 프록시
- 인터페이스가 없어도 클래스 기반으로 프록시 생성 가능
- 클래스 기반 프록시는 해당 클래스에만 적용, 인터페이스 기반 프록시는 인터페이스만 같으면 모든 곳 적용 가능
- 클래스 기반 프록시는 상속을 사용하기 때문에 몇 가지 제약이 있음
(부모 클래스의 생성자 호출, 클래스&메서드에 final 키워드 사용 시 상속 및 오버라이딩 불가능)
- 인터페이스 기반 프록시는 구현체까지 두 배 가량의 클래스 추가로 필요
'일간 회고록(TIL)' 카테고리의 다른 글
[22.09.28] Daily 회고록 (리플렉션, JDK 동적 프록시, CGLIB) (0) | 2022.09.29 |
---|---|
[22.09.19] Daily 회고록 (stomp failover 문제 해결) (0) | 2022.09.20 |
[22.09.14] Daily 회고록 (CloudWatch를 활용한 프로젝트 로그 저장, 영어 스피치) (0) | 2022.09.15 |
[22.09.07] Daily 회고록 (TemplateCallback 패턴, 영어 스피치) (0) | 2022.09.08 |
[22.09.05] Daily 회고록 (Stomp, Cookie to Session, handshake interceptor) (0) | 2022.09.06 |