대상 객체에 접근하기전에 그 접근에 대한 흐름을 가로채 해당 접근을 필터링 하거나 수정하는 등의 역할을 하는 계층이 있는 다지인 패턴이다.
클라이언트(사용자)와 서버 사이 중간에 위치하여 요청을 대신 처리해주는 서버이다.
사용자가 직접 서버에 접근하지 않고 프록시 서버를 통해 간접적으로 접근하는 구조이다.
책에서 예시를 든것은 Nginx와 CludFlare이다. CludFlare는 프록시 서버의 일종으로써 DDOS공격 방어, HTTPS 구축의 도움을 준다.
GPT에 검색해보니 우리가 쓰는 AWS CloudFront또한 프록시 서버의 일종이라고 한다.
회사에서는 S3에 FE를 배포를 하며 AWS CloudFront를 사용한다.
위에 회사에서 사용되는 흐름으로 예시를 들자면,
사용자가 웹사이트에 접속을 하면 DNS가 AWS CloudFront에 요청을 하게 되고 캐시에 정적파일관련 데이터가 있으면 캐시에서 응답하고 없으면 S3에 요청을 하여 사용자에게 HTML,JS,CSS 등 콘텐츠를 전달하게 된다.
클라이언트가 실제 객체(RealAPIService)를 집접 사용하지 않고, 프록시 객체를 통해 간접적으로 접근하기 때문에 아래 패턴은 프록시 패턴의 예제이다.
// Subject 인터페이스
interface APIService {
request(endpoint: string): void;
}
// 실제 서비스 클래스
class RealAPIService implements APIService {
request(endpoint: string): void {
console.log(`✅ 실제 API 요청 처리: ${endpoint}`);
}
}
// 프록시 클래스
class APIServiceProxy implements APIService {
private realService: RealAPIService;
private token: string;
constructor(token: string) {
this.token = token;
this.realService = new RealAPIService();
}
request(endpoint: string): void {
if (this.isAuthorized()) {
console.log("🔐 인증 성공. 요청을 처리합니다.");
this.realService.request(endpoint);
} else {
console.log("⛔ 인증 실패. 요청이 거부되었습니다.");
}
}