클라이언트와 서버 그리고 대리자(프록시)
클라이언트 : 의뢰인, 서버에 필요한것을 요청
서버 : 서비스나 상품을 제공하는 사람 혹은 물건, 클라이언트의 요청 처리
@직접호출
클라이언트 -----> 서버
프록시 : 대리자
@간접호출
클라이언트 ----> 프록시(대리자) ----> 서버
=> 클라이언트의 요청한 결과를 서버에 직접 요청하는 것이 아닌 어떤 대리자를 통해서 대신 간접적으로 서버에 요청할 수 있다. 예) 직접 마트에서 장볼 수 있지만, 누군가에게 대신 부탁도 가능하잖아?
@프록시 기능
1. 접근제어
- 권한에 따른 접근 차단
- 캐시 : 한번 조회하면 변하지 않는 데이터라면 어딘가에 보관해두고 이미 조회한 데이터를 사용하는 것이 성능상좋다.
- 지연로딩
2. 부가기능 추가
- 원래 서버가 제공하는 기능에 더해서 부가기능을 수행한다.
ex) 요청 값 혹은 응답 값을 중간에 변형한다.
ex) 실행 시간을 측정해서 추가 로그를 남긴다.
3. 프록시 체인
@사용법
서버와 프록시는 같은 인터페이스를 사용해야한다.
왜? 클라이언트->서버 이렇게 짜놓은 로직을 클->대리자->서로 수정하기 위해서는 클라이언트 코드를 변경하지 않고 동작할 수 있어야하기 때문이다.
@분리(둘다 프록시 사용하는것은 같다, 패턴을 만든 의도가 중요하다. 의도에 따라 패턴을 구분한다.)
1. 프록시패턴 : 캐시를 통한 접근제어라 부름
- 의도 : 다른 개체에 대한 접근을 제어하기 위해 대리자를 제공
2. 데코레이터 패턴 : 프록시로 부가 기능을 추가하는 것을 데코레이터 패턴이라 부름
-의도 : 객체에 추가 책임(기능)을 동적으로 추가하고, 기능 확정을 위한 유연한 대안 제공