[ 프록시(Proxy) ]
- 원본 코드를 수정하지 않고 공통 부가 기능을 적용할 수 있게 해주는 프록시에 대해 알아보자.
- 요청(Request)하는 객체는 클라이언트, 요청을 처리하는 실제 객체는 서버가 된다.
기존 방식(직접 호출)

- 클라이언트와 서버 개념에서 일반적으로 클라이언트가 서버를 직접 호출하고, 처리 결과를 직접 받는다.
- ex) Service가 Repository의 기능을 쓸 때 Repository 객체에 직접 접근해 메서드를 호출한다.
프록시 방식(간접 호출)

- 서버에 직접 요청하는 것이 아닌 어떤 대리자를 통해서 대신 간접적으로 서버에 요청할 수 있다.
- ex) Service가 proxy_repo 객체에 접근해 사용하고, proxy_repo가 Repository 객체에 접근해 실제 필요 로직을 호출한다.
- 프록시 방식 : 직접 요청하는 게 아닌 어떤 대리자(Proxy)를 통해 간접적으로 요청하는 방식
프록시 객체의 조건
- 클라이언트 객체(요청 객체)는 서버 객체(실제 객체)에게 요청을 한 것인지, 프록시 객체에게 요청을 한 것인지 몰라야 한다. (실제 객체에서 호출한 것처럼 사용할 수 있어야 한다)
- 클라이언트(요청 객체)가 사용하는 서버 객체를 프록시 객체로 변경해도 클라이언트 코드를 변경하지 않고 동작할 수 있어야 한다. (클라이언트 변경 없이 대체 가능해야 한다)
- 즉, 서버 객체와 프록시 객체는 같은 인터페이스를 사용해야 한다.

프록시의 주요 기능(장점)